Version 2.13.0-2.0.dev

Merge commit 'd052156ea4b38367eb71bb4da6b873070bb94947' into 'dev'
diff --git a/pkg/analysis_server/lib/src/cider/fixes.dart b/pkg/analysis_server/lib/src/cider/fixes.dart
index 60f649e..d0ca2c8 100644
--- a/pkg/analysis_server/lib/src/cider/fixes.dart
+++ b/pkg/analysis_server/lib/src/cider/fixes.dart
@@ -31,17 +31,16 @@
   CiderFixesComputer(this._logger, this._fileResolver);
 
   /// Compute quick fixes for errors on the line with the [offset].
-  Future<List<CiderErrorFixes>> compute(String path, int offset) async {
+  Future<List<CiderErrorFixes>> compute(String path, int lineNumber) async {
     var result = <CiderErrorFixes>[];
     var resolvedUnit = _fileResolver.resolve(path: path);
 
     var lineInfo = resolvedUnit.lineInfo;
-    var requestLine = lineInfo.getLocation(offset).lineNumber;
 
     await _logger.runAsync('Compute fixes', () async {
       for (var error in resolvedUnit.errors) {
         var errorLine = lineInfo.getLocation(error.offset).lineNumber;
-        if (errorLine == requestLine) {
+        if (errorLine == lineNumber) {
           var workspace = DartChangeWorkspace([resolvedUnit.session]);
           var context = DartFixContextImpl(
             InstrumentationService.NULL_SERVICE,
diff --git a/pkg/analysis_server/test/src/cider/fixes_test.dart b/pkg/analysis_server/test/src/cider/fixes_test.dart
index b9157d5..4f4b240 100644
--- a/pkg/analysis_server/test/src/cider/fixes_test.dart
+++ b/pkg/analysis_server/test/src/cider/fixes_test.dart
@@ -76,7 +76,7 @@
       fileResolver,
     ).compute(
       convertPath(testPath),
-      _correctionContext.offset,
+      _correctionContext.line,
     );
   }
 
@@ -105,8 +105,8 @@
     _correctionContext = _CorrectionContext(
       content,
       offset,
-      location.lineNumber - 1,
-      location.columnNumber - 1,
+      location.lineNumber,
+      location.columnNumber,
     );
   }
 }
diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index 9544b3a..0c4138a 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -574,26 +574,32 @@
 class Architecture extends NamedEnum {
   static const ia32 = Architecture._('ia32');
   static const x64 = Architecture._('x64');
+  static const x64c = Architecture._('x64c');
   static const arm = Architecture._('arm');
   static const arm_x64 = Architecture._('arm_x64');
   static const armv6 = Architecture._('armv6');
   static const arm64 = Architecture._('arm64');
+  static const arm64c = Architecture._('arm64c');
   static const simarm = Architecture._('simarm');
   static const simarmv6 = Architecture._('simarmv6');
   static const simarm64 = Architecture._('simarm64');
+  static const simarm64c = Architecture._('simarm64c');
 
   static final List<String> names = _all.keys.toList();
 
   static final _all = Map<String, Architecture>.fromIterable([
     ia32,
     x64,
+    x64c,
     arm,
     armv6,
     arm_x64,
     arm64,
+    arm64c,
     simarm,
     simarmv6,
     simarm64,
+    simarm64c,
   ], key: (architecture) => (architecture as Architecture).name);
 
   static Architecture find(String name) {
diff --git a/pkg/vm/lib/transformations/ffi.dart b/pkg/vm/lib/transformations/ffi.dart
index 1c16b1b..5ead392 100644
--- a/pkg/vm/lib/transformations/ffi.dart
+++ b/pkg/vm/lib/transformations/ffi.dart
@@ -237,7 +237,6 @@
   final Map<NativeType, Procedure> loadMethods;
   final Map<NativeType, Procedure> storeMethods;
   final Map<NativeType, Procedure> elementAtMethods;
-  final Procedure loadStructMethod;
   final Procedure memCopy;
   final Procedure allocationTearoff;
   final Procedure asFunctionTearoff;
@@ -322,7 +321,6 @@
           final name = nativeTypeClassNames[t.index];
           return index.getTopLevelMember('dart:ffi', "_elementAt$name");
         }),
-        loadStructMethod = index.getTopLevelMember('dart:ffi', '_loadStruct'),
         memCopy = index.getTopLevelMember('dart:ffi', '_memCopy'),
         allocationTearoff = index.getMember(
             'dart:ffi', 'AllocatorAlloc', LibraryIndex.tearoffPrefix + 'call'),
diff --git a/runtime/lib/ffi.cc b/runtime/lib/ffi.cc
index 3a6bb40..0724681 100644
--- a/runtime/lib/ffi.cc
+++ b/runtime/lib/ffi.cc
@@ -88,45 +88,8 @@
   UNREACHABLE();
 }
 
-static ObjectPtr LoadValueStruct(Zone* zone,
-                                 const Pointer& target,
-                                 const AbstractType& instance_type_arg) {
-  // Result is a struct class -- find <class name>.#fromTypedDataBase
-  // constructor and call it.
-  const Class& cls = Class::Handle(zone, instance_type_arg.type_class());
-  const Function& constructor =
-      Function::Handle(cls.LookupFunctionAllowPrivate(String::Handle(
-          String::Concat(String::Handle(String::Concat(
-                             String::Handle(cls.Name()), Symbols::Dot())),
-                         Symbols::StructFromTypedDataBase()))));
-  ASSERT(!constructor.IsNull());
-  ASSERT(constructor.IsGenerativeConstructor());
-  ASSERT(!Object::Handle(constructor.VerifyCallEntryPoint()).IsError());
-  const Instance& new_object = Instance::Handle(Instance::New(cls));
-  ASSERT(cls.is_allocated() || Dart::vm_snapshot_kind() != Snapshot::kFullAOT);
-  const Array& args = Array::Handle(zone, Array::New(2));
-  args.SetAt(0, new_object);
-  args.SetAt(1, target);
-  const Object& constructorResult =
-      Object::Handle(DartEntry::InvokeFunction(constructor, args));
-  ASSERT(!constructorResult.IsError());
-  return new_object.ptr();
-}
-
 DEFINE_NATIVE_ENTRY(Ffi_loadStruct, 0, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Pointer, pointer, arguments->NativeArgAt(0));
-  const AbstractType& pointer_type_arg =
-      AbstractType::Handle(arguments->NativeTypeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Integer, index, arguments->NativeArgAt(1));
-
-  // TODO(36370): Make representation consistent with kUnboxedFfiIntPtr.
-  const size_t address =
-      pointer.NativeAddress() + static_cast<intptr_t>(index.AsInt64Value()) *
-                                    SizeOf(zone, pointer_type_arg);
-  const Pointer& pointer_offset =
-      Pointer::Handle(zone, Pointer::New(pointer_type_arg, address));
-
-  return LoadValueStruct(zone, pointer_offset, pointer_type_arg);
+  UNREACHABLE();
 }
 
 #define DEFINE_NATIVE_ENTRY_STORE(type)                                        \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index cc14ad3..ec47b19 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1452,11 +1452,8 @@
     HeapIterationScope his(T);
 
     IG->shared_class_table()->Remap(old_to_new_cid);
-    IG->ForEachIsolate(
-        [&](Isolate* I) {
-          I->set_remapping_cids(true);
-        },
-        /*is_at_safepoint=*/true);
+    IG->set_remapping_cids(true);
+
     // Update the class table. Do it before rewriting cids in headers, as
     // the heap walkers load an object's size *after* calling the visitor.
     IG->class_table()->Remap(old_to_new_cid);
@@ -1468,11 +1465,7 @@
       IG->heap()->VisitObjects(&visitor);
     }
 
-    IG->ForEachIsolate(
-        [&](Isolate* I) {
-          I->set_remapping_cids(false);
-        },
-        /*is_at_safepoint=*/true);
+    IG->set_remapping_cids(false);
 #if defined(DEBUG)
     IG->class_table()->Validate();
 #endif
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 392fd84..855cdca 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -2504,7 +2504,7 @@
   if (!error_.IsNull()) {
     Jump(error_);
   }
-  I->set_all_classes_finalized(true);
+  IG->set_all_classes_finalized(true);
 }
 
 void PrecompileParsedFunctionHelper::FinalizeCompilation(
diff --git a/runtime/vm/compiler/backend/block_scheduler.cc b/runtime/vm/compiler/backend/block_scheduler.cc
index ccc10b1..bcf2908 100644
--- a/runtime/vm/compiler/backend/block_scheduler.cc
+++ b/runtime/vm/compiler/backend/block_scheduler.cc
@@ -63,7 +63,7 @@
         DeoptId::kNone, "BlockScheduler: ICData array cleared");
   }
   if (ic_data_array.IsNull()) {
-    DEBUG_ASSERT(Isolate::Current()->HasAttemptedReload() ||
+    DEBUG_ASSERT(IsolateGroup::Current()->HasAttemptedReload() ||
                  function.ForceOptimize());
     return;
   }
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index 5b8b058..26198ca 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -482,7 +482,7 @@
 FlowGraph::ToCheck FlowGraph::CheckForInstanceCall(
     InstanceCallInstr* call,
     UntaggedFunction::Kind kind) const {
-  if (!FLAG_use_cha_deopt && !isolate()->all_classes_finalized()) {
+  if (!FLAG_use_cha_deopt && !isolate_group()->all_classes_finalized()) {
     // Even if class or function are private, lazy class finalization
     // may later add overriding methods.
     return ToCheck::kCheckCid;
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index 5f224b06..075f0cf 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -731,7 +731,7 @@
           // Type of a private class cannot change through later loaded libs.
           cid_ = type_class.id();
         } else if (FLAG_use_cha_deopt ||
-                   thread->isolate()->all_classes_finalized()) {
+                   thread->isolate_group()->all_classes_finalized()) {
           if (FLAG_trace_cha) {
             THR_Print("  **(CHA) Compile type not subclassed: %s\n",
                       type_class.ToCString());
@@ -1096,7 +1096,7 @@
           cid = type_class.id();
         } else {
           if (FLAG_use_cha_deopt ||
-              thread->isolate()->all_classes_finalized()) {
+              thread->isolate_group()->all_classes_finalized()) {
             if (FLAG_trace_cha) {
               THR_Print(
                   "  **(CHA) Computing exact type of receiver, "
@@ -1463,7 +1463,7 @@
   }
   if (field.needs_load_guard()) {
     // Should be kept in sync with Slot::Get.
-    DEBUG_ASSERT(Isolate::Current()->HasAttemptedReload());
+    DEBUG_ASSERT(IsolateGroup::Current()->HasAttemptedReload());
     return CompileType::Dynamic();
   }
   return CompileType(is_nullable, cid, abstract_type);
diff --git a/runtime/vm/compiler/call_specializer.cc b/runtime/vm/compiler/call_specializer.cc
index b6f5265..f81fd02 100644
--- a/runtime/vm/compiler/call_specializer.cc
+++ b/runtime/vm/compiler/call_specializer.cc
@@ -1161,7 +1161,7 @@
   if (!type_class.IsPrivate()) {
     // In AOT mode we can't use CHA deoptimizations.
     ASSERT(!CompilerState::Current().is_aot() || !FLAG_use_cha_deopt);
-    if (FLAG_use_cha_deopt || isolate()->all_classes_finalized()) {
+    if (FLAG_use_cha_deopt || isolate_group()->all_classes_finalized()) {
       if (FLAG_trace_cha) {
         THR_Print(
             "  **(CHA) Typecheck as class equality since no "
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 054b900..abaedc1 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -3422,7 +3422,7 @@
     body += NullConstant();
   } else if (is_getter && is_method) {
     ASSERT(!field.needs_load_guard()
-                NOT_IN_PRODUCT(|| I->HasAttemptedReload()));
+                NOT_IN_PRODUCT(|| IG->HasAttemptedReload()));
     body += LoadLocal(parsed_function_->ParameterVariable(0));
     body += LoadField(
         field, /*calls_initializer=*/field.NeedsInitializationCheckOnLoad());
@@ -3455,7 +3455,7 @@
 #if defined(PRODUCT)
       UNREACHABLE();
 #else
-      ASSERT(Isolate::Current()->HasAttemptedReload());
+      ASSERT(IsolateGroup::Current()->HasAttemptedReload());
       body += CheckAssignable(AbstractType::Handle(Z, field.type()),
                               Symbols::FunctionResult());
 #endif
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 7474941..06aeae2 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -526,7 +526,7 @@
 static void CheckStaticLookup(const Object& target) {
   if (target.IsNull()) {
 #ifndef PRODUCT
-    ASSERT(Isolate::Current()->HasAttemptedReload());
+    ASSERT(IsolateGroup::Current()->HasAttemptedReload());
     Report::LongJump(LanguageError::Handle(LanguageError::New(String::Handle(
         String::New("Unimplemented handling of missing static target")))));
 #else
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 1485555..8ee2201 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -961,9 +961,7 @@
     // TODO(27003)
     return;
   }
-  if (HasAttemptedReload()) {
-    return;
-  }
+
   // Verify that all canonical instances are correctly setup in the
   // corresponding canonical tables.
   BackgroundCompiler::Stop(this);
@@ -1993,8 +1991,8 @@
       new IsolateGroupReloadContext(this, shared_class_table, js));
   group_reload_context_ = group_reload_context;
 
+  SetHasAttemptedReload(true);
   ForEachIsolate([&](Isolate* isolate) {
-    isolate->SetHasAttemptedReload(true);
     isolate->program_reload_context_ =
         new ProgramReloadContext(group_reload_context_, isolate);
   });
@@ -2026,8 +2024,8 @@
       new IsolateGroupReloadContext(this, shared_class_table, js));
   group_reload_context_ = group_reload_context;
 
+  SetHasAttemptedReload(true);
   ForEachIsolate([&](Isolate* isolate) {
-    isolate->SetHasAttemptedReload(true);
     isolate->program_reload_context_ =
         new ProgramReloadContext(group_reload_context_, isolate);
   });
@@ -2448,7 +2446,7 @@
 
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
   if (FLAG_check_reloaded && is_runnable() && !Isolate::IsSystemIsolate(this)) {
-    if (!HasAttemptedReload()) {
+    if (!group()->HasAttemptedReload()) {
       FATAL(
           "Isolate did not reload before exiting and "
           "--check-reloaded is enabled.\n");
@@ -2817,7 +2815,7 @@
   raw_class = group()->class_table()->At(cid);
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
   ASSERT(raw_class != nullptr);
-  ASSERT(remapping_cids() || raw_class->untag()->id_ == cid);
+  ASSERT(group()->remapping_cids() || raw_class->untag()->id_ == cid);
   return raw_class;
 }
 
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 794225c..2eb9f41 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -474,6 +474,20 @@
     return null_safety() || FLAG_strict_null_safety_checks;
   }
 
+#if !defined(PRODUCT)
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  bool HasAttemptedReload() const {
+    return HasAttemptedReloadBit::decode(isolate_group_flags_);
+  }
+  void SetHasAttemptedReload(bool value) {
+    isolate_group_flags_ =
+        HasAttemptedReloadBit::update(value, isolate_group_flags_);
+  }
+#else
+  bool HasAttemptedReload() const { return false; }
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+#endif  // !defined(PRODUCT)
+
 #if defined(PRODUCT)
   void set_use_osr(bool use_osr) { ASSERT(!use_osr); }
 #else   // defined(PRODUCT)
@@ -690,6 +704,23 @@
         CompactionInProgressBit::update(value, isolate_group_flags_);
   }
 
+  // In precompilation we finalize all regular classes before compiling.
+  bool all_classes_finalized() const {
+    return AllClassesFinalizedBit::decode(isolate_group_flags_);
+  }
+  void set_all_classes_finalized(bool value) {
+    isolate_group_flags_ =
+        AllClassesFinalizedBit::update(value, isolate_group_flags_);
+  }
+
+  bool remapping_cids() const {
+    return RemappingCidsBit::decode(isolate_group_flags_);
+  }
+  void set_remapping_cids(bool value) {
+    isolate_group_flags_ =
+        RemappingCidsBit::update(value, isolate_group_flags_);
+  }
+
   uword FindPendingDeoptAtSafepoint(uword fp);
 
   // Used by background compiler which field became boxed and must trigger
@@ -739,9 +770,12 @@
   friend class NoReloadScope;  // no_reload_scope_depth_
 
 #define ISOLATE_GROUP_FLAG_BITS(V)                                             \
+  V(AllClassesFinalized)                                                       \
   V(CompactionInProgress)                                                      \
   V(EnableAsserts)                                                             \
+  V(HasAttemptedReload)                                                        \
   V(NullSafety)                                                                \
+  V(RemappingCids)                                                             \
   V(NullSafetySet)                                                             \
   V(Obfuscate)                                                                 \
   V(UseFieldGuards)                                                            \
@@ -1239,13 +1273,6 @@
 
   void DeleteReloadContext();
 
-  bool HasAttemptedReload() const {
-    return HasAttemptedReloadBit::decode(isolate_flags_);
-  }
-  void SetHasAttemptedReload(bool value) {
-    isolate_flags_ = HasAttemptedReloadBit::update(value, isolate_flags_);
-  }
-
   bool CanReload() const;
 #else
   bool IsReloading() const { return false; }
@@ -1303,21 +1330,6 @@
   ErrorPtr sticky_error() const { return sticky_error_; }
   DART_WARN_UNUSED_RESULT ErrorPtr StealStickyError();
 
-  // In precompilation we finalize all regular classes before compiling.
-  bool all_classes_finalized() const {
-    return AllClassesFinalizedBit::decode(isolate_flags_);
-  }
-  void set_all_classes_finalized(bool value) {
-    isolate_flags_ = AllClassesFinalizedBit::update(value, isolate_flags_);
-  }
-
-  bool remapping_cids() const {
-    return RemappingCidsBit::decode(isolate_flags_);
-  }
-  void set_remapping_cids(bool value) {
-    isolate_flags_ = RemappingCidsBit::update(value, isolate_flags_);
-  }
-
 #ifndef PRODUCT
   ErrorPtr InvokePendingServiceExtensionCalls();
   void AppendServiceExtensionCall(const Instance& closure,
@@ -1564,10 +1576,7 @@
   V(IsRunnable)                                                                \
   V(IsServiceIsolate)                                                          \
   V(IsKernelIsolate)                                                           \
-  V(AllClassesFinalized)                                                       \
-  V(RemappingCids)                                                             \
   V(ResumeRequest)                                                             \
-  V(HasAttemptedReload)                                                        \
   V(HasAttemptedStepping)                                                      \
   V(ShouldPausePostServiceRequest)                                             \
   V(CopyParentCode)                                                            \
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 88567bf..7ad3137 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -3806,7 +3806,7 @@
 void Class::Finalize() const {
   auto thread = Thread::Current();
   auto isolate_group = thread->isolate_group();
-  ASSERT(!thread->isolate()->all_classes_finalized());
+  ASSERT(!thread->isolate_group()->all_classes_finalized());
   ASSERT(!is_finalized());
   // Prefinalized classes have a VM internal representation and no Dart fields.
   // Their instance size  is precomputed and field offsets are known.
@@ -5812,7 +5812,7 @@
     // Shape changes lose the canonical bit because they may result/ in merging
     // constants. E.g., [x1, y1], [x1, y2] -> [x1].
     DEBUG_ASSERT(constant.IsCanonical() ||
-                 Isolate::Current()->HasAttemptedReload());
+                 IsolateGroup::Current()->HasAttemptedReload());
     InsertCanonicalConstant(zone, constant);
   }
   set.Release();
@@ -8976,7 +8976,7 @@
       Function::Handle(zone, Resolver::ResolveFunction(zone, owner, func_name));
 
   if (!target.IsNull() && (target.ptr() != parent.ptr())) {
-    DEBUG_ASSERT(Isolate::Current()->HasAttemptedReload());
+    DEBUG_ASSERT(IsolateGroup::Current()->HasAttemptedReload());
     if ((target.is_static() != parent.is_static()) ||
         (target.kind() != parent.kind())) {
       target = Function::null();
@@ -10299,8 +10299,8 @@
       FLAG_precompiled_mode || isolate_group->use_field_guards();
 #else
   const bool use_guarded_cid =
-      FLAG_precompiled_mode ||
-      (isolate_group->use_field_guards() && !isolate->HasAttemptedReload());
+      FLAG_precompiled_mode || (isolate_group->use_field_guards() &&
+                                !isolate_group->HasAttemptedReload());
 #endif  // !defined(PRODUCT)
   result.set_guarded_cid_unsafe(use_guarded_cid ? kIllegalCid : kDynamicCid);
   result.set_is_nullable_unsafe(use_guarded_cid ? false : true);
@@ -10594,7 +10594,7 @@
     UNREACHABLE();
 #else
     SafepointMutexLocker ml(
-        thread->isolate()->group()->initializer_functions_mutex());
+        thread->isolate_group()->initializer_functions_mutex());
     // Double check after grabbing the lock.
     initializer = InitializerFunction();
     if (initializer.IsNull()) {
@@ -18390,7 +18390,7 @@
     const intptr_t instance_size = SizeFromClass();
     ASSERT(instance_size != 0);
     const auto unboxed_fields_bitmap =
-        thread->isolate()->group()->shared_class_table()->GetUnboxedFieldsMapAt(
+        thread->isolate_group()->shared_class_table()->GetUnboxedFieldsMapAt(
             class_id);
     for (intptr_t offset = Instance::NextFieldOffset(); offset < instance_size;
          offset += kWordSize) {
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 6dbacbf..e67fa97 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -451,26 +451,26 @@
   }
 
   HierarchyInfo* hierarchy_info() const {
-    ASSERT(isolate_ != NULL);
+    ASSERT(isolate_group_ != nullptr);
     return hierarchy_info_;
   }
 
   void set_hierarchy_info(HierarchyInfo* value) {
-    ASSERT(isolate_ != NULL);
-    ASSERT((hierarchy_info_ == NULL && value != NULL) ||
-           (hierarchy_info_ != NULL && value == NULL));
+    ASSERT(isolate_group_ != nullptr);
+    ASSERT((hierarchy_info_ == nullptr && value != nullptr) ||
+           (hierarchy_info_ != nullptr && value == nullptr));
     hierarchy_info_ = value;
   }
 
   TypeUsageInfo* type_usage_info() const {
-    ASSERT(isolate_ != NULL);
+    ASSERT(isolate_group_ != nullptr);
     return type_usage_info_;
   }
 
   void set_type_usage_info(TypeUsageInfo* value) {
-    ASSERT(isolate_ != NULL);
-    ASSERT((type_usage_info_ == NULL && value != NULL) ||
-           (type_usage_info_ != NULL && value == NULL));
+    ASSERT(isolate_group_ != nullptr);
+    ASSERT((type_usage_info_ == nullptr && value != nullptr) ||
+           (type_usage_info_ != nullptr && value == nullptr));
     type_usage_info_ = value;
   }
 
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index dd18559..3a43c2b 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -204,16 +204,6 @@
 Pointer<S> _loadPointer<S extends NativeType>(
     Pointer pointer, int offsetInBytes) native "Ffi_loadPointer";
 
-S _loadStructNoStruct<S extends Struct>(Pointer<S> pointer, int index) {
-  if (S == Struct) {
-    throw ArgumentError("S should be a subtype of Struct.");
-  }
-  return _loadStruct(pointer, index);
-}
-
-S _loadStruct<S extends Struct>(Pointer<S> pointer, int index)
-    native "Ffi_loadStruct";
-
 @pragma("vm:recognized", "other")
 void _storeInt8(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeInt8";
@@ -518,10 +508,12 @@
 
 extension StructPointer<T extends Struct> on Pointer<T> {
   @patch
-  T get ref => _loadStructNoStruct(this, 0);
+  T get ref =>
+      throw "UNREACHABLE: This case should have been rewritten in the CFE.";
 
   @patch
-  T operator [](int index) => _loadStructNoStruct(this, index);
+  T operator [](int index) =>
+      throw "UNREACHABLE: This case should have been rewritten in the CFE.";
 }
 
 extension NativePort on SendPort {
diff --git a/sdk/lib/async/schedule_microtask.dart b/sdk/lib/async/schedule_microtask.dart
index bb6d600..314d474 100644
--- a/sdk/lib/async/schedule_microtask.dart
+++ b/sdk/lib/async/schedule_microtask.dart
@@ -125,6 +125,7 @@
 /// * [The Event Loop and Dart](https://dart.dev/articles/event-loop/):
 /// Learn how Dart handles the event queue and microtask queue, so you can write
 /// better asynchronous code with fewer surprises.
+@pragma('vm:entry-point', 'call')
 void scheduleMicrotask(void Function() callback) {
   _Zone currentZone = Zone._current;
   if (identical(_rootZone, currentZone)) {
diff --git a/tools/VERSION b/tools/VERSION
index 79ef3203..28914ae 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 1
+PRERELEASE 2
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 764388f..4d2a870 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -272,16 +272,20 @@
       "benchmarks/",
       "out/DebugIA32/",
       "out/DebugX64/",
+      "out/DebugX64C/",
       "out/DebugSIMARM/",
       "out/DebugSIMARM64/",
+      "out/DebugSIMARM64C/",
       "out/DebugSIMARM_X64/",
       "out/DebugAndroidARM/",
       "out/DebugAndroidARM_X64/",
       "out/DebugAndroidARM64/",
       "out/ReleaseIA32/",
       "out/ReleaseX64/",
+      "out/ReleaseX64C/",
       "out/ReleaseSIMARM/",
       "out/ReleaseSIMARM64/",
+      "out/ReleaseSIMARM64C/",
       "out/ReleaseSIMARM_X64/",
       "out/ReleaseAndroidARM/",
       "out/ReleaseAndroidARM_X64/",
@@ -294,20 +298,27 @@
       "out/ReleaseXARM64/",
       "out/ProductIA32/",
       "out/ProductX64/",
+      "out/ProductX64C/",
       "out/ProductSIMARM/",
       "out/ProductSIMARM64/",
+      "out/ProductSIMARM64C/",
       "out/ProductSIMARM_X64/",
       "out/ProductAndroidARM/",
       "out/ProductAndroidARM64/",
       "xcodebuild/DebugIA32/",
       "xcodebuild/DebugSIMARM/",
       "xcodebuild/DebugSIMARM64/",
+      "xcodebuild/DebugSIMARM64C/",
       "xcodebuild/DebugX64/",
+      "xcodebuild/DebugX64C/",
       "xcodebuild/ProductX64/",
+      "xcodebuild/ProductX64C/",
       "xcodebuild/ReleaseIA32/",
       "xcodebuild/ReleaseSIMARM/",
       "xcodebuild/ReleaseSIMARM64/",
+      "xcodebuild/ReleaseSIMARM64C/",
       "xcodebuild/ReleaseX64/",
+      "xcodebuild/ReleaseX64C/",
       "samples/",
       "samples_2/",
       "samples-dev/",
@@ -730,13 +741,13 @@
         "use-elf": true
       }
     },
-    "dartkp-android-(debug|product|release)-(arm|arm64)": {
+    "dartkp-android-(debug|product|release)-(arm|arm64|arm64c)": {
       "options": {
         "use-elf": true
       }
     },
-    "dartk-android-(debug|product|release)-(arm|arm64)": {},
-    "dartkp-(linux|win|mac)-(debug|product|release)-(arm64|simarm|simarm64)": {
+    "dartk-android-(debug|product|release)-(arm|arm64|arm64c)": {},
+    "dartkp-(linux|win|mac)-(debug|product|release)-(arm64|arm64c|simarm|simarm64|simarm64c)": {
       "options": {
         "use-elf": true
       }
@@ -762,19 +773,19 @@
         "use-elf": true
       }
     },
-    "dartkp-win-(product|release)-x64": {
+    "dartkp-win-(product|release)-(x64|x64c)": {
       "options": {
         "use-elf": true
       }
     },
-    "dartkp-win-debug-x64": {
+    "dartkp-win-debug-(x64|x64c)": {
       "options": {
         "use-elf": true,
         "vm-options": []
       }
     },
-    "dartkp-(linux|mac)-(product|release)-x64": {},
-    "dartkp-obfuscate-(linux|mac|win)-(debug|product|release)-x64": {
+    "dartkp-(linux|mac)-(product|release)-(x64|x64c)": {},
+    "dartkp-obfuscate-(linux|mac|win)-(debug|product|release)-(x64|x64c)": {
       "options": {
         "builder-tag": "obfuscated",
         "vm-options": [
@@ -782,19 +793,19 @@
         ]
       }
     },
-    "dartkp-(linux|mac)-debug-x64": {
+    "dartkp-(linux|mac)-debug-(x64|x64c)": {
       "options": {
         "vm-options": []
       }
     },
-    "dartkp-no-bare-(linux|mac|win)-(debug|product|release)-x64": {
+    "dartkp-no-bare-(linux|mac|win)-(debug|product|release)-(x64|x64c)": {
       "options": {
         "vm-options": [
           "--no-use-bare-instructions"
         ]
       }
     },
-    "dartkp-no-bare-(linux|mac|win)-(debug|product|release)-(simarm|simarm64)": {
+    "dartkp-no-bare-(linux|mac|win)-(debug|product|release)-(simarm|simarm64|simarm64c)": {
       "options": {
         "vm-options": [
           "--no-use-bare-instructions"
@@ -802,68 +813,68 @@
         "use-elf": true
       }
     },
-    "dartk-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {},
-    "dartk-fuchsia-(debug|product|release)-x64": {},
+    "dartk-(linux|mac|win)-(debug|product|release)-(ia32|x64|x64c)": {},
+    "dartk-fuchsia-(debug|product|release)-(x64|x64c)": {},
     "dartk-linux-debug-(ia32|x64)-canary": {
       "options": {
         "builder-tag": "canary"
       }
     },
-    "dartkp-weak-asserts-(linux|mac)-(debug|product|release)-x64": {
+    "dartkp-weak-asserts-(linux|mac)-(debug|product|release)-(x64|x64c)": {
       "options": {
         "enable-asserts": true,
         "builder-tag": "vm_nnbd"
       }
     },
-    "dartkp-weak-asserts-(linux|mac)-(debug|product|release)-(simarm|simarm64)": {
+    "dartkp-weak-asserts-(linux|mac)-(debug|product|release)-(simarm|simarm64|simarm64c)": {
       "options": {
         "enable-asserts": true,
         "use-elf": true,
         "builder-tag": "vm_nnbd"
       }
     },
-    "dartkp-weak-asserts-win-(debug|product|release)-(simarm64|x64)": {
+    "dartkp-weak-asserts-win-(debug|product|release)-(simarm64|simarm64c|x64|x64c)": {
       "options": {
         "enable-asserts": true,
         "use-elf": true,
         "builder-tag": "vm_nnbd"
       }
     },
-    "dartk-weak-asserts-(linux|mac|win)-(debug|product|release)-(ia32|simarm|simarm64|x64)": {
+    "dartk-weak-asserts-(linux|mac|win)-(debug|product|release)-(ia32|simarm|simarm64|simarm64c|x64|x64c)": {
       "options": {
         "enable-asserts": true,
         "builder-tag": "vm_nnbd"
       }
     },
-    "dartk-strong-(linux|mac|win)-(debug|product|release)-(ia32|simarm|simarm64|x64)": {
+    "dartk-strong-(linux|mac|win)-(debug|product|release)-(ia32|simarm|simarm64|simarm64c|x64|x64c)": {
       "options": {
         "builder-tag": "vm_nnbd"
       }
     },
-    "dartkp-strong-(linux|mac)-(debug|product|release)-x64": {
+    "dartkp-strong-(linux|mac)-(debug|product|release)-(x64|x64c)": {
       "options": {
         "builder-tag": "vm_nnbd"
       }
     },
-    "dartkp-strong-(linux|mac)-(debug|product|release)-(simarm|simarm64)": {
+    "dartkp-strong-(linux|mac)-(debug|product|release)-(simarm|simarm64|simarm64c)": {
       "options": {
         "use-elf": true,
         "builder-tag": "vm_nnbd"
       }
     },
-    "dartkp-strong-win-(debug|product|release)-(simarm64|x64)": {
+    "dartkp-strong-win-(debug|product|release)-(simarm64|simarm64c|x64|x64c)": {
       "options": {
         "use-elf": true,
         "builder-tag": "vm_nnbd"
       }
     },
-    "dartk-checked-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
+    "dartk-checked-(linux|mac|win)-(debug|product|release)-(ia32|x64|x64c)": {
       "options": {
         "enable-asserts": true
       }
     },
-    "dartk-(linux|mac|win)-(debug|product|release)-(arm64|simarm|simarm64)": {},
-    "dartk-optcounter-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
+    "dartk-(linux|mac|win)-(debug|product|release)-(arm64|arm64c|simarm|simarm64|simarm64c)": {},
+    "dartk-optcounter-(linux|mac|win)-(debug|product|release)-(ia32|x64|x64c|simarm|simarm64|simarm64c)": {
       "options": {
         "builder-tag": "optimization_counter_threshold",
         "vm-options": [
@@ -872,27 +883,27 @@
         ]
       }
     },
-    "dartk-reload-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
+    "dartk-reload-(linux|mac|win)-(debug|product|release)-(ia32|x64|x64c)": {
       "options": {
         "hot-reload": true
       }
     },
-    "dartk-reload-rollback-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {
+    "dartk-reload-rollback-(linux|mac|win)-(debug|product|release)-(ia32|x64|x64c)": {
       "options": {
         "hot-reload-rollback": true
       }
     },
-    "dartk-linux-(debug|product|release)-(arm|arm64)-qemu": {
+    "dartk-linux-(debug|product|release)-(arm|arm64|arm64c)-qemu": {
       "options": {
         "use-qemu": true
       }
     },
-    "dartkp-linux-(debug|product|release)-(arm|arm64)-qemu": {
+    "dartkp-linux-(debug|product|release)-(arm|arm64|arm64c)-qemu": {
       "options": {
         "use-qemu": true
       }
     },
-    "app_jitk-(linux|mac|win)-(debug|product|release)-(ia32|x64)": {},
+    "app_jitk-(linux|mac|win)-(debug|product|release)-(ia32|x64|x64c)": {},
     "dartdevk-checked-(linux|mac|win)-(debug|product|release)-(chrome|firefox)": {
       "options": {
         "checked": true,
@@ -1133,7 +1144,8 @@
       "builders": [
         "vm-kernel-precomp-android-release-arm",
         "vm-kernel-precomp-android-release-arm_x64",
-        "vm-kernel-precomp-android-release-arm64"
+        "vm-kernel-precomp-android-release-arm64",
+        "vm-kernel-precomp-android-release-arm64c"
       ],
       "meta": {
         "description": "This configuration is used by the vm precomp builders on Android."
@@ -1162,10 +1174,13 @@
     {
       "builders": [
         "vm-ffi-android-debug-arm64",
+        "vm-ffi-android-debug-arm64c",
         "vm-ffi-android-debug-arm",
         "vm-ffi-android-release-arm64",
+        "vm-ffi-android-release-arm64c",
         "vm-ffi-android-release-arm",
         "vm-ffi-android-product-arm64",
+        "vm-ffi-android-product-arm64c",
         "vm-ffi-android-product-arm"
       ],
       "meta": {
@@ -1245,9 +1260,13 @@
       "builders": [
         "vm-kernel-precomp-nnbd-linux-debug-x64",
         "vm-kernel-precomp-nnbd-linux-release-simarm64",
+        "vm-kernel-precomp-nnbd-linux-release-simarm64c",
         "vm-kernel-precomp-nnbd-linux-release-x64",
+        "vm-kernel-precomp-nnbd-linux-release-x64c",
         "vm-kernel-precomp-nnbd-mac-release-simarm64",
-        "vm-kernel-precomp-nnbd-win-release-x64"
+        "vm-kernel-precomp-nnbd-mac-release-simarm64c",
+        "vm-kernel-precomp-nnbd-win-release-x64",
+        "vm-kernel-precomp-nnbd-win-release-x64c"
       ],
       "meta": {
         "description": "This configuration is for the VM AOT nnbd builder group."
@@ -1354,10 +1373,14 @@
     {
       "builders": [
         "vm-kernel-precomp-linux-product-x64",
+        "vm-kernel-precomp-linux-product-x64c",
         "vm-kernel-precomp-linux-release-simarm",
         "vm-kernel-precomp-linux-release-simarm64",
+        "vm-kernel-precomp-linux-release-simarm64c",
         "vm-kernel-precomp-mac-release-simarm64",
-        "vm-kernel-precomp-win-release-x64"
+        "vm-kernel-precomp-mac-release-simarm64c",
+        "vm-kernel-precomp-win-release-x64",
+        "vm-kernel-precomp-win-release-x64c"
       ],
       "meta": {
         "description": "This configuration is used by the vm kernel precomp builders."
@@ -1383,7 +1406,8 @@
     },
     {
       "builders": [
-        "vm-kernel-precomp-linux-debug-x64"
+        "vm-kernel-precomp-linux-debug-x64",
+        "vm-kernel-precomp-linux-debug-x64c"
       ],
       "meta": {
         "description": "This configuration is used by the vm kernel precomp debug builders. It uses 15 shards for testing to avoid 1 hour shard timeouts."
@@ -1410,8 +1434,10 @@
     {
       "builders": [
         "vm-kernel-precomp-bare-linux-release-x64",
+        "vm-kernel-precomp-bare-linux-release-x64c",
         "vm-kernel-precomp-bare-linux-release-simarm",
-        "vm-kernel-precomp-bare-linux-release-simarm64"
+        "vm-kernel-precomp-bare-linux-release-simarm64",
+        "vm-kernel-precomp-bare-linux-release-simarm64c"
       ],
       "meta": {
         "description": "This configuration is used by the vm kernel precomp builders using bare instructions."
@@ -1437,7 +1463,8 @@
     },
     {
       "builders": [
-        "vm-kernel-precomp-obfuscate-linux-release-x64"
+        "vm-kernel-precomp-obfuscate-linux-release-x64",
+        "vm-kernel-precomp-obfuscate-linux-release-x64c"
       ],
       "meta": {
         "description": "This configuration is used by the obfuscated vm kernel precomp builders."
@@ -1599,10 +1626,13 @@
       "builders": [
         "vm-kernel-linux-release-simarm",
         "vm-kernel-linux-release-simarm64",
+        "vm-kernel-linux-release-simarm64c",
         "vm-kernel-linux-release-ia32",
         "vm-kernel-win-debug-ia32",
         "vm-kernel-win-debug-x64",
+        "vm-kernel-win-debug-x64c",
         "vm-kernel-win-product-x64",
+        "vm-kernel-win-product-x64c",
         "vm-kernel-win-release-ia32"
       ],
       "meta": {
@@ -1630,15 +1660,22 @@
       "builders": [
         "vm-kernel-nnbd-linux-debug-ia32",
         "vm-kernel-nnbd-linux-debug-x64",
+        "vm-kernel-nnbd-linux-debug-x64c",
         "vm-kernel-nnbd-linux-release-ia32",
         "vm-kernel-nnbd-linux-release-simarm",
         "vm-kernel-nnbd-linux-release-simarm64",
+        "vm-kernel-nnbd-linux-release-simarm64c",
         "vm-kernel-nnbd-linux-release-x64",
+        "vm-kernel-nnbd-linux-release-x64c",
         "vm-kernel-nnbd-mac-debug-x64",
+        "vm-kernel-nnbd-mac-debug-x64c",
         "vm-kernel-nnbd-mac-release-x64",
+        "vm-kernel-nnbd-mac-release-x64c",
         "vm-kernel-nnbd-win-release-ia32",
         "vm-kernel-nnbd-win-debug-x64",
-        "vm-kernel-nnbd-win-release-x64"
+        "vm-kernel-nnbd-win-debug-x64c",
+        "vm-kernel-nnbd-win-release-x64",
+        "vm-kernel-nnbd-win-release-x64c"
       ],
       "meta": {
         "description": "This configuration is for the VM nnbd builder group."
@@ -1710,13 +1747,20 @@
     {
       "builders": [
         "vm-kernel-linux-product-x64",
+        "vm-kernel-linux-product-x64c",
         "vm-kernel-linux-release-x64",
+        "vm-kernel-linux-release-x64c",
         "vm-kernel-linux-debug-ia32",
         "vm-kernel-linux-debug-x64",
+        "vm-kernel-linux-debug-x64c",
         "vm-kernel-mac-product-x64",
+        "vm-kernel-mac-product-x64c",
         "vm-kernel-mac-release-x64",
+        "vm-kernel-mac-release-x64c",
         "vm-kernel-mac-debug-x64",
-        "vm-kernel-win-release-x64"
+        "vm-kernel-mac-debug-x64c",
+        "vm-kernel-win-release-x64",
+        "vm-kernel-win-release-x64c"
       ],
       "meta": {
         "description": "This configuration is for the co19_2 kernel builder group."
@@ -1750,7 +1794,8 @@
     },
     {
       "builders": [
-        "vm-kernel-checked-linux-release-x64"
+        "vm-kernel-checked-linux-release-x64",
+        "vm-kernel-checked-linux-release-x64c"
       ],
       "meta": {
         "description": "This configuration is for the kernel builder group in checked mode."
@@ -1766,7 +1811,7 @@
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-checked-linux-release-x64"
+            "-ndartk-checked-linux-release-${arch}"
           ],
           "fileset": "vm-kernel",
           "shards": 10
@@ -1797,7 +1842,8 @@
     },
     {
       "builders": [
-        "cross-vm-linux-release-arm64"
+        "cross-vm-linux-release-arm64",
+        "cross-vm-linux-release-arm64c"
       ],
       "meta": {
         "description": "This configuration is for the cross arm builders."
@@ -1822,7 +1868,8 @@
     },
     {
       "builders": [
-        "cross-vm-precomp-linux-release-arm64"
+        "cross-vm-precomp-linux-release-arm64",
+        "cross-vm-precomp-linux-release-arm64c"
       ],
       "meta": {
         "description": "This configuration is for the cross arm AOT builders."
@@ -1850,8 +1897,11 @@
     {
       "builders": [
         "app-kernel-linux-debug-x64",
+        "app-kernel-linux-debug-x64c",
         "app-kernel-linux-product-x64",
-        "app-kernel-linux-release-x64"
+        "app-kernel-linux-product-x64c",
+        "app-kernel-linux-release-x64",
+        "app-kernel-linux-release-x64c"
       ],
       "meta": {
         "description": "This configuration is used by the vm kernel app builder group."
@@ -1867,7 +1917,7 @@
         {
           "name": "vm tests",
           "arguments": [
-            "-napp_jitk-linux-${mode}-x64"
+            "-napp_jitk-linux-${mode}-${arch}"
           ],
           "shards": 6,
           "fileset": "vm-kernel"
@@ -2147,7 +2197,11 @@
     {
       "builders": [
         "vm-kernel-optcounter-threshold-linux-release-ia32",
-        "vm-kernel-optcounter-threshold-linux-release-x64"
+        "vm-kernel-optcounter-threshold-linux-release-x64",
+        "vm-kernel-optcounter-threshold-linux-release-x64c",
+        "vm-kernel-optcounter-threshold-linux-release-simarm",
+        "vm-kernel-optcounter-threshold-linux-release-simarm64",
+        "vm-kernel-optcounter-threshold-linux-release-simarm64c"
       ],
       "meta": {
         "description": "This is the configuration for the kernel optcounter builders, under the vm-kernel group. They run the same tests as the ordinary VM kernel builders, but add extra options to the vm."
@@ -2173,7 +2227,9 @@
     {
       "builders": [
         "vm-kernel-reload-linux-debug-x64",
-        "vm-kernel-reload-linux-release-x64"
+        "vm-kernel-reload-linux-debug-x64c",
+        "vm-kernel-reload-linux-release-x64",
+        "vm-kernel-reload-linux-release-x64c"
       ],
       "meta": {
         "description": "This is the configuration for the kernel hot reload builders."
@@ -2199,7 +2255,9 @@
     {
       "builders": [
         "vm-kernel-reload-rollback-linux-debug-x64",
-        "vm-kernel-reload-rollback-linux-release-x64"
+        "vm-kernel-reload-rollback-linux-debug-x64c",
+        "vm-kernel-reload-rollback-linux-release-x64",
+        "vm-kernel-reload-rollback-linux-release-x64c"
       ],
       "meta": {
         "description": "This is the configuration for kernel reload rollback builders."
@@ -2215,7 +2273,7 @@
         {
           "name": "vm tests",
           "arguments": [
-            "-ndartk-reload-rollback-linux-${mode}-x64"
+            "-ndartk-reload-rollback-linux-${mode}-${arch}"
           ],
           "fileset": "vm-kernel",
           "shards": 10
diff --git a/tools/gn.py b/tools/gn.py
index 52ae73b..ce133c3 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -71,8 +71,7 @@
     if arch in ['ia32', 'arm', 'armv6', 'simarm', 'simarmv6', 'simarm_x64']:
         return 'x86'
     if arch in [
-            'x64', 'arm64', 'simarm64', 'arm_x64', 'x64_comp_ptr',
-            'arm64_comp_ptr', 'simarm64_comp_ptr'
+            'x64', 'arm64', 'simarm64', 'arm_x64', 'x64c', 'arm64c', 'simarm64c'
     ]:
         return 'x64'
 
@@ -81,13 +80,11 @@
 def TargetCpuForArch(arch, target_os):
     if arch in ['ia32', 'simarm', 'simarmv6']:
         return 'x86'
-    if arch in [
-            'x64', 'simarm64', 'simarm_x64', 'x64_comp_ptr', 'simarm64_comp_ptr'
-    ]:
+    if arch in ['x64', 'simarm64', 'simarm_x64', 'x64c', 'simarm64c']:
         return 'x64'
     if arch == 'arm_x64':
         return 'arm'
-    if arch == 'arm64_comp_ptr':
+    if arch == 'arm64c':
         return 'arm64'
     return arch
 
@@ -96,19 +93,19 @@
 def DartTargetCpuForArch(arch):
     if arch in ['ia32']:
         return 'ia32'
-    if arch in ['x64', 'x64_comp_ptr']:
+    if arch in ['x64', 'x64c']:
         return 'x64'
     if arch in ['arm', 'simarm', 'simarm_x64', 'arm_x64']:
         return 'arm'
     if arch in ['armv6', 'simarmv6']:
         return 'armv6'
-    if arch in ['arm64', 'simarm64', 'arm64_comp_ptr', 'simarm64_comp_ptr']:
+    if arch in ['arm64', 'simarm64', 'arm64c', 'simarm64c']:
         return 'arm64'
     return arch
 
 
 def IsCompressedPointerArch(arch):
-    return arch in ['x64_comp_ptr', 'arm64_comp_ptr', 'simarm64_comp_ptr']
+    return arch in ['x64c', 'arm64c', 'simarm64c']
 
 
 def HostOsForGn(host_os):
@@ -297,7 +294,7 @@
 
 def ProcessOptions(args):
     if args.arch == 'all':
-        args.arch = 'ia32,x64,simarm,simarm64'
+        args.arch = 'ia32,x64,simarm,simarm64,x64c,simarm64c'
     if args.mode == 'all':
         args.mode = 'debug,release,product'
     if args.os == 'all':
diff --git a/tools/run_offsets_extractor.sh b/tools/run_offsets_extractor.sh
index c9c011b..52b1376 100755
--- a/tools/run_offsets_extractor.sh
+++ b/tools/run_offsets_extractor.sh
@@ -43,8 +43,8 @@
 run release x64 ReleaseX64
 run release ia32 ReleaseIA32
 run release simarm64 ReleaseSIMARM64
-run release x64_comp_ptr ReleaseX64_COMP_PTR
-run release simarm64_comp_ptr ReleaseSIMARM64_COMP_PTR
+run release x64c ReleaseX64C
+run release simarm64c ReleaseSIMARM64C
 echo "" >>"$TEMP_JIT"
 echo "" >>"$TEMP_AOT"
 echo "#else  // !defined(PRODUCT)" >>"$TEMP_JIT"
@@ -53,8 +53,8 @@
 run product x64 ProductX64
 run product ia32 ProductIA32
 run product simarm64 ProductSIMARM64
-run product x64_comp_ptr ProductX64_COMP_PTR
-run product simarm64_comp_ptr ProductSIMARM64_COMP_PTR
+run product x64c ProductX64C
+run product simarm64c ProductSIMARM64C
 echo "" >>"$TEMP_JIT"
 echo "" >>"$TEMP_AOT"
 echo "#endif  // !defined(PRODUCT)" >>"$TEMP_JIT"
diff --git a/tools/utils.py b/tools/utils.py
index 2a5aeac..dcb68a5 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -72,9 +72,9 @@
     'simarmv6': 'ia32',
     'simarm64': 'ia32',
     'simarm_x64': 'ia32',
-    'x64_comp_ptr': 'ia32',
-    'arm64_comp_ptr': 'arm',
-    'simarm64_comp_ptr': 'ia32',
+    'x64c': 'ia32',
+    'arm64c': 'arm',
+    'simarm64c': 'ia32',
 }
 
 BASE_DIR = os.path.abspath(os.path.join(os.curdir, '..'))