diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3ebc479..725055b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -58,6 +58,18 @@
 
 [#41653]: https://github.com/dart-lang/sdk/issues/41653
 
+#### `dart:mirrors`
+
+*   **Breaking Change** [#42714][]: web compilers (dart2js and DDC) now produce
+    a compile-time error if `dart:mirrors` is imported.
+
+    Most projects should not be affected. Since 2.0.0 this library was
+    unsupported and produced runtime errors on all its APIs. Since then several
+    tools already reject code that use `dart:mirrors` including webdev and
+    flutter tools, we expect few projects to run into this problem.
+
+[#42714]: https://github.com/dart-lang/sdk/issues/42714
+
 ### Tools
 
 #### dartfmt
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index e44beff..5ebc469 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -681,7 +681,8 @@
       String invocationName = operatorNameToIdentifier(function.name);
       // TODO(sra): If the generator is for a closure's 'call' method, we don't
       // need to incorporate the enclosing class.
-      String className = method.enclosingClass.name.replaceAll('&', '_');
+      String className =
+          method.enclosingClass.name.replaceAll(_nonIdentifierRE, '_');
       return '${invocationName}\$body\$${className}';
     });
   }
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index e3f195b..a250af8 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -42,6 +42,7 @@
 bool Options::enable_vm_service_ = false;
 MallocGrowableArray<const char*> Options::enabled_experiments_ =
     MallocGrowableArray<const char*>(4);
+bool Options::disable_dart_dev_ = true;
 
 #define OPTION_FIELD(variable) Options::variable##_
 
@@ -403,6 +404,28 @@
   return true;
 }
 
+bool Options::ProcessEnableDartDevOption(const char* arg,
+                                         CommandLineOptions* vm_options) {
+  const char* value = OptionProcessor::ProcessOption(arg, "--enable-dart-dev");
+  if (value == nullptr) {
+    value = OptionProcessor::ProcessOption(arg, "--enable_dart_dev");
+  }
+  if (value == nullptr) {
+    // Ensure --disable-dart-dev doesn't result in an unknown flag error.
+    value = OptionProcessor::ProcessOption(arg, "--disable-dart-dev");
+    if (value != nullptr) {
+      return true;
+    }
+    value = OptionProcessor::ProcessOption(arg, "--disable_dart_dev");
+    if (value != nullptr) {
+      return true;
+    }
+    return false;
+  }
+  disable_dart_dev_ = false;
+  return true;
+}
+
 static void ResolveDartDevSnapshotPath(const char* script,
                                        char** snapshot_path) {
   if (!DartDevUtils::TryResolveDartDevSnapshotPath(snapshot_path)) {
@@ -591,7 +614,8 @@
         }
       }
     }
-    if (num_experiment_flags + 1 != script_or_cmd_index) {
+    // +2 since --enable-dart-dev needs to be passed to enable DartDev.
+    if (num_experiment_flags + 2 != script_or_cmd_index) {
       Syslog::PrintErr(
           "Warning: The following flags were passed as VM options and are "
           "being "
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index adfcb5c..54b44b6 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -46,8 +46,7 @@
   V(disable_exit, exit_disabled)                                               \
   V(preview_dart_2, nop_option)                                                \
   V(suppress_core_dump, suppress_core_dump)                                    \
-  V(enable_service_port_fallback, enable_service_port_fallback)                \
-  V(disable_dart_dev, disable_dart_dev)
+  V(enable_service_port_fallback, enable_service_port_fallback)
 
 // Boolean flags that have a short form.
 #define SHORT_BOOL_OPTIONS_LIST(V)                                             \
@@ -70,7 +69,8 @@
   V(ProcessEnableVmServiceOption)                                              \
   V(ProcessObserveOption)                                                      \
   V(ProcessAbiVersionOption)                                                   \
-  V(ProcessEnableExperimentOption)
+  V(ProcessEnableExperimentOption)                                             \
+  V(ProcessEnableDartDevOption)
 
 // This enum must match the strings in kSnapshotKindNames in main_options.cc.
 enum SnapshotKind {
@@ -129,6 +129,8 @@
   static constexpr int kAbiVersionUnset = -1;
   static int target_abi_version() { return target_abi_version_; }
 
+  static bool disable_dart_dev() { return disable_dart_dev_; }
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
   static DFE* dfe() { return dfe_; }
   static void set_dfe(DFE* dfe) { dfe_ = dfe; }
@@ -179,6 +181,7 @@
 
   static int target_abi_version_;
   static MallocGrowableArray<const char*> enabled_experiments_;
+  static bool disable_dart_dev_;
 
 #define OPTION_FRIEND(flag, variable) friend class OptionProcessor_##flag;
   STRING_OPTIONS_LIST(OPTION_FRIEND)
diff --git a/runtime/tests/vm/dart/sdk_hash_test.dart b/runtime/tests/vm/dart/sdk_hash_test.dart
index 6b05e96..855e007 100644
--- a/runtime/tests/vm/dart/sdk_hash_test.dart
+++ b/runtime/tests/vm/dart/sdk_hash_test.dart
@@ -30,11 +30,8 @@
 
     {
       final result = await Process.run(dart, [
-        genKernel,
-        '--platform',
-        platformDill,
-        '-o',
-        dillPath,
+        '--snapshot-kind=kernel',
+        '--snapshot=$dillPath',
         sourcePath,
       ]);
       Expect.equals('', result.stderr);
@@ -57,8 +54,9 @@
       // tags (both UInt32).
       Expect.listEquals(tagComponentFile, bytes.sublist(0, 4));
       Expect.listEquals(tagBinaryFormatVersion, bytes.sublist(4, 8));
+      Expect.notEquals('0000000000', ascii.decode(bytes.sublist(8, 10)));
       // Flip the first byte in the hash:
-      bytes[8] ^= bytes[8];
+      bytes[8] = ~bytes[8];
       myFile.writeAsBytesSync(bytes);
     }
 
diff --git a/runtime/tests/vm/dart/splay_test.dart b/runtime/tests/vm/dart/splay_test.dart
index 30e4582..f0498a9 100644
--- a/runtime/tests/vm/dart/splay_test.dart
+++ b/runtime/tests/vm/dart/splay_test.dart
@@ -27,6 +27,7 @@
 // VMOptions=--verify_after_gc
 // VMOptions=--verify_before_gc --verify_after_gc
 // VMOptions=--verify_store_buffer
+// VMOptions=--stress_write_barrier_elimination
 
 import "dart:math";
 import 'package:benchmark_harness/benchmark_harness.dart';
diff --git a/runtime/tests/vm/dart_2/sdk_hash_test.dart b/runtime/tests/vm/dart_2/sdk_hash_test.dart
index 6b05e96..b6f166c 100644
--- a/runtime/tests/vm/dart_2/sdk_hash_test.dart
+++ b/runtime/tests/vm/dart_2/sdk_hash_test.dart
@@ -30,11 +30,8 @@
 
     {
       final result = await Process.run(dart, [
-        genKernel,
-        '--platform',
-        platformDill,
-        '-o',
-        dillPath,
+        '--snapshot-kind=kernel',
+        '--snapshot=$dillPath',
         sourcePath,
       ]);
       Expect.equals('', result.stderr);
@@ -57,8 +54,9 @@
       // tags (both UInt32).
       Expect.listEquals(tagComponentFile, bytes.sublist(0, 4));
       Expect.listEquals(tagBinaryFormatVersion, bytes.sublist(4, 8));
+      Expect.notEquals('0000000000', ascii.decode(bytes.sublist(8, 18)));
       // Flip the first byte in the hash:
-      bytes[8] ^= bytes[8];
+      bytes[8] = ~bytes[8];
       myFile.writeAsBytesSync(bytes);
     }
 
diff --git a/runtime/tests/vm/dart_2/splay_test.dart b/runtime/tests/vm/dart_2/splay_test.dart
index eae1cbb..1fec471 100644
--- a/runtime/tests/vm/dart_2/splay_test.dart
+++ b/runtime/tests/vm/dart_2/splay_test.dart
@@ -27,6 +27,7 @@
 // VMOptions=--verify_after_gc
 // VMOptions=--verify_before_gc --verify_after_gc
 // VMOptions=--verify_store_buffer
+// VMOptions=--stress_write_barrier_elimination
 
 import "dart:math";
 import 'package:benchmark_harness/benchmark_harness.dart';
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 6c3f917..ea7c9e8 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -3194,32 +3194,24 @@
   ASSERT(locs()->in(kElementTypePos).reg() == kElemTypeReg);
   ASSERT(locs()->in(kLengthPos).reg() == kLengthReg);
 
+  compiler::Label slow_path, done;
   if (compiler->is_optimizing() && !FLAG_precompiled_mode &&
       num_elements()->BindsToConstant() &&
       compiler::target::IsSmi(num_elements()->BoundConstant())) {
     const intptr_t length =
         compiler::target::SmiValue(num_elements()->BoundConstant());
     if (Array::IsValidLength(length)) {
-      compiler::Label slow_path, done;
       InlineArrayAllocation(compiler, length, &slow_path, &done);
-      __ Bind(&slow_path);
-      __ PushObject(Object::null_object());  // Make room for the result.
-      __ Push(kLengthReg);                   // length.
-      __ Push(kElemTypeReg);
-      compiler->GenerateRuntimeCall(token_pos(), deopt_id(),
-                                    kAllocateArrayRuntimeEntry, 2, locs());
-      __ Drop(2);
-      __ Pop(kResultReg);
-      __ Bind(&done);
-      return;
     }
   }
 
+  __ Bind(&slow_path);
   auto object_store = compiler->isolate()->object_store();
   const auto& allocate_array_stub =
       Code::ZoneHandle(compiler->zone(), object_store->allocate_array_stub());
   compiler->GenerateStubCall(token_pos(), allocate_array_stub,
                              PcDescriptorsLayout::kOther, locs(), deopt_id());
+  __ Bind(&done);
   ASSERT(locs()->out(0).reg() == kResultReg);
 }
 
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 273bba0..54e2e07 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -2719,30 +2719,24 @@
   ASSERT(locs()->in(kElementTypePos).reg() == kElemTypeReg);
   ASSERT(locs()->in(kLengthPos).reg() == kLengthReg);
 
+  compiler::Label slow_path, done;
   if (compiler->is_optimizing() && !FLAG_precompiled_mode &&
       num_elements()->BindsToConstant() &&
       num_elements()->BoundConstant().IsSmi()) {
     const intptr_t length = Smi::Cast(num_elements()->BoundConstant()).Value();
     if (Array::IsValidLength(length)) {
-      compiler::Label slow_path, done;
       InlineArrayAllocation(compiler, length, &slow_path, &done);
-      __ Bind(&slow_path);
-      __ PushObject(Object::null_object());   // Make room for the result.
-      __ PushPair(kElemTypeReg, kLengthReg);  // length.
-      compiler->GenerateRuntimeCall(token_pos(), deopt_id(),
-                                    kAllocateArrayRuntimeEntry, 2, locs());
-      __ Drop(2);
-      __ Pop(kResultReg);
-      __ Bind(&done);
-      return;
     }
   }
+
+  __ Bind(&slow_path);
   auto object_store = compiler->isolate()->object_store();
   const auto& allocate_array_stub =
       Code::ZoneHandle(compiler->zone(), object_store->allocate_array_stub());
   compiler->GenerateStubCall(token_pos(), allocate_array_stub,
                              PcDescriptorsLayout::kOther, locs(), deopt_id());
   ASSERT(locs()->out(0).reg() == kResultReg);
+  __ Bind(&done);
 }
 
 LocationSummary* LoadFieldInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 219ec45..6173afa 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -2510,23 +2510,15 @@
       num_elements()->BoundConstant().IsSmi()) {
     const intptr_t length = Smi::Cast(num_elements()->BoundConstant()).Value();
     if (Array::IsValidLength(length)) {
-      compiler::Label slow_path, done;
       InlineArrayAllocation(compiler, length, &slow_path, &done);
-      __ Bind(&slow_path);
-      __ PushObject(Object::null_object());  // Make room for the result.
-      __ pushl(kLengthReg);
-      __ pushl(kElemTypeReg);
-      compiler->GenerateRuntimeCall(token_pos(), deopt_id(),
-                                    kAllocateArrayRuntimeEntry, 2, locs());
-      __ Drop(2);
-      __ popl(kResultReg);
-      __ Bind(&done);
-      return;
     }
   }
 
   __ Bind(&slow_path);
-  compiler->GenerateStubCall(token_pos(), StubCode::AllocateArray(),
+  auto object_store = compiler->isolate()->object_store();
+  const auto& allocate_array_stub =
+      Code::ZoneHandle(compiler->zone(), object_store->allocate_array_stub());
+  compiler->GenerateStubCall(token_pos(), allocate_array_stub,
                              PcDescriptorsLayout::kOther, locs(), deopt_id());
   __ Bind(&done);
   ASSERT(locs()->out(0).reg() == kResultReg);
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index d01f34f..a6905d3 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -2752,18 +2752,7 @@
       num_elements()->BoundConstant().IsSmi()) {
     const intptr_t length = Smi::Cast(num_elements()->BoundConstant()).Value();
     if (Array::IsValidLength(length)) {
-      compiler::Label slow_path, done;
       InlineArrayAllocation(compiler, length, &slow_path, &done);
-      __ Bind(&slow_path);
-      __ PushObject(Object::null_object());  // Make room for the result.
-      __ pushq(kLengthReg);
-      __ pushq(kElemTypeReg);
-      compiler->GenerateRuntimeCall(token_pos(), deopt_id(),
-                                    kAllocateArrayRuntimeEntry, 2, locs());
-      __ Drop(2);
-      __ popq(kResultReg);
-      __ Bind(&done);
-      return;
     }
   }
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index db3458a..66640b8 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -12135,6 +12135,7 @@
   StorePointer(&raw_ptr()->resolved_names_, Array::null());
   StorePointer(&raw_ptr()->exported_names_, Array::null());
   StorePointer(&raw_ptr()->loaded_scripts_, Array::null());
+  StorePointer(&raw_ptr()->dependencies_, Array::null());
 }
 
 void Library::AddImport(const Namespace& ns) const {
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 98813d1..4bfefb8 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -51,6 +51,10 @@
             reoptimization_counter_threshold,
             4000,
             "Counter threshold before a function gets reoptimized.");
+DEFINE_FLAG(bool,
+            stress_write_barrier_elimination,
+            false,
+            "Stress test write barrier elimination.");
 DEFINE_FLAG(bool, trace_deoptimization, false, "Trace deoptimization");
 DEFINE_FLAG(bool,
             trace_deoptimization_verbose,
@@ -253,6 +257,10 @@
   Exceptions::ThrowByType(Exceptions::kIntegerDivisionByZeroException, args);
 }
 
+static Heap::Space SpaceForRuntimeAllocation() {
+  return FLAG_stress_write_barrier_elimination ? Heap::kOld : Heap::kNew;
+}
+
 // Allocation of a fixed length array of given element type.
 // This runtime entry is never called for allocating a List of a generic type,
 // because a prior run time call instantiates the element type if necessary.
@@ -281,8 +289,9 @@
     Exceptions::Throw(thread, exception);
   }
 
-  const Array& array =
-      Array::Handle(zone, Array::New(static_cast<intptr_t>(len), Heap::kNew));
+  const Array& array = Array::Handle(
+      zone,
+      Array::New(static_cast<intptr_t>(len), SpaceForRuntimeAllocation()));
   arguments.SetReturn(array);
   TypeArguments& element_type =
       TypeArguments::CheckedHandle(zone, arguments.ArgAt(1));
@@ -310,7 +319,7 @@
 DEFINE_RUNTIME_ENTRY(AllocateObject, 2) {
   const Class& cls = Class::CheckedHandle(zone, arguments.ArgAt(0));
   const Instance& instance =
-      Instance::Handle(zone, Instance::New(cls, Heap::kNew));
+      Instance::Handle(zone, Instance::New(cls, SpaceForRuntimeAllocation()));
 
   arguments.SetReturn(instance);
   if (cls.NumTypeArguments() == 0) {
@@ -479,8 +488,8 @@
 // Return value: newly allocated context.
 DEFINE_RUNTIME_ENTRY(AllocateContext, 1) {
   const Smi& num_variables = Smi::CheckedHandle(zone, arguments.ArgAt(0));
-  const Context& context =
-      Context::Handle(zone, Context::New(num_variables.Value()));
+  const Context& context = Context::Handle(
+      zone, Context::New(num_variables.Value(), SpaceForRuntimeAllocation()));
   arguments.SetReturn(context);
 }
 
@@ -490,8 +499,8 @@
 // Return value: newly allocated context.
 DEFINE_RUNTIME_ENTRY(CloneContext, 1) {
   const Context& ctx = Context::CheckedHandle(zone, arguments.ArgAt(0));
-  Context& cloned_ctx =
-      Context::Handle(zone, Context::New(ctx.num_variables()));
+  Context& cloned_ctx = Context::Handle(
+      zone, Context::New(ctx.num_variables(), SpaceForRuntimeAllocation()));
   cloned_ctx.set_parent(Context::Handle(zone, ctx.parent()));
   Object& inst = Object::Handle(zone);
   for (int i = 0; i < ctx.num_variables(); i++) {
diff --git a/sdk/lib/_internal/js_runtime/lib/mirrors_patch_cfe.dart b/sdk/lib/_internal/js_runtime/lib/mirrors_patch_cfe.dart
deleted file mode 100644
index c429ecb..0000000
--- a/sdk/lib/_internal/js_runtime/lib/mirrors_patch_cfe.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Patch library for dart:mirrors.
-
-import 'dart:_js_helper' show patch;
-import 'dart:mirrors';
-
-const String _message = 'dart:mirrors is no longer supported for web apps';
-
-@patch
-MirrorSystem currentMirrorSystem() => throw new UnsupportedError(_message);
-
-@patch
-InstanceMirror reflect(dynamic reflectee) =>
-    throw new UnsupportedError(_message);
-
-@patch
-ClassMirror reflectClass(Type key) => throw new UnsupportedError(_message);
-
-@patch
-TypeMirror reflectType(Type key, [List<Type>? typeArguments]) =>
-    throw new UnsupportedError(_message);
-
-@patch
-abstract class MirrorSystem {
-  @patch
-  LibraryMirror findLibrary(Symbol libraryName) =>
-      throw new UnsupportedError(_message);
-
-  @patch
-  static String getName(Symbol symbol) => throw new UnsupportedError(_message);
-
-  @patch
-  static Symbol getSymbol(String name, [LibraryMirror? library]) =>
-      throw new UnsupportedError(_message);
-}
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index 0289238..15b4cd3 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -221,11 +221,6 @@
         "uri": "math/math.dart",
         "patches": "_internal/js_runtime/lib/math_patch.dart"
       },
-      "mirrors": {
-        "uri": "mirrors/mirrors.dart",
-        "patches": "_internal/js_runtime/lib/mirrors_patch_cfe.dart",
-        "supported": false
-      },
       "typed_data": {
         "uri": "typed_data/typed_data.dart",
         "patches": "_internal/js_runtime/lib/typed_data_patch.dart"
@@ -334,11 +329,6 @@
         "uri": "math/math.dart",
         "patches": "_internal/js_runtime/lib/math_patch.dart"
       },
-      "mirrors": {
-        "uri": "mirrors/mirrors.dart",
-        "patches": "_internal/js_runtime/lib/mirrors_patch_cfe.dart",
-        "supported": false
-      },
       "typed_data": {
         "uri": "typed_data/typed_data.dart",
         "patches": "_internal/js_runtime/lib/typed_data_patch.dart"
@@ -448,11 +438,6 @@
         "patches": "_internal/js_dev_runtime/patch/isolate_patch.dart",
         "supported": false
       },
-      "mirrors": {
-        "uri": "mirrors/mirrors.dart",
-        "patches": "_internal/js_runtime/lib/mirrors_patch_cfe.dart",
-        "supported": false
-      },
       "math": {
         "uri": "math/math.dart",
         "patches": "_internal/js_dev_runtime/patch/math_patch.dart"
diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml
index a80284d..50e350e 100644
--- a/sdk/lib/libraries.yaml
+++ b/sdk/lib/libraries.yaml
@@ -218,11 +218,6 @@
       uri: "math/math.dart"
       patches: "_internal/js_runtime/lib/math_patch.dart"
 
-    mirrors:
-      uri: "mirrors/mirrors.dart"
-      patches: "_internal/js_runtime/lib/mirrors_patch_cfe.dart"
-      supported: false
-
     typed_data:
       uri: "typed_data/typed_data.dart"
       patches: "_internal/js_runtime/lib/typed_data_patch.dart"
@@ -329,11 +324,6 @@
       uri: "math/math.dart"
       patches: "_internal/js_runtime/lib/math_patch.dart"
 
-    mirrors:
-      uri: "mirrors/mirrors.dart"
-      patches: "_internal/js_runtime/lib/mirrors_patch_cfe.dart"
-      supported: false
-
     typed_data:
       uri: "typed_data/typed_data.dart"
       patches: "_internal/js_runtime/lib/typed_data_patch.dart"
@@ -441,11 +431,6 @@
         patches: "_internal/js_dev_runtime/patch/isolate_patch.dart"
         supported: false
 
-      mirrors:
-        uri: "mirrors/mirrors.dart"
-        patches: "_internal/js_runtime/lib/mirrors_patch_cfe.dart"
-        supported: false
-
       math:
         uri: "math/math.dart"
         patches: "_internal/js_dev_runtime/patch/math_patch.dart"
diff --git a/tests/dart2js/42531_test.dart b/tests/dart2js/42531_test.dart
new file mode 100644
index 0000000..7bc9b58
--- /dev/null
+++ b/tests/dart2js/42531_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+// Regression test for badly named generator body.
+
+Future<void> goo(Future Function() f) async {
+  Expect.equals(102, (await f()).keys.single);
+  Expect.equals(104, (await f()).keys.single);
+}
+
+Future<T> identity<T>(T x) async => x;
+
+extension Gloop<T> on Map<T, List<T>> {
+  // An async method using a 'complex' generator type `Map<T, List<T>>`.  This
+  // requires a separated entry and body, which requires a name, and the name
+  // must be legal JavaScript.
+  Future<Map<T, List<T>>> foo(int x) async {
+    var result = await identity({(x += this.length) as T: <T>[]});
+    return result;
+  }
+
+  Future<int> bar(int x) async {
+    // An async closure using a 'complex' generator type `Map<T, Set<T>>`.  This
+    // requires a separated entry and body, which requires a name, and the name
+    // must be legal JavaScript.
+    await goo(() async => {(x += this.length) as T: <T>{}});
+    return x;
+  }
+}
+
+main() async {
+  // Test method.
+  Map<int, List<int>> o1 = {1: [], 2: []};
+  var o2 = await o1.foo(100);
+  var o3 = await o2.foo(100);
+  Expect.equals('{102: []}', '$o2');
+  Expect.equals('{101: []}', '$o3');
+
+  // Test closure.
+  Map<int, List<int>> o = {1: [], 2: []};
+  int x = await o.bar(100);
+  Expect.equals(104, x);
+}
diff --git a/tests/dart2js_2/42531_test.dart b/tests/dart2js_2/42531_test.dart
new file mode 100644
index 0000000..7bc9b58
--- /dev/null
+++ b/tests/dart2js_2/42531_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+// Regression test for badly named generator body.
+
+Future<void> goo(Future Function() f) async {
+  Expect.equals(102, (await f()).keys.single);
+  Expect.equals(104, (await f()).keys.single);
+}
+
+Future<T> identity<T>(T x) async => x;
+
+extension Gloop<T> on Map<T, List<T>> {
+  // An async method using a 'complex' generator type `Map<T, List<T>>`.  This
+  // requires a separated entry and body, which requires a name, and the name
+  // must be legal JavaScript.
+  Future<Map<T, List<T>>> foo(int x) async {
+    var result = await identity({(x += this.length) as T: <T>[]});
+    return result;
+  }
+
+  Future<int> bar(int x) async {
+    // An async closure using a 'complex' generator type `Map<T, Set<T>>`.  This
+    // requires a separated entry and body, which requires a name, and the name
+    // must be legal JavaScript.
+    await goo(() async => {(x += this.length) as T: <T>{}});
+    return x;
+  }
+}
+
+main() async {
+  // Test method.
+  Map<int, List<int>> o1 = {1: [], 2: []};
+  var o2 = await o1.foo(100);
+  var o3 = await o2.foo(100);
+  Expect.equals('{102: []}', '$o2');
+  Expect.equals('{101: []}', '$o3');
+
+  // Test closure.
+  Map<int, List<int>> o = {1: [], 2: []};
+  int x = await o.bar(100);
+  Expect.equals(104, x);
+}
diff --git a/tests/lib/web/mirrors_support_test.dart b/tests/lib/web/mirrors_support_test.dart
index 03dc2d5..78f3648 100644
--- a/tests/lib/web/mirrors_support_test.dart
+++ b/tests/lib/web/mirrors_support_test.dart
@@ -2,16 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// 'dart:mirrors' provides no functionality in dart-web, but can be imported and
-// all APIs throw.
-import 'dart:mirrors';
-import 'package:expect/expect.dart';
+// 'dart:mirrors' can no longer be imported, doing so produces a static error.
+import 'dart:mirrors';   //# 01: compile-time error
 
 main() {
-  Expect.throws<UnsupportedError>(() => currentMirrorSystem());
-  Expect.throws<UnsupportedError>(() => reflect(main));
-  Expect.throws<UnsupportedError>(() => reflectClass(Object));
-  Expect.throws<UnsupportedError>(() => reflectType(Object));
-  Expect.throws<UnsupportedError>(() => MirrorSystem.getName(#core));
-  Expect.throws<UnsupportedError>(() => MirrorSystem.getSymbol("core"));
+  reflect(main);         //# 01: continued
 }
diff --git a/tests/lib_2/web/mirrors_support_test.dart b/tests/lib_2/web/mirrors_support_test.dart
index 03dc2d5..78f3648 100644
--- a/tests/lib_2/web/mirrors_support_test.dart
+++ b/tests/lib_2/web/mirrors_support_test.dart
@@ -2,16 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// 'dart:mirrors' provides no functionality in dart-web, but can be imported and
-// all APIs throw.
-import 'dart:mirrors';
-import 'package:expect/expect.dart';
+// 'dart:mirrors' can no longer be imported, doing so produces a static error.
+import 'dart:mirrors';   //# 01: compile-time error
 
 main() {
-  Expect.throws<UnsupportedError>(() => currentMirrorSystem());
-  Expect.throws<UnsupportedError>(() => reflect(main));
-  Expect.throws<UnsupportedError>(() => reflectClass(Object));
-  Expect.throws<UnsupportedError>(() => reflectType(Object));
-  Expect.throws<UnsupportedError>(() => MirrorSystem.getName(#core));
-  Expect.throws<UnsupportedError>(() => MirrorSystem.getSymbol("core"));
+  reflect(main);         //# 01: continued
 }
diff --git a/tools/VERSION b/tools/VERSION
index c041bdd..40e02d0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -34,6 +34,6 @@
 MINOR 9
 PATCH 0
 PRERELEASE 21
-PRERELEASE_PATCH 4
+PRERELEASE_PATCH 10
 ABI_VERSION 38
 OLDEST_SUPPORTED_ABI_VERSION 38
diff --git a/tools/utils.py b/tools/utils.py
index 42a7db4..23c8812 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -503,7 +503,7 @@
 
 
 def GetShortGitHash(repo_path=DART_DIR):
-    p = subprocess.Popen(['git', 'rev-parse', '--short', 'HEAD'],
+    p = subprocess.Popen(['git', 'rev-parse', '--short=10', 'HEAD'],
                          stdout=subprocess.PIPE,
                          stderr=subprocess.STDOUT,
                          shell=IsWindows(),
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index 8f3f882..7d981bd 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -102,6 +102,8 @@
     vm_args = [
       "--depfile=$abs_depfile",
       "--depfile_output_filename=$rebased_output",
+
+      # Ensure gen_kernel.dart will use this SDK hash when consuming/producing kernel.
       "-Dsdk_hash=$sdk_hash",
     ]
 
@@ -114,6 +116,13 @@
       "--no-embed-sources",
       "--no-link-platform",
       "--output=" + rebase_path(output),
+
+      # Ensure the compiled appliation (e.g. kernel-service, frontend-server,
+      # ...) will use this SDK hash when consuming/producing kernel.
+      #
+      # (Instead of ensuring every user of the "application_snapshot" /
+      # "kernel_snapshot" passes this if needed, we always pass it)
+      "-Dsdk_hash=$sdk_hash",
     ]
     if (dart_platform_bytecode) {
       args += [
diff --git a/utils/kernel-service/BUILD.gn b/utils/kernel-service/BUILD.gn
index a01bb1b..150d229 100644
--- a/utils/kernel-service/BUILD.gn
+++ b/utils/kernel-service/BUILD.gn
@@ -89,6 +89,9 @@
     vm_args = [
       "--depfile=$abs_depfile",
       "--depfile_output_filename=$rebased_output",
+
+      # Ensure gen_kernel.dart will use this SDK hash when consuming/producing
+      # kernel.
       "-Dsdk_hash=$sdk_hash",
     ]
 
@@ -97,6 +100,10 @@
 
     args =
         invoker.extra_args + [
+          # Ensure the compiled kernel-service will use this SDK hash when
+          # consuming/producing kernel.
+          "-Dsdk_hash=$sdk_hash",
+
           "--packages=" + scheme + ":///.packages",
           "--platform=" + rebase_path("$root_out_dir/vm_platform_strong.dill"),
           "--filesystem-root=" + rebase_path("../../"),
