Version 2.15.0-13.0.dev

Merge commit '8246b01c63930dc38f4a3cce2b1839acce312e02' into 'dev'
diff --git a/BUILD.gn b/BUILD.gn
index 6c26e7e..2ea12ba 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -73,14 +73,6 @@
   deps = [ "runtime/bin/ffi_unit_test:run_ffi_unit_tests" ]
 }
 
-group("runtime_kernel") {
-  if (targetting_fuchsia) {
-    # Fuchsia has run_vm_tests marked testonly.
-    testonly = true
-  }
-  deps = [ ":runtime" ]
-}
-
 group("runtime_precompiled") {
   deps = [
     "runtime/bin:dart_precompiled_runtime",
diff --git a/DEPS b/DEPS
index 1ffbaa5..4134666 100644
--- a/DEPS
+++ b/DEPS
@@ -39,7 +39,7 @@
 
   # Checked-in SDK version. The checked-in SDK is a Dart SDK distribution in a
   # cipd package used to run Dart scripts in the build and test infrastructure.
-  "sdk_tag": "version:2.14.0-293.0.dev",
+  "sdk_tag": "version:2.14.0-377.4.beta",
 
   # co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
   # hashes. It requires access to the dart-build-access group, which EngProd
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 01dd119..0e88d0e 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -8960,6 +8960,18 @@
     tip: r"""Try removing the keyword 'static'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeStaticTearOffFromInstantiatedClass =
+    messageStaticTearOffFromInstantiatedClass;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageStaticTearOffFromInstantiatedClass = const MessageCode(
+    "StaticTearOffFromInstantiatedClass",
+    message:
+        r"""Cannot access static member on an instantiated generic class.""",
+    tip:
+        r"""Try removing the type arguments or placing them after the member name.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStrongModeNNBDButOptOut = messageStrongModeNNBDButOptOut;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/dartdev/lib/src/sdk.dart b/pkg/dartdev/lib/src/sdk.dart
index 426f810..833df09 100644
--- a/pkg/dartdev/lib/src/sdk.dart
+++ b/pkg/dartdev/lib/src/sdk.dart
@@ -39,8 +39,11 @@
 /// A utility class for finding and referencing paths within the Dart SDK.
 class Sdk {
   final String sdkPath;
+  final String version;
 
-  Sdk() : sdkPath = _computeSdkPath;
+  Sdk()
+      : sdkPath = _computeSdkPath,
+        version = Runtime.runtime.version;
 
   // Assume that we want to use the same Dart executable that we used to spawn
   // DartDev. We should be able to run programs with out/ReleaseX64/dart even
@@ -97,25 +100,20 @@
   static Runtime runtime = Runtime._();
 
   // Match "2.10.0-edge.0b2da6e7 (be) ...".
-  static RegExp channelRegex = RegExp(r'.* \(([\d\w]+)\) .*');
+  static final RegExp _channelRegex = RegExp(r'.* \(([\d\w]+)\) .*');
 
-  String _channel;
-
-  Runtime._() {
-    _parseVersion();
-  }
+  /// The SDK's version number (x.y.z-a.b.channel).
+  final String version;
 
   /// The SDK's release channel (`be`, `dev`, `beta`, `stable`).
-  String get channel => _channel;
+  final String channel;
 
-  /// Return whether the SDK is from the stable release channel.
-  bool get stableChannel => channel == 'stable';
+  Runtime._()
+      : version = _computeVersion(Platform.version),
+        channel = _computeChannel(Platform.version);
 
-  void _parseVersion() {
-    final version = Platform.version;
-    final match = channelRegex.firstMatch(version);
-    if (match != null) {
-      _channel = match.group(1);
-    }
-  }
+  static String _computeVersion(String version) =>
+      version.substring(0, version.indexOf(' '));
+  static String _computeChannel(String version) =>
+      _channelRegex.firstMatch(version)?.group(1);
 }
diff --git a/pkg/dartdev/lib/src/templates/common.dart b/pkg/dartdev/lib/src/templates/common.dart
index 2aac572..ac53756 100644
--- a/pkg/dartdev/lib/src/templates/common.dart
+++ b/pkg/dartdev/lib/src/templates/common.dart
@@ -2,7 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-final String gitignore = '''
+import '../sdk.dart';
+
+String get sdkConstraint => '''
+  sdk: '>=${sdk.version} <3.0.0'
+''';
+
+const String gitignore = '''
 # Files and directories created by pub.
 .dart_tool/
 .packages
@@ -11,7 +17,7 @@
 build/
 ''';
 
-final String analysisOptions = '''
+const String analysisOptions = '''
 # This file configures the static analysis results for your project (errors,
 # warnings, and lints).
 #
@@ -44,7 +50,7 @@
 # https://dart.dev/guides/language/analysis-options
 ''';
 
-final String changelog = '''
+const String changelog = '''
 ## 1.0.0
 
 - Initial version.
diff --git a/pkg/dartdev/lib/src/templates/console_full.dart b/pkg/dartdev/lib/src/templates/console_full.dart
index 5797c9a..553ceeb 100644
--- a/pkg/dartdev/lib/src/templates/console_full.dart
+++ b/pkg/dartdev/lib/src/templates/console_full.dart
@@ -38,7 +38,7 @@
 # homepage: https://www.example.com
 
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+${common.sdkConstraint}
 
 # dependencies:
 #   path: ^1.8.0
diff --git a/pkg/dartdev/lib/src/templates/console_simple.dart b/pkg/dartdev/lib/src/templates/console_simple.dart
index 376249b..5c6d381 100644
--- a/pkg/dartdev/lib/src/templates/console_simple.dart
+++ b/pkg/dartdev/lib/src/templates/console_simple.dart
@@ -36,7 +36,7 @@
 # homepage: https://www.example.com
 
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+${common.sdkConstraint}
 
 # dependencies:
 #   path: ^1.8.0
diff --git a/pkg/dartdev/lib/src/templates/package_simple.dart b/pkg/dartdev/lib/src/templates/package_simple.dart
index efe98f9..591f110 100644
--- a/pkg/dartdev/lib/src/templates/package_simple.dart
+++ b/pkg/dartdev/lib/src/templates/package_simple.dart
@@ -55,7 +55,7 @@
 # homepage: https://www.example.com
 
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+${common.sdkConstraint}
 
 # dependencies:
 #   path: ^1.8.0
diff --git a/pkg/dartdev/lib/src/templates/server_shelf.dart b/pkg/dartdev/lib/src/templates/server_shelf.dart
index 45873bc..ed6b730 100644
--- a/pkg/dartdev/lib/src/templates/server_shelf.dart
+++ b/pkg/dartdev/lib/src/templates/server_shelf.dart
@@ -42,7 +42,7 @@
 # homepage: https://www.example.com
 
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+${common.sdkConstraint}
 
 dependencies:
   args: ^2.0.0
diff --git a/pkg/dartdev/lib/src/templates/web_simple.dart b/pkg/dartdev/lib/src/templates/web_simple.dart
index 4bceae1..2dde7de 100644
--- a/pkg/dartdev/lib/src/templates/web_simple.dart
+++ b/pkg/dartdev/lib/src/templates/web_simple.dart
@@ -42,7 +42,7 @@
 # homepage: https://www.example.com
 
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+${common.sdkConstraint}
 
 # dependencies:
 #   path: ^1.7.0
diff --git a/pkg/front_end/lib/src/fasta/README.md b/pkg/front_end/lib/src/fasta/README.md
index c2f0fa4..953abaf 100644
--- a/pkg/front_end/lib/src/fasta/README.md
+++ b/pkg/front_end/lib/src/fasta/README.md
@@ -13,10 +13,10 @@
 
 ## Getting Started
 
-1. [Build](https://github.com/dart-lang/sdk/wiki/Building#building) the VM and patched SDK. Note: you only need to build the targets `runtime_kernel`, and `dart_precompiled_runtime`, so you only need to run this command:
+1. [Build](https://github.com/dart-lang/sdk/wiki/Building#building) the VM and patched SDK. Note: you only need to build the targets `runtime` and `dart_precompiled_runtime`, so you only need to run this command:
 
 ```bash
-./tools/build.py --mode release --arch x64 runtime_kernel dart_precompiled_runtime
+./tools/build.py --mode release --arch x64 runtime dart_precompiled_runtime
 ```
 
 ## Create an Outline File
diff --git a/pkg/front_end/lib/src/fasta/TESTING.md b/pkg/front_end/lib/src/fasta/TESTING.md
index 251e9da..e89d5c9 100644
--- a/pkg/front_end/lib/src/fasta/TESTING.md
+++ b/pkg/front_end/lib/src/fasta/TESTING.md
@@ -40,7 +40,7 @@
 
 ```
 # Language, co19, kernel, for VM using Fasta.
-./tools/build.py -mrelease runtime_kernel && ./tools/test.py -mrelease -cdartk co19 language kernel --time -pcolor --report -j16
+./tools/build.py -mrelease runtime && ./tools/test.py -mrelease -cdartk co19 language kernel --time -pcolor --report -j16
 ```
 
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 987f401..0ae336d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -2898,12 +2898,8 @@
               _uri, charOffset, lengthOfSpan(prefixGenerator.token, token));
     }
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
-    NamedTypeBuilder result = new NamedTypeBuilder(
-        name,
-        nullabilityBuilder,
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null);
+    NamedTypeBuilder result = new NamedTypeBuilder(name, nullabilityBuilder,
+        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null);
     _helper.libraryBuilder.addProblem(
         message.messageObject, message.charOffset, message.length, message.uri);
     result.bind(result.buildInvalidTypeDeclarationBuilder(message));
@@ -3272,6 +3268,11 @@
       } else if (member is AmbiguousBuilder) {
         return _helper.buildProblem(
             member.message, member.charOffset, name.text.length);
+      } else if (member.isStatic &&
+          !member.isFactory &&
+          typeArguments != null) {
+        return _helper.buildProblem(messageStaticTearOffFromInstantiatedClass,
+            send.fileOffset, send.name.text.length);
       } else {
         Builder? setter;
         if (member.isSetter) {
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index a9154ac..daf3f6c 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -753,6 +753,7 @@
 SpreadMapEntryTypeMismatch/analyzerCode: Fail # There's no analyzer code for that error yet.
 SpreadTypeMismatch/analyzerCode: Fail # There's no analyzer code for that error yet.
 StackOverflow/example: Fail
+StaticTearOffFromInstantiatedClass/analyzerCode: Fail
 StrongModeNNBDButOptOut/analyzerCode: Fail
 StrongModeNNBDButOptOut/example: Fail
 StrongModeNNBDPackageOptOut/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index e94eac1..8795748 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5254,3 +5254,11 @@
   script: |
     abstract class Class {}
     main() => Class.new;
+
+StaticTearOffFromInstantiatedClass:
+  template: "Cannot access static member on an instantiated generic class."
+  tip: "Try removing the type arguments or placing them after the member name."
+  experiments: constructor-tearoffs
+  script: |
+    class A<X> { static f() {} }
+    main() => A<int>.f;
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 808f9f1..5d363a0 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -59,6 +59,7 @@
 outdated
 part(s)
 patch(es)
+placing
 pubspec.yaml
 re
 sdksummary
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart
new file mode 100644
index 0000000..80c48ab
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A<X> {
+  static X foo<X>(X x) => x;
+}
+
+typedef D1<X> = A<X>;
+typedef D2<X extends num> = A<X>;
+
+test() {
+  Y Function<Y>(Y) f1 = A.foo; // Ok.
+  int Function(int) f2 = A.foo; // Ok.
+  int Function(int) f3 = A.foo<int>; // Ok.
+  int Function(int) f4 = A<int>.foo; // Error.
+  var f5 = A<int>.foo; // Error.
+
+  Y Function<Y>(Y) g1 = D1.foo; // Ok.
+  int Function(int) g2 = D1.foo; // Ok.
+  int Function(int) g3 = D1.foo<int>; // Ok.
+  int Function(int) g4 = D1<int>.foo; // Error.
+  var g5 = D1<int>.foo; // Error.
+
+  Y Function<Y>(Y) h1 = D2.foo; // Ok.
+  int Function(int) h2 = D2.foo; // Ok.
+  int Function(int) h3 = D2.foo<int>; // Ok.
+  int Function(int) h4 = D2<int>.foo; // Error.
+  var h5 = D2<int>.foo; // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
new file mode 100644
index 0000000..f018785e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation self::A::foo <core::int>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
new file mode 100644
index 0000000..f018785e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation self::A::foo <core::int>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline.expect
new file mode 100644
index 0000000..a3fb204
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+class A<X> {
+  static X foo<X>(X x) => x;
+}
+
+typedef D1<X> = A<X>;
+typedef D2<X extends num> = A<X>;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..37de545
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+class A<X> {
+  static X foo<X>(X x) => x;
+}
+
+main() {}
+test() {}
+typedef D1<X> = A<X>;
+typedef D2<X extends num> = A<X>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
new file mode 100644
index 0000000..67dd644
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation self::A::foo <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.outline.expect
new file mode 100644
index 0000000..07e6b54
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
new file mode 100644
index 0000000..67dd644
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+static method _#D2#new#tearOff<X extends core::num>() → self::A<self::_#D2#new#tearOff::X>
+  return new self::A::•<self::_#D2#new#tearOff::X>();
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation self::A::foo <core::int*>
+}
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 3a971c3..5420bf7 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -414,7 +414,7 @@
     if (analyzerCode is String) {
       analyzerCode = <String>[analyzerCode];
     }
-    List<Object> codes = analyzerCode as List<Object>;
+    List<Object?> codes = analyzerCode as List<Object?>;
     // If "index:" is defined, then "analyzerCode:" should not be generated
     // in the front end. See comment in messages.yaml
     codeArguments.add('analyzerCodes: <String>["${codes.join('", "')}"]');
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index c0cf579..a781353 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -607,11 +607,6 @@
   ASSERT(data_buffer != nullptr);
   memmove(data_buffer, recv_buffer, bytes_read);
 
-  // Memory Sanitizer complains addr not being initialized, which is done
-  // through RecvFrom().
-  // Issue: https://github.com/google/sanitizers/issues/1201
-  MSAN_UNPOISON(&addr, sizeof(RawAddr));
-
   // Get the port and clear it in the sockaddr structure.
   int port = SocketAddress::GetAddrPort(addr);
   // TODO(21403): Add checks for AF_UNIX, if unix domain sockets
diff --git a/runtime/docs/aot_binary_size_analysis.md b/runtime/docs/aot_binary_size_analysis.md
index 04a8e41..50d82be 100644
--- a/runtime/docs/aot_binary_size_analysis.md
+++ b/runtime/docs/aot_binary_size_analysis.md
@@ -13,7 +13,7 @@
 scripts (e.g. `pkg/vm/tool/precompiler2`):
 
 ```
-% tools/build.py -mrelease -ax64 runtime_kernel dart_precompiled_runtime
+% tools/build.py -mrelease -ax64 runtime dart_precompiled_runtime
 % pkg/vm/tool/precompiler2 --print-instructions-sizes-to=hello_sizes.json hello.dart hello.dart.aot
 ```
 
@@ -59,7 +59,7 @@
 scripts (e.g. `pkg/vm/tool/precompiler2`):
 
 ```
-% tools/build.py -mrelease -ax64 runtime_kernel dart_precompiled_runtime
+% tools/build.py -mrelease -ax64 runtime dart_precompiled_runtime
 % pkg/vm/tool/precompiler2 --write-v8-snapshot-profile-to=hello.heapsnapshot hello.dart hello.dart.aot
 ```
 
diff --git a/runtime/docs/dwarf_stack_traces.md b/runtime/docs/dwarf_stack_traces.md
index e1f6c5e..03b74d2 100644
--- a/runtime/docs/dwarf_stack_traces.md
+++ b/runtime/docs/dwarf_stack_traces.md
@@ -46,7 +46,7 @@
 `--dwarf-stack-traces` in a 64-bit Linux development environment:
 
 ```bash
-$ python3 tools/build.py -a x64 -m release runtime_kernel runtime_precompiled
+$ python3 tools/build.py -a x64 -m release runtime runtime_precompiled
 
 $ pkg/vm/tool/gen_kernel --platform out/ReleaseX64/vm_platform_strong.dill -o throws.dill throws.dart
 
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 2105623..64d0769 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -12,6 +12,7 @@
 cc/IsolateReload_PendingUnqualifiedCall_InstanceToStatic: Fail # Issue 32981
 cc/IsolateReload_PendingUnqualifiedCall_StaticToInstance: Fail # Issue 32981
 dart/boxmint_test: Pass, Slow # Uses slow path
+dart/byte_array_optimized_test: Pass, Slow
 dart/data_uri_import_test/none: SkipByDesign
 dart/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
 dart/isolates/*: Pass, Slow # Tests use many isolates and take a longer time.
@@ -24,6 +25,7 @@
 dart/stack_overflow_shared_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
 dart/use_bare_instructions_flag_test: Pass, Slow # Spawns several subprocesses
 dart_2/boxmint_test: Pass, Slow # Uses slow path
+dart_2/byte_array_optimized_test: Pass, Slow
 dart_2/data_uri_import_test/none: SkipByDesign
 dart_2/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
 dart_2/isolates/*: Pass, Slow # Tests use many isolates and take a longer time.
diff --git a/tools/VERSION b/tools/VERSION
index bd31ebf..5a324e5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 12
+PRERELEASE 13
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index c9ce212..a3a6e36 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -1016,7 +1016,7 @@
             "create_sdk",
             "dartdevc_test",
             "kernel_platform_files",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1095,7 +1095,7 @@
             "create_sdk",
             "dartdevc_test",
             "kernel_platform_files",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1186,7 +1186,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime",
             "--os=android"
           ]
@@ -1222,7 +1222,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "--os=android"
           ]
         },
@@ -1267,7 +1267,7 @@
           "arguments": [
             "--use-qemu",
             "dart_precompiled_runtime",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1306,7 +1306,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime",
             "gen_snapshot"
           ]
@@ -1364,7 +1364,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1435,7 +1435,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1478,7 +1478,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1508,7 +1508,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1535,7 +1535,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1565,7 +1565,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1592,7 +1592,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -1796,7 +1796,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1840,8 +1840,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "create_sdk",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1926,7 +1925,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -1961,7 +1960,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2009,7 +2008,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2037,7 +2036,7 @@
           "arguments": [
             "dart_precompiled_runtime",
             "gen_snapshot",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2067,7 +2066,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2365,7 +2364,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2393,7 +2392,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2421,7 +2420,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -2973,7 +2972,7 @@
             "--arch=ia32,x64",
             "--mode=release",
             "create_sdk",
-            "runtime_kernel"
+            "runtime"
           ]
         },
         {
@@ -3836,7 +3835,7 @@
           "arguments": [
             "--mode=debug,release",
             "--arch=x64",
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
@@ -3847,7 +3846,7 @@
             "--mode=release",
             "--arch=x64",
             "--sanitizer=tsan",
-            "runtime_kernel",
+            "runtime",
             "dart_precompiled_runtime"
           ]
         },
diff --git a/tools/sdks/update.sh b/tools/sdks/update.sh
index 1d33b82..8cb5633 100755
--- a/tools/sdks/update.sh
+++ b/tools/sdks/update.sh
@@ -61,9 +61,8 @@
   -ref $channel
 rm -rf sdk
 
-# TODO(athom): Use a proper arm64 SDK when available.
-gsutil.py cp "gs://dart-archive/channels/$channel/release/$1/sdk/dartsdk-macos-x64-release.zip" .
-unzip -q dartsdk-macos-x64-release.zip -d sdk
+gsutil.py cp "gs://dart-archive/channels/$channel/release/$1/sdk/dartsdk-macos-arm64-release.zip" .
+unzip -q dartsdk-macos-arm64-release.zip -d sdk
 cipd create \
   -name dart/dart-sdk/mac-arm64 \
   -in sdk \