Version 2.14.0-36.0.dev

Merge commit 'a9159afa68fa1cbe1861bdf36f2b9c1e0150a268' into 'dev'
diff --git a/runtime/vm/compiler/relocation_test.cc b/runtime/vm/compiler/relocation_test.cc
index 9e101cb..3da5aa7 100644
--- a/runtime/vm/compiler/relocation_test.cc
+++ b/runtime/vm/compiler/relocation_test.cc
@@ -67,19 +67,27 @@
 
     EmitCodeFor(code, [&](compiler::Assembler* assembler) {
 #if defined(TARGET_ARCH_ARM64)
-      __ SetupDartSP();
-      __ EnterFrame(0);
+      // TODO(kustermann): Remove conservative approximation in relocator and
+      // make tests precise.
+      __ mov(R0, R0);
+      __ mov(R0, R0);
+      __ mov(R0, R0);
+      SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(
+          __ stp(LR, R1,
+                 compiler::Address(CSP, -2 * kWordSize,
+                                   compiler::Address::PairPreIndex)));
 #elif defined(TARGET_ARCH_ARM)
-    SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(
-      __ EnterFrame((1 << LR), 0));
+      SPILLS_RETURN_ADDRESS_FROM_LR_TO_REGISTER(__ PushList((1 << LR)));
 #endif
       __ GenerateUnRelocatedPcRelativeCall();
       AddPcRelativeCallTargetAt(__ CodeSize(), code, target);
 #if defined(TARGET_ARCH_ARM64)
-      __ LeaveFrame();
+      RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(
+          __ ldp(LR, R1,
+                 compiler::Address(CSP, 2 * kWordSize,
+                                   compiler::Address::PairPostIndex)));
 #elif defined(TARGET_ARCH_ARM)
-    RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(
-      __ LeaveFrame((1 << LR)));
+      RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(__ PopList((1 << LR)));
 #endif
       __ Ret();
     });
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 772a483..4a9f094 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -5185,16 +5185,23 @@
   if (declaration_type() != Type::null()) {
     return declaration_type();
   }
-  // For efficiency, the runtimeType intrinsic returns the type cached by
-  // DeclarationType without checking its nullability. Therefore, we
-  // consistently cache the kNonNullable version of the type.
-  // The exception is type Null which is stored as kNullable.
-  Type& type =
-      Type::Handle(Type::New(*this, TypeArguments::Handle(type_parameters()),
-                             Nullability::kNonNullable));
-  type ^= ClassFinalizer::FinalizeType(type);
-  set_declaration_type(type);
-  return type.ptr();
+  {
+    auto thread = Thread::Current();
+    SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+    if (declaration_type() != Type::null()) {
+      return declaration_type();
+    }
+    // For efficiency, the runtimeType intrinsic returns the type cached by
+    // DeclarationType without checking its nullability. Therefore, we
+    // consistently cache the kNonNullable version of the type.
+    // The exception is type Null which is stored as kNullable.
+    Type& type =
+        Type::Handle(Type::New(*this, TypeArguments::Handle(type_parameters()),
+                               Nullability::kNonNullable));
+    type ^= ClassFinalizer::FinalizeType(type);
+    set_declaration_type(type);
+    return type.ptr();
+  }
 }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/tools/VERSION b/tools/VERSION
index d059f6c..816f32a 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 35
+PRERELEASE 36
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 7f33648..f637f03 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -526,7 +526,10 @@
     },
     "dart2js-(linux|mac|win)-chrome": {
       "options": {
-        "use-sdk": true
+        "use-sdk": true,
+        "dart2js-options": [
+          "--no-legacy-javascript"
+        ]
       }
     },
     "dart2js-(linux|mac|win)-chrome-unsound": {