diff --git a/DEPS b/DEPS
index be29f0a..e5a3aa1 100644
--- a/DEPS
+++ b/DEPS
@@ -82,7 +82,7 @@
   "clock_rev" : "a494269254ba978e7ef8f192c5f7fec3fc05b9d3",
   "collection_rev": "e4bb038ce2d8e66fb15818aa40685c68d53692ab",
   "convert_rev": "dd3bd28f63be7cb8ab961f38bc73229e4473b555",
-  "crypto_rev": "f7c48b334b1386bc5ab0f706fbcd6df8496a87fc",
+  "crypto_rev": "a5ec902dda5a635a35c6b363ec64458cf84c5872",
   "csslib_rev": "6f77b3dcee957d3e2d5083f666221a220e9ed1f1",
   "dart2js_info_rev" : "e0acfeb5affdf94c53067e68bd836adf589628fd",
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
index 7610ce4..9752d91 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
@@ -2566,12 +2566,8 @@
   /// The type of the expression on the LHS of `==` or `!=`.
   final Type _leftOperandType;
 
-  /// If the LHS of `==` or `!=` is a variable reference, the variable.
-  /// Otherwise `null`.
-  final Variable _leftOperandVariable;
-
-  _EqualityOpContext(ExpressionInfo<Variable, Type> conditionInfo,
-      this._leftOperandType, this._leftOperandVariable)
+  _EqualityOpContext(
+      ExpressionInfo<Variable, Type> conditionInfo, this._leftOperandType)
       : super(conditionInfo);
 
   @override
@@ -2606,14 +2602,6 @@
   /// corresponding to it.  Otherwise `null`.
   ExpressionInfo<Variable, Type> _expressionInfo;
 
-  /// The most recently visited expression which was a variable reference, or
-  /// `null` if no expression has been visited that was a variable reference.
-  Expression _expressionWithVariable;
-
-  /// If [_expressionVariable] is not `null`, the variable corresponding to it.
-  /// Otherwise `null`.
-  Variable _expressionVariable;
-
   int _functionNestingLevel = 0;
 
   final AssignedVariables<Node, Variable> _assignedVariables;
@@ -2627,8 +2615,14 @@
 
   @override
   void asExpression_end(Expression subExpression, Type type) {
-    Variable variable = _getExpressionVariable(subExpression);
-    if (variable == null) return;
+    ExpressionInfo<Variable, Type> subExpressionInfo =
+        _getExpressionInfo(subExpression);
+    Variable variable;
+    if (subExpressionInfo is _VariableReadInfo<Variable, Type>) {
+      variable = subExpressionInfo._variable;
+    } else {
+      return;
+    }
     _current = _current.tryPromoteForTypeCast(typeOperations, variable, type);
   }
 
@@ -2736,10 +2730,8 @@
     _EqualityOpContext<Variable, Type> context =
         _stack.removeLast() as _EqualityOpContext<Variable, Type>;
     ExpressionInfo<Variable, Type> lhsInfo = context._conditionInfo;
-    Variable lhsVariable = context._leftOperandVariable;
     Type leftOperandType = context._leftOperandType;
     ExpressionInfo<Variable, Type> rhsInfo = _getExpressionInfo(rightOperand);
-    Variable rhsVariable = _getExpressionVariable(rightOperand);
     TypeClassification leftOperandTypeClassification =
         typeOperations.classifyType(leftOperandType);
     TypeClassification rightOperandTypeClassification =
@@ -2757,16 +2749,18 @@
       // but weak mode it might produce an "equal" result.  We don't want flow
       // analysis behavior to depend on mode, so we conservatively assume that
       // either result is possible.
-    } else if (lhsInfo is _NullInfo<Variable, Type> && rhsVariable != null) {
+    } else if (lhsInfo is _NullInfo<Variable, Type> &&
+        rhsInfo is _VariableReadInfo<Variable, Type>) {
       assert(
           leftOperandTypeClassification == TypeClassification.nullOrEquivalent);
       ExpressionInfo<Variable, Type> equalityInfo =
-          _current.tryMarkNonNullable(typeOperations, rhsVariable);
+          _current.tryMarkNonNullable(typeOperations, rhsInfo._variable);
       _storeExpressionInfo(wholeExpression,
           notEqual ? equalityInfo : ExpressionInfo.invert(equalityInfo));
-    } else if (rhsInfo is _NullInfo<Variable, Type> && lhsVariable != null) {
+    } else if (rhsInfo is _NullInfo<Variable, Type> &&
+        lhsInfo is _VariableReadInfo<Variable, Type>) {
       ExpressionInfo<Variable, Type> equalityInfo =
-          _current.tryMarkNonNullable(typeOperations, lhsVariable);
+          _current.tryMarkNonNullable(typeOperations, lhsInfo._variable);
       _storeExpressionInfo(wholeExpression,
           notEqual ? equalityInfo : ExpressionInfo.invert(equalityInfo));
     }
@@ -2775,9 +2769,7 @@
   @override
   void equalityOp_rightBegin(Expression leftOperand, Type leftOperandType) {
     _stack.add(new _EqualityOpContext<Variable, Type>(
-        _getExpressionInfo(leftOperand),
-        leftOperandType,
-        _getExpressionVariable(leftOperand)));
+        _getExpressionInfo(leftOperand), leftOperandType));
   }
 
   @override
@@ -2852,9 +2844,6 @@
     if (identical(_expressionWithInfo, oldExpression)) {
       _expressionWithInfo = newExpression;
     }
-    if (identical(_expressionWithVariable, oldExpression)) {
-      _expressionWithVariable = newExpression;
-    }
   }
 
   @override
@@ -2912,12 +2901,12 @@
   @override
   void ifNullExpression_rightBegin(
       Expression leftHandSide, Type leftHandSideType) {
-    Variable lhsVariable = _getExpressionVariable(leftHandSide);
+    ExpressionInfo<Variable, Type> lhsInfo = _getExpressionInfo(leftHandSide);
     FlowModel<Variable, Type> promoted;
     _current = _current.split();
-    if (lhsVariable != null) {
+    if (lhsInfo is _VariableReadInfo<Variable, Type>) {
       ExpressionInfo<Variable, Type> promotionInfo =
-          _current.tryMarkNonNullable(typeOperations, lhsVariable);
+          _current.tryMarkNonNullable(typeOperations, lhsInfo._variable);
       _current = promotionInfo.ifFalse;
       promoted = promotionInfo.ifTrue;
     } else {
@@ -2970,10 +2959,12 @@
   @override
   void isExpression_end(Expression isExpression, Expression subExpression,
       bool isNot, Type type) {
-    Variable subExpressionVariable = _getExpressionVariable(subExpression);
-    if (subExpressionVariable != null) {
-      ExpressionInfo<Variable, Type> expressionInfo = _current
-          .tryPromoteForTypeCheck(typeOperations, subExpressionVariable, type);
+    ExpressionInfo<Variable, Type> subExpressionInfo =
+        _getExpressionInfo(subExpression);
+    if (subExpressionInfo is _VariableReadInfo<Variable, Type>) {
+      ExpressionInfo<Variable, Type> expressionInfo =
+          _current.tryPromoteForTypeCheck(
+              typeOperations, subExpressionInfo._variable, type);
       _storeExpressionInfo(isExpression,
           isNot ? ExpressionInfo.invert(expressionInfo) : expressionInfo);
     }
@@ -3063,10 +3054,11 @@
 
   @override
   void nonNullAssert_end(Expression operand) {
-    Variable operandVariable = _getExpressionVariable(operand);
-    if (operandVariable != null) {
-      _current =
-          _current.tryMarkNonNullable(typeOperations, operandVariable).ifTrue;
+    ExpressionInfo<Variable, Type> operandInfo = _getExpressionInfo(operand);
+    if (operandInfo is _VariableReadInfo<Variable, Type>) {
+      _current = _current
+          .tryMarkNonNullable(typeOperations, operandInfo._variable)
+          .ifTrue;
     }
   }
 
@@ -3083,10 +3075,11 @@
     _current = _current.split();
     _stack.add(new _NullAwareAccessContext<Variable, Type>(_current));
     if (target != null) {
-      Variable targetVariable = _getExpressionVariable(target);
-      if (targetVariable != null) {
-        _current =
-            _current.tryMarkNonNullable(typeOperations, targetVariable).ifTrue;
+      ExpressionInfo<Variable, Type> targetInfo = _getExpressionInfo(target);
+      if (targetInfo is _VariableReadInfo<Variable, Type>) {
+        _current = _current
+            .tryMarkNonNullable(typeOperations, targetInfo._variable)
+            .ifTrue;
       }
     }
   }
@@ -3233,7 +3226,7 @@
 
   @override
   Type variableRead(Expression expression, Variable variable) {
-    _storeExpressionVariable(expression, variable);
+    _storeExpressionInfo(expression, new _VariableReadInfo(_current, variable));
     return _current.infoFor(variable).promotedTypes?.last;
   }
 
@@ -3280,8 +3273,6 @@
     print('  current: $_current');
     print('  expressionWithInfo: $_expressionWithInfo');
     print('  expressionInfo: $_expressionInfo');
-    print('  expressionWithVariable: $_expressionWithVariable');
-    print('  expressionVariable: $_expressionVariable');
     print('  stack:');
     for (_FlowContext stackEntry in _stack.reversed) {
       print('    $stackEntry');
@@ -3310,19 +3301,6 @@
     }
   }
 
-  /// Gets the [Variable] associated with the [expression] (which should be the
-  /// last expression that was traversed).  If there is no [Variable] associated
-  /// with the [expression], then `null` is returned.
-  Variable _getExpressionVariable(Expression expression) {
-    if (identical(expression, _expressionWithVariable)) {
-      Variable expressionVariable = _expressionVariable;
-      _expressionVariable = null;
-      return expressionVariable;
-    } else {
-      return null;
-    }
-  }
-
   FlowModel<Variable, Type> _join(
           FlowModel<Variable, Type> first, FlowModel<Variable, Type> second) =>
       FlowModel.join(typeOperations, first, second, _current._emptyVariableMap);
@@ -3341,14 +3319,6 @@
     _expressionInfo = expressionInfo;
     _current = expressionInfo.after;
   }
-
-  /// Associates [expression], which should be the most recently visited
-  /// expression, with the given [Variable] object.
-  void _storeExpressionVariable(
-      Expression expression, Variable expressionVariable) {
-    _expressionWithVariable = expression;
-    _expressionVariable = expressionVariable;
-  }
 }
 
 /// Base class for objects representing constructs in the Dart programming
@@ -3467,6 +3437,28 @@
       'afterBodyAndCatches: $_afterBodyAndCatches)';
 }
 
+/// [ExpressionInfo] representing an expression that reads the value of a
+/// variable.
+class _VariableReadInfo<Variable, Type>
+    implements ExpressionInfo<Variable, Type> {
+  @override
+  final FlowModel<Variable, Type> after;
+
+  /// The variable that is being read.
+  final Variable _variable;
+
+  _VariableReadInfo(this.after, this._variable);
+
+  @override
+  FlowModel<Variable, Type> get ifFalse => after;
+
+  @override
+  FlowModel<Variable, Type> get ifTrue => after;
+
+  @override
+  String toString() => '_VariableReadInfo(after: $after, variable: $_variable)';
+}
+
 /// [_FlowContext] representing a `while` loop (or a C-style `for` loop, which
 /// is functionally similar).
 class _WhileContext<Variable, Type>
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
index c0b5988..ba9c66d 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -367,6 +367,8 @@
                     // https://github.com/microsoft/vscode-languageserver-node/issues/673
                     includeCommitCharacters:
                         server.clientConfiguration.previewCommitCharacters,
+                    completeFunctionCalls:
+                        server.clientConfiguration.completeFunctionCalls,
                   ));
           results.addAll(setResults);
         });
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion_resolve.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion_resolve.dart
index 4ea03d1..3157a79 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion_resolve.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion_resolve.dart
@@ -72,8 +72,11 @@
       );
     }
 
+    // If filterText is different to the label, it's because label has parens/args
+    // appended and we should take the basic label. We cannot use insertText as
+    // it may include snippets, whereas filterText is always just the pure string.
+    var requestedName = item.filterText ?? item.label;
     // The label might be `MyEnum.myValue`, but we import only `MyEnum`.
-    var requestedName = item.insertText ?? item.label;
     if (requestedName.contains('.')) {
       requestedName = requestedName.substring(
         0,
@@ -173,8 +176,6 @@
           insertText: newInsertText,
           insertTextFormat: item.insertTextFormat,
           textEdit: TextEdit(
-            // TODO(dantup): If `clientSupportsSnippets == true` then we should map
-            // `selection` in to a snippet (see how Dart Code does this).
             range: toRange(lineInfo, data.rOffset, data.rLength),
             newText: newInsertText,
           ),
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 145b8bf..6f0cd7b 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -34,6 +34,7 @@
 import 'package:analyzer/src/services/available_declarations.dart';
 import 'package:analyzer/src/services/available_declarations.dart' as dec;
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
+import 'package:analyzer_plugin/utilities/pair.dart';
 import 'package:meta/meta.dart';
 
 const diagnosticTagsForErrorCode = <server.ErrorCode, List<lsp.DiagnosticTag>>{
@@ -223,43 +224,67 @@
   int replacementOffset,
   int replacementLength, {
   @required bool includeCommitCharacters,
+  @required bool completeFunctionCalls,
 }) {
-  // Build display labels and text to insert. insertText and filterText may
-  // differ from label (for ex. if the label includes things like (…)). If
-  // either are missing then label will be used by the client.
-  String label;
-  String insertText;
-  String filterText;
+  final supportsSnippets =
+      completionCapabilities?.completionItem?.snippetSupport == true;
+
+  String completion;
   switch (declaration.kind) {
     case DeclarationKind.ENUM_CONSTANT:
-      label = '${declaration.parent.name}.${declaration.name}';
+      completion = '${declaration.parent.name}.${declaration.name}';
       break;
     case DeclarationKind.GETTER:
     case DeclarationKind.FIELD:
-      label = declaration.parent != null &&
+      completion = declaration.parent != null &&
               declaration.parent.name != null &&
               declaration.parent.name.isNotEmpty
           ? '${declaration.parent.name}.${declaration.name}'
           : declaration.name;
       break;
     case DeclarationKind.CONSTRUCTOR:
-      label = declaration.parent.name;
+      completion = declaration.parent.name;
       if (declaration.name.isNotEmpty) {
-        label += '.${declaration.name}';
+        completion += '.${declaration.name}';
       }
-      insertText = label;
-      filterText = label;
-      label += declaration.parameterNames?.isNotEmpty ?? false ? '(…)' : '()';
-      break;
-    case DeclarationKind.FUNCTION:
-      label = declaration.name;
-      insertText = label;
-      filterText = label;
-      label += declaration.parameterNames?.isNotEmpty ?? false ? '(…)' : '()';
       break;
     default:
-      label = declaration.name;
+      completion = declaration.name;
+      break;
   }
+  // By default, label is the same as the completion text, but may be added to
+  // later (parens/snippets).
+  var label = completion;
+
+  // isCallable is used to suffix the label with parens so it's clear the item
+  // is callable.
+  final declarationKind = declaration.kind;
+  final isCallable = declarationKind == DeclarationKind.CONSTRUCTOR ||
+      declarationKind == DeclarationKind.FUNCTION ||
+      declarationKind == DeclarationKind.METHOD;
+
+  if (isCallable) {
+    label += declaration.parameterNames?.isNotEmpty ?? false ? '(…)' : '()';
+  }
+
+  final insertTextInfo = _buildInsertText(
+    supportsSnippets: supportsSnippets,
+    includeCommitCharacters: includeCommitCharacters,
+    completeFunctionCalls: completeFunctionCalls,
+    isCallable: isCallable,
+    // For SuggestionSets, we don't have a CompletionKind to check if it's
+    // an invocation, but since they do not show in show/hide combinators
+    // we can assume if an item is callable it's probably being used in a context
+    // that can invoke it.
+    isInvocation: isCallable,
+    defaultArgumentListString: declaration.defaultArgumentListString,
+    defaultArgumentListTextRanges: declaration.defaultArgumentListTextRanges,
+    completion: completion,
+    selectionOffset: 0,
+    selectionLength: 0,
+  );
+  final insertText = insertTextInfo.first;
+  final insertTextFormat = insertTextInfo.last;
 
   final supportsDeprecatedFlag =
       completionCapabilities?.completionItem?.deprecatedSupport == true;
@@ -302,12 +327,15 @@
     //  10 -> 999990
     //   1 -> 999999
     sortText: (1000000 - itemRelevance).toString(),
-    filterText: filterText != label
-        ? filterText
+    filterText: completion != label
+        ? completion
         : null, // filterText uses label if not set
     insertText: insertText != label
         ? insertText
         : null, // insertText uses label if not set
+    insertTextFormat: insertTextFormat != lsp.InsertTextFormat.PlainText
+        ? insertTextFormat
+        : null, // Defaults to PlainText if not supplied
     // data, used for completionItem/resolve.
     data: lsp.DartCompletionItemResolutionInfo(
         file: file,
@@ -797,8 +825,6 @@
   // differ from label (for ex. if the label includes things like (…)). If
   // either are missing then label will be used by the client.
   var label = suggestion.displayText ?? suggestion.completion;
-  var insertText = suggestion.completion;
-  var filterText = suggestion.completion;
 
   // Trim any trailing comma from the (displayed) label.
   if (label.endsWith(',')) {
@@ -841,37 +867,20 @@
       : suggestionKindToCompletionItemKind(
           supportedCompletionItemKinds, suggestion.kind, label);
 
-  var insertTextFormat = lsp.InsertTextFormat.PlainText;
-
-  // If the client supports snippets, we can support completeFunctionCalls or
-  // setting a selection.
-  if (supportsSnippets) {
-    // completeFunctionCalls should only work if commit characters are disabled
-    // otherwise the editor may insert parens that we're also inserting.
-    if (!includeCommitCharacters &&
-        completeFunctionCalls &&
-        isCallable &&
-        isInvocation) {
-      insertTextFormat = lsp.InsertTextFormat.Snippet;
-      final hasRequiredParameters =
-          (suggestion.defaultArgumentListTextRanges?.length ?? 0) > 0;
-      final functionCallSuffix = hasRequiredParameters
-          ? buildSnippetStringWithTabStops(
-              suggestion.defaultArgumentListString,
-              suggestion.defaultArgumentListTextRanges,
-            )
-          : '\${0:}'; // No required params still gets a tabstop in the parens.
-      insertText += '($functionCallSuffix)';
-    } else if (suggestion.selectionOffset != 0 &&
-        // We don't need a tabstop if the selection is the end of the string.
-        suggestion.selectionOffset != suggestion.completion.length) {
-      insertTextFormat = lsp.InsertTextFormat.Snippet;
-      insertText = buildSnippetStringWithTabStops(
-        suggestion.completion,
-        [suggestion.selectionOffset, suggestion.selectionLength],
-      );
-    }
-  }
+  final insertTextInfo = _buildInsertText(
+    supportsSnippets: supportsSnippets,
+    includeCommitCharacters: includeCommitCharacters,
+    completeFunctionCalls: completeFunctionCalls,
+    isCallable: isCallable,
+    isInvocation: isInvocation,
+    defaultArgumentListString: suggestion.defaultArgumentListString,
+    defaultArgumentListTextRanges: suggestion.defaultArgumentListTextRanges,
+    completion: suggestion.completion,
+    selectionOffset: suggestion.selectionOffset,
+    selectionLength: suggestion.selectionLength,
+  );
+  final insertText = insertTextInfo.first;
+  final insertTextFormat = insertTextInfo.last;
 
   // Because we potentially send thousands of these items, we should minimise
   // the generated JSON as much as possible - for example using nulls in place
@@ -899,8 +908,8 @@
     //  10 -> 999990
     //   1 -> 999999
     sortText: (1000000 - suggestion.relevance).toString(),
-    filterText: filterText != label
-        ? filterText
+    filterText: suggestion.completion != label
+        ? suggestion.completion
         : null, // filterText uses label if not set
     insertText: insertText != label
         ? insertText
@@ -1269,3 +1278,51 @@
 
   return lsp.MarkupContent(kind: format, value: content);
 }
+
+Pair<String, lsp.InsertTextFormat> _buildInsertText({
+  @required bool supportsSnippets,
+  @required bool includeCommitCharacters,
+  @required bool completeFunctionCalls,
+  @required bool isCallable,
+  @required bool isInvocation,
+  @required String defaultArgumentListString,
+  @required List<int> defaultArgumentListTextRanges,
+  @required String completion,
+  @required int selectionOffset,
+  @required int selectionLength,
+}) {
+  var insertText = completion;
+  var insertTextFormat = lsp.InsertTextFormat.PlainText;
+
+  // If the client supports snippets, we can support completeFunctionCalls or
+  // setting a selection.
+  if (supportsSnippets) {
+    // completeFunctionCalls should only work if commit characters are disabled
+    // otherwise the editor may insert parens that we're also inserting.
+    if (!includeCommitCharacters &&
+        completeFunctionCalls &&
+        isCallable &&
+        isInvocation) {
+      insertTextFormat = lsp.InsertTextFormat.Snippet;
+      final hasRequiredParameters =
+          (defaultArgumentListTextRanges?.length ?? 0) > 0;
+      final functionCallSuffix = hasRequiredParameters
+          ? buildSnippetStringWithTabStops(
+              defaultArgumentListString,
+              defaultArgumentListTextRanges,
+            )
+          : '\${0:}'; // No required params still gets a tabstop in the parens.
+      insertText += '($functionCallSuffix)';
+    } else if (selectionOffset != 0 &&
+        // We don't need a tabstop if the selection is the end of the string.
+        selectionOffset != completion.length) {
+      insertTextFormat = lsp.InsertTextFormat.Snippet;
+      insertText = buildSnippetStringWithTabStops(
+        completion,
+        [selectionOffset, selectionLength],
+      );
+    }
+  }
+
+  return Pair(insertText, insertTextFormat);
+}
diff --git a/pkg/analysis_server/test/lsp/completion_dart_test.dart b/pkg/analysis_server/test/lsp/completion_dart_test.dart
index 304bbbb..f71db6c 100644
--- a/pkg/analysis_server/test/lsp/completion_dart_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_dart_test.dart
@@ -177,6 +177,43 @@
     expect(item.textEdit.newText, equals(item.insertText));
   }
 
+  Future<void> test_completeFunctionCalls_suggestionSets() async {
+    final content = '''
+    main() {
+      [[pri]]^
+    }
+    ''';
+
+    final initialAnalysis = waitForAnalysisComplete();
+    await provideConfig(
+      () => initialize(
+        textDocumentCapabilities: withCompletionItemSnippetSupport(
+            emptyTextDocumentClientCapabilities),
+        workspaceCapabilities: withConfigurationSupport(
+            withApplyEditSupport(emptyWorkspaceClientCapabilities)),
+      ),
+      {'completeFunctionCalls': true},
+    );
+    await openFile(mainFileUri, withoutMarkers(content));
+    await initialAnalysis;
+    final res = await getCompletion(mainFileUri, positionFromMarker(content));
+    final item = res.singleWhere((c) => c.label == 'print(…)');
+    // Ensure the snippet comes through in the expected format with the expected
+    // placeholders.
+    expect(item.insertTextFormat, equals(InsertTextFormat.Snippet));
+    expect(item.insertText, equals(r'print(${0:object})'));
+    expect(item.textEdit, isNull);
+
+    // Ensure the item can be resolved and gets a proper TextEdit.
+    final resolved = await resolveCompletion(item);
+    expect(resolved.textEdit, isNotNull);
+    expect(resolved.textEdit.newText, equals(item.insertText));
+    expect(
+      resolved.textEdit.range,
+      equals(rangeFromMarkers(content)),
+    );
+  }
+
   Future<void> test_completionKinds_default() async {
     newFile(join(projectFolderPath, 'file.dart'));
     newFolder(join(projectFolderPath, 'folder'));
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.dart
index 173a9e6..560bd68 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.dart
@@ -44,11 +44,11 @@
   static final Version testingSdkLanguageVersion = Version.parse('2.10.0');
 
   /// The latest known language version.
-  static final Version latestSdkLanguageVersion = Version.parse('2.10.0');
+  static final Version latestSdkLanguageVersion = Version.parse('2.12.0');
 
   static final FeatureSet latestWithNullSafety = ExperimentStatus.fromStrings2(
     sdkLanguageVersion: latestSdkLanguageVersion,
-    flags: [EnableString.non_nullable],
+    flags: [],
   );
 
   /// A map containing information about all known experimental flags.
diff --git a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
index 32b5d0f..771dfe8 100644
--- a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart
@@ -53,6 +53,12 @@
   }
 
   /// Return the [FeatureSet] for the package that contains the file.
+  ///
+  /// Note, that [getLanguageVersion] returns the default language version
+  /// for libraries in the package, but this method does not restrict the
+  /// [FeatureSet] of this version. The reason is that we allow libraries to
+  /// "upgrade" to higher version than the default package language version,
+  /// and want this to preserve experimental features.
   FeatureSet getFeatureSet(String path, Uri uri) {
     if (uri.isScheme('dart')) {
       var pathSegments = uri.pathSegments;
diff --git a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
index 4c87ce8..4e733f9 100644
--- a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
@@ -964,6 +964,7 @@
   @override
   void visitVariableDeclarationList(VariableDeclarationList node) {
     _annotatedNode(node);
+    _token(node.lateKeyword);
     _token(node.keyword);
     node.type?.accept(this);
     _nodeList(node.variables, node.endToken.next);
@@ -1042,6 +1043,7 @@
   void _normalFormalParameter(NormalFormalParameter node) {
     node.documentationComment?.accept(this);
     _nodeList(node.metadata);
+    _token(node.requiredKeyword);
     _token(node.covariantKeyword);
   }
 
diff --git a/pkg/analyzer/test/dart/analysis/utilities_test.dart b/pkg/analyzer/test/dart/analysis/utilities_test.dart
index 0c2dbf0..da03e22 100644
--- a/pkg/analyzer/test/dart/analysis/utilities_test.dart
+++ b/pkg/analyzer/test/dart/analysis/utilities_test.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:path/path.dart' as p;
+import 'package:pub_semver/pub_semver.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -91,7 +92,10 @@
     String content = '''
 int? f() => 1;
 ''';
-    var featureSet = FeatureSet.forTesting(sdkVersion: '2.3.0');
+    var featureSet = FeatureSet.fromEnableFlags2(
+      sdkLanguageVersion: Version.parse('2.9.0'),
+      flags: [],
+    );
     expect(featureSet.isEnabled(Feature.non_nullable), isFalse);
     ParseStringResult result = _withMemoryFile(
         content,
@@ -179,7 +183,10 @@
     String content = '''
 int? f() => 1;
 ''';
-    var featureSet = FeatureSet.forTesting(sdkVersion: '2.3.0');
+    var featureSet = FeatureSet.fromEnableFlags2(
+      sdkLanguageVersion: Version.parse('2.9.0'),
+      flags: [],
+    );
     expect(featureSet.isEnabled(Feature.non_nullable), isFalse);
     ParseStringResult result = parseString(
         content: content, throwIfDiagnostics: false, featureSet: featureSet);
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index d054a17..34b6b84 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -1142,8 +1142,7 @@
     expect(thenExpression, isParenthesizedExpression);
     Expression elseExpression = expression.elseExpression;
     expect(elseExpression, isSimpleIdentifier);
-    assertErrors(
-        errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 9, 1)]);
+    assertNoErrors();
   }
 
   void test_conditionalExpression_precedence_nullableType_as3() {
@@ -1158,8 +1157,7 @@
     expect(thenExpression, isParenthesizedExpression);
     Expression elseExpression = expression.elseExpression;
     expect(elseExpression, isSimpleIdentifier);
-    assertErrors(
-        errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 10, 1)]);
+    assertNoErrors();
   }
 
   void test_conditionalExpression_precedence_nullableType_is2() {
@@ -1173,8 +1171,7 @@
     expect(thenExpression, isParenthesizedExpression);
     Expression elseExpression = expression.elseExpression;
     expect(elseExpression, isSimpleIdentifier);
-    assertErrors(
-        errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 11, 1)]);
+    assertNoErrors();
   }
 
   void test_conditionalExpression_precedence_nullableType_is3() {
@@ -1189,8 +1186,7 @@
     expect(thenExpression, isParenthesizedExpression);
     Expression elseExpression = expression.elseExpression;
     expect(elseExpression, isSimpleIdentifier);
-    assertErrors(
-        errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 12, 1)]);
+    assertNoErrors();
   }
 }
 
@@ -1877,17 +1873,16 @@
     implements AbstractParserTestCase {
   static final List<ErrorCode> NO_ERROR_COMPARISON = <ErrorCode>[];
 
-  final controlFlow = FeatureSet.forTesting(
-      sdkVersion: '2.0.0',
-      additionalFeatures: [Feature.control_flow_collections]);
+  final controlFlow = FeatureSet.latestLanguageVersion();
 
-  final spread = FeatureSet.forTesting(
-      sdkVersion: '2.0.0', additionalFeatures: [Feature.spread_collections]);
+  final spread = FeatureSet.latestLanguageVersion();
 
-  final nonNullable = FeatureSet.forTesting(
-      sdkVersion: '2.2.2', additionalFeatures: [Feature.non_nullable]);
+  final nonNullable = FeatureSet.latestLanguageVersion();
 
-  final preNonNullable = FeatureSet.forTesting(sdkVersion: '2.2.2');
+  final preNonNullable = FeatureSet.fromEnableFlags2(
+    sdkLanguageVersion: Version.parse('2.9.0'),
+    flags: [],
+  );
 
   ParserProxy _parserProxy;
 
@@ -2169,7 +2164,8 @@
 
   @override
   FormalParameter parseFormalParameter(String code, ParameterKind kind,
-      {List<ErrorCode> errorCodes = const <ErrorCode>[]}) {
+      {List<ErrorCode> errorCodes = const <ErrorCode>[],
+      FeatureSet featureSet}) {
     String parametersCode;
     if (kind == ParameterKind.REQUIRED) {
       parametersCode = '($code)';
@@ -2181,7 +2177,7 @@
       fail('$kind');
     }
     FormalParameterList list = parseFormalParameterList(parametersCode,
-        inFunctionType: false, errorCodes: errorCodes);
+        inFunctionType: false, errorCodes: errorCodes, featureSet: featureSet);
     return list.parameters.single;
   }
 
@@ -2189,8 +2185,9 @@
   FormalParameterList parseFormalParameterList(String code,
       {bool inFunctionType = false,
       List<ErrorCode> errorCodes = const <ErrorCode>[],
-      List<ExpectedError> errors}) {
-    createParser(code);
+      List<ExpectedError> errors,
+      FeatureSet featureSet}) {
+    createParser(code, featureSet: featureSet);
     FormalParameterList result =
         _parserProxy.parseFormalParameterList(inFunctionType: inFunctionType);
     assertErrors(codes: errors != null ? null : errorCodes, errors: errors);
@@ -2456,6 +2453,7 @@
   void test_functionTyped_named_nullable_disabled() {
     ParameterKind kind = ParameterKind.NAMED;
     var defaultParameter = parseFormalParameter('a()? : null', kind,
+            featureSet: preNonNullable,
             errorCodes: [ParserErrorCode.EXPERIMENT_NOT_ENABLED])
         as DefaultFormalParameter;
     var functionParameter =
@@ -2474,6 +2472,7 @@
   void test_functionTyped_positional_nullable_disabled() {
     ParameterKind kind = ParameterKind.POSITIONAL;
     var defaultParameter = parseFormalParameter('a()? = null', kind,
+            featureSet: preNonNullable,
             errorCodes: [ParserErrorCode.EXPERIMENT_NOT_ENABLED])
         as DefaultFormalParameter;
     var functionParameter =
@@ -2492,6 +2491,7 @@
   void test_functionTyped_required_nullable_disabled() {
     ParameterKind kind = ParameterKind.REQUIRED;
     var functionParameter = parseFormalParameter('a()?', kind,
+            featureSet: preNonNullable,
             errorCodes: [ParserErrorCode.EXPERIMENT_NOT_ENABLED])
         as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNull);
@@ -2676,7 +2676,9 @@
           List<ExpectedError> errors,
           FeatureSet featureSet}) =>
       super.parseCompilationUnit(content,
-          codes: codes, errors: errors, featureSet: featureSet ?? nonNullable);
+          codes: codes,
+          errors: errors,
+          featureSet: featureSet ?? FeatureSet.latestLanguageVersion());
 
   void test_assignment_complex() {
     parseCompilationUnit('D? foo(X? x) { X? x1; X? x2 = x + bar(7); }');
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 3f1b6d7..340cb84 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -2354,8 +2354,7 @@
     createParser('abstract C f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.ABSTRACT_CLASS_MEMBER, 0, 8)]);
+    assertNoErrors();
   }
 
   void test_abstractClassMember_getter() {
@@ -3342,10 +3341,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     if (usingFastaParser) {
-      listener.assertErrors([
-        expectedError(ParserErrorCode.EXTERNAL_FIELD, 0, 8),
-        expectedError(CompileTimeErrorCode.CONST_NOT_INITIALIZED, 17, 1)
-      ]);
+      listener.assertErrors(
+          [expectedError(CompileTimeErrorCode.CONST_NOT_INITIALIZED, 17, 1)]);
     } else {
       listener.assertErrorsWithCodes([ParserErrorCode.EXTERNAL_FIELD]);
     }
@@ -3355,32 +3352,28 @@
     createParser('external final A f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener
-        .assertErrors([expectedError(ParserErrorCode.EXTERNAL_FIELD, 0, 8)]);
+    assertNoErrors();
   }
 
   void test_externalField_static() {
     createParser('external static A f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener
-        .assertErrors([expectedError(ParserErrorCode.EXTERNAL_FIELD, 0, 8)]);
+    assertNoErrors();
   }
 
   void test_externalField_typed() {
     createParser('external A f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener
-        .assertErrors([expectedError(ParserErrorCode.EXTERNAL_FIELD, 0, 8)]);
+    assertNoErrors();
   }
 
   void test_externalField_untyped() {
     createParser('external var f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener
-        .assertErrors([expectedError(ParserErrorCode.EXTERNAL_FIELD, 0, 8)]);
+    assertNoErrors();
   }
 
   void test_externalGetterWithBody() {
diff --git a/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart b/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
index 37172b1..441fe5b 100644
--- a/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
@@ -38,68 +38,36 @@
     _createSourceFactory();
   }
 
-  test_packages_allowedExperiments() {
-    var packages = Packages(
-      {
-        'aaa': Package(
-          name: 'aaa',
-          rootFolder: newFolder('/packages/aaa'),
-          libFolder: newFolder('/packages/aaa/lib'),
-          languageVersion: Version(2, 7, 0),
-        ),
-        'bbb': Package(
-          name: 'bbb',
-          rootFolder: newFolder('/packages/bbb'),
-          libFolder: newFolder('/packages/bbb/lib'),
-          languageVersion: Version(2, 7, 0),
-        ),
-      },
-    );
-
-    _createSourceFactory(
-      packageUriResolver: _createPackageMapUriResolver(packages),
+  test_getFeatureSet_allowedExperiments() {
+    var feature_a = ExperimentalFeature(
+      index: 0,
+      enableString: 'a',
+      isEnabledByDefault: false,
+      isExpired: false,
+      documentation: 'a',
+      experimentalReleaseVersion: null,
+      releaseVersion: null,
     );
 
     _newSdkExperimentsFile(r'''
 {
   "version": 1,
   "experimentSets": {
-    "nullSafety": ["non-nullable"]
+    "with_a": ["a"]
   },
   "sdk": {
     "default": {
-      "experimentSet": "nullSafety"
+      "experimentSet": "with_a"
     }
   },
   "packages": {
     "aaa": {
-      "experimentSet": "nullSafety"
+      "experimentSet": "with_a"
     }
   }
 }
 ''');
 
-    provider = FeatureSetProvider.build(
-      sourceFactory: sourceFactory,
-      resourceProvider: resourceProvider,
-      packages: packages,
-      packageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
-      nonPackageDefaultLanguageVersion: ExperimentStatus.currentVersion,
-      nonPackageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
-    );
-
-    _assertNonNullableForPath('/packages/aaa/lib/a.dart', true);
-    _assertNonNullableForPath('/packages/aaa/bin/b.dart', true);
-    _assertNonNullableForPath('/packages/aaa/test/c.dart', true);
-
-    _assertNonNullableForPath('/packages/bbb/lib/a.dart', false);
-    _assertNonNullableForPath('/packages/bbb/bin/b.dart', false);
-    _assertNonNullableForPath('/packages/bbb/test/c.dart', false);
-
-    _assertNonNullableForPath('/other/file.dart', false);
-  }
-
-  test_packages_contextExperiments_empty() {
     var packages = Packages(
       {
         'aaa': Package(
@@ -112,13 +80,7 @@
           name: 'bbb',
           rootFolder: newFolder('/packages/bbb'),
           libFolder: newFolder('/packages/bbb/lib'),
-          languageVersion: Version(2, 7, 0),
-        ),
-        'ccc': Package(
-          name: 'ccc',
-          rootFolder: newFolder('/packages/ccc'),
-          libFolder: newFolder('/packages/ccc/lib'),
-          languageVersion: Version(2, 8, 0),
+          languageVersion: null,
         ),
       },
     );
@@ -127,28 +89,145 @@
       packageUriResolver: _createPackageMapUriResolver(packages),
     );
 
-    provider = FeatureSetProvider.build(
-      sourceFactory: sourceFactory,
-      resourceProvider: resourceProvider,
-      packages: packages,
-      packageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
-      nonPackageDefaultLanguageVersion: ExperimentStatus.currentVersion,
-      nonPackageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
+    overrideKnownFeatures({'a': feature_a}, () {
+      provider = FeatureSetProvider.build(
+        sourceFactory: sourceFactory,
+        resourceProvider: resourceProvider,
+        packages: packages,
+        packageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
+        nonPackageDefaultLanguageVersion: ExperimentStatus.currentVersion,
+        nonPackageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
+      );
+
+      void assertHasFeature(String path, bool expected) {
+        _assertHasFeatureForPath(path, feature_a, expected);
+      }
+
+      assertHasFeature('/packages/aaa/lib/a.dart', true);
+      assertHasFeature('/packages/aaa/bin/b.dart', true);
+      assertHasFeature('/packages/aaa/test/c.dart', true);
+
+      assertHasFeature('/packages/bbb/lib/a.dart', false);
+      assertHasFeature('/packages/bbb/bin/b.dart', false);
+      assertHasFeature('/packages/bbb/test/c.dart', false);
+
+      assertHasFeature('/other/file.dart', false);
+    });
+  }
+
+  test_getFeatureSet_defaultForContext_hasExperiment() {
+    var feature_a = ExperimentalFeature(
+      index: 0,
+      enableString: 'a',
+      isEnabledByDefault: false,
+      isExpired: false,
+      documentation: 'a',
+      experimentalReleaseVersion: Version.parse('2.12.0'),
+      releaseVersion: null,
     );
 
-    _assertNonNullableForPath('/packages/aaa/a.dart', false);
-    _assertNonNullableForPath('/packages/aaa/lib/b.dart', false);
-    _assertNonNullableForPath('/packages/aaa/test/c.dart', false);
+    var packages = Packages(
+      {
+        'aaa': Package(
+          name: 'aaa',
+          rootFolder: newFolder('/packages/aaa'),
+          libFolder: newFolder('/packages/aaa/lib'),
+          languageVersion: null,
+        ),
+        'bbb': Package(
+          name: 'bbb',
+          rootFolder: newFolder('/packages/bbb'),
+          libFolder: newFolder('/packages/bbb/lib'),
+          languageVersion: Version(2, 12, 0),
+        ),
+      },
+    );
 
-    _assertNonNullableForPath('/packages/bbb/a.dart', false);
-    _assertNonNullableForPath('/packages/bbb/lib/b.dart', false);
-    _assertNonNullableForPath('/packages/bbb/test/c.dart', false);
+    _createSourceFactory(
+      packageUriResolver: _createPackageMapUriResolver(packages),
+    );
 
-    _assertNonNullableForPath('/packages/ccc/a.dart', false);
-    _assertNonNullableForPath('/packages/ccc/lib/b.dart', false);
-    _assertNonNullableForPath('/packages/ccc/test/c.dart', false);
+    overrideKnownFeatures({'a': feature_a}, () {
+      provider = FeatureSetProvider.build(
+        sourceFactory: sourceFactory,
+        resourceProvider: resourceProvider,
+        packages: packages,
+        packageDefaultFeatureSet: FeatureSet.fromEnableFlags2(
+          sdkLanguageVersion: Version.parse('2.12.0'),
+          flags: [feature_a.enableString],
+        ),
+        nonPackageDefaultLanguageVersion: ExperimentStatus.currentVersion,
+        nonPackageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
+      );
 
-    _assertNonNullableForPath('/other/file.dart', false);
+      void assertHasFeature(String path, bool expected) {
+        _assertHasFeatureForPath(path, feature_a, expected);
+      }
+
+      assertHasFeature('/packages/aaa/a.dart', true);
+      assertHasFeature('/packages/aaa/lib/b.dart', true);
+      assertHasFeature('/packages/aaa/test/c.dart', true);
+
+      assertHasFeature('/packages/bbb/a.dart', true);
+      assertHasFeature('/packages/bbb/lib/b.dart', true);
+      assertHasFeature('/packages/bbb/test/c.dart', true);
+    });
+  }
+
+  test_getFeatureSet_defaultForContext_noExperiments() {
+    var feature_a = ExperimentalFeature(
+      index: 0,
+      enableString: 'a',
+      isEnabledByDefault: false,
+      isExpired: false,
+      documentation: 'a',
+      experimentalReleaseVersion: Version.parse('2.12.0'),
+      releaseVersion: null,
+    );
+
+    var packages = Packages(
+      {
+        'aaa': Package(
+          name: 'aaa',
+          rootFolder: newFolder('/packages/aaa'),
+          libFolder: newFolder('/packages/aaa/lib'),
+          languageVersion: null,
+        ),
+        'bbb': Package(
+          name: 'bbb',
+          rootFolder: newFolder('/packages/bbb'),
+          libFolder: newFolder('/packages/bbb/lib'),
+          languageVersion: Version(2, 12, 0),
+        ),
+      },
+    );
+
+    _createSourceFactory(
+      packageUriResolver: _createPackageMapUriResolver(packages),
+    );
+
+    overrideKnownFeatures({'a': feature_a}, () {
+      provider = FeatureSetProvider.build(
+        sourceFactory: sourceFactory,
+        resourceProvider: resourceProvider,
+        packages: packages,
+        packageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
+        nonPackageDefaultLanguageVersion: ExperimentStatus.currentVersion,
+        nonPackageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
+      );
+
+      void assertHasFeature(String path, bool expected) {
+        _assertHasFeatureForPath(path, feature_a, expected);
+      }
+
+      assertHasFeature('/packages/aaa/a.dart', false);
+      assertHasFeature('/packages/aaa/lib/b.dart', false);
+      assertHasFeature('/packages/aaa/test/c.dart', false);
+
+      assertHasFeature('/packages/bbb/a.dart', false);
+      assertHasFeature('/packages/bbb/lib/b.dart', false);
+      assertHasFeature('/packages/bbb/test/c.dart', false);
+    });
   }
 
   test_packages_contextExperiments_nested() {
@@ -228,38 +307,6 @@
     );
   }
 
-  test_packages_contextExperiments_nonNullable() {
-    var packages = Packages(
-      {
-        'aaa': Package(
-          name: 'aaa',
-          rootFolder: newFolder('/packages/aaa'),
-          libFolder: newFolder('/packages/aaa/lib'),
-          languageVersion: null,
-        ),
-      },
-    );
-
-    _createSourceFactory(
-      packageUriResolver: _createPackageMapUriResolver(packages),
-    );
-
-    provider = FeatureSetProvider.build(
-      sourceFactory: sourceFactory,
-      resourceProvider: resourceProvider,
-      packages: packages,
-      packageDefaultFeatureSet: ExperimentStatus.latestWithNullSafety,
-      nonPackageDefaultLanguageVersion: ExperimentStatus.currentVersion,
-      nonPackageDefaultFeatureSet: FeatureSet.latestLanguageVersion(),
-    );
-
-    _assertNonNullableForPath('/packages/aaa/a.dart', true);
-    _assertNonNullableForPath('/packages/aaa/lib/b.dart', true);
-    _assertNonNullableForPath('/packages/aaa/test/c.dart', true);
-
-    _assertNonNullableForPath('/other/file.dart', false);
-  }
-
   test_sdk_allowedExperiments_default() {
     var feature_a = ExperimentalFeature(
       index: 0,
@@ -366,9 +413,9 @@
     expect(featureSet.isEnabled(Feature.non_nullable), isTrue);
   }
 
-  void _assertNonNullableForPath(String path, bool expected) {
+  _assertHasFeatureForPath(String path, Feature feature, bool expected) {
     var featureSet = _getPathFeatureSet(path);
-    expect(featureSet.isEnabled(Feature.non_nullable), expected);
+    expect(featureSet.isEnabled(feature), expected);
   }
 
   PackageMapUriResolver _createPackageMapUriResolver(Packages packages) {
diff --git a/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart b/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart
index 28cd25a..75d3b88 100644
--- a/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart
+++ b/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/resolver/legacy_type_asserter.dart';
 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
+import 'package:pub_semver/pub_semver.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -140,15 +141,20 @@
 
   CompilationUnit _wrapExpression(Expression e, {bool nonNullable = false}) {
     return AstTestFactory.compilationUnit9(
-        declarations: [
-          AstTestFactory.functionDeclaration(
-              null,
-              null,
-              null,
-              AstTestFactory.functionExpression2(
-                  null, AstTestFactory.expressionFunctionBody(e)))
-        ],
-        featureSet: FeatureSet.forTesting(
-            additionalFeatures: nonNullable ? [Feature.non_nullable] : []));
+      declarations: [
+        AstTestFactory.functionDeclaration(
+            null,
+            null,
+            null,
+            AstTestFactory.functionExpression2(
+                null, AstTestFactory.expressionFunctionBody(e)))
+      ],
+      featureSet: nonNullable
+          ? FeatureSet.latestLanguageVersion()
+          : FeatureSet.fromEnableFlags2(
+              sdkLanguageVersion: Version.parse('2.9.0'),
+              flags: [],
+            ),
+    );
   }
 }
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
index 1950530..aab0156 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
@@ -34,22 +34,14 @@
 class ResynthesizeAst2Test extends AbstractResynthesizeTest
     with ResynthesizeTestCases {
   /// The shared SDK bundle, computed once and shared among test invocations.
-  static _SdkBundle _sdkBundleNullSafe;
-
-  /// The shared SDK bundle, computed once and shared among test invocations.
-  static _SdkBundle _sdkBundleLegacy;
+  static _SdkBundle _sdkBundle;
 
   _SdkBundle get sdkBundle {
-    if (featureSet.isEnabled(Feature.non_nullable)) {
-      if (_sdkBundleNullSafe != null) {
-        return _sdkBundleNullSafe;
-      }
-    } else {
-      if (_sdkBundleLegacy != null) {
-        return _sdkBundleLegacy;
-      }
+    if (_sdkBundle != null) {
+      return _sdkBundle;
     }
 
+    var featureSet = FeatureSet.latestLanguageVersion();
     var inputLibraries = <LinkInputLibrary>[];
     for (var sdkLibrary in sdk.sdkLibraries) {
       var source = sourceFactory.resolveUri(null, sdkLibrary.shortName);
@@ -57,7 +49,7 @@
       var unit = parseText(text, featureSet);
 
       var inputUnits = <LinkInputUnit>[];
-      _addLibraryUnits(source, unit, inputUnits);
+      _addLibraryUnits(source, unit, inputUnits, featureSet);
       inputLibraries.add(
         LinkInputLibrary(source, inputUnits),
       );
@@ -77,17 +69,10 @@
 
     var sdkLinkResult = link(elementFactory, inputLibraries, true);
 
-    if (featureSet.isEnabled(Feature.non_nullable)) {
-      return _sdkBundleNullSafe = _SdkBundle(
-        astBytes: sdkLinkResult.astBytes,
-        resolutionBytes: sdkLinkResult.resolutionBytes,
-      );
-    } else {
-      return _sdkBundleLegacy = _SdkBundle(
-        astBytes: sdkLinkResult.astBytes,
-        resolutionBytes: sdkLinkResult.resolutionBytes,
-      );
-    }
+    return _sdkBundle = _SdkBundle(
+      astBytes: sdkLinkResult.astBytes,
+      resolutionBytes: sdkLinkResult.resolutionBytes,
+    );
   }
 
   @override
@@ -144,6 +129,7 @@
     Source definingSource,
     CompilationUnit definingUnit,
     List<LinkInputUnit> units,
+    FeatureSet featureSet,
   ) {
     units.add(
       LinkInputUnit(null, definingSource, false, definingUnit),
@@ -188,7 +174,7 @@
     var unit = parseText(text, featureSet);
 
     var units = <LinkInputUnit>[];
-    _addLibraryUnits(source, unit, units);
+    _addLibraryUnits(source, unit, units, featureSet);
     libraries.add(
       LinkInputLibrary(source, units),
     );
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index fdfd67e..55d7ab6 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -1243,15 +1243,15 @@
     var commonElements = _elementMap.commonElements;
 
     if (commonElements.isUnnamedListConstructor(constructor)) {
-      // We have `new List.filled(..., null)`.
+      // We have `new List(...)`.
       if (arguments.positional.isEmpty && arguments.named.isEmpty) {
-        // We have `[]`.
+        // We have `new List()`.
         return _inferrer.concreteTypes.putIfAbsent(
             node,
             () => _types.allocateList(_types.growableListType, node,
                 _analyzedMember, _types.nonNullEmpty(), 0));
       } else {
-        // We have `new List.filled(len, null)`.
+        // We have `new List(len)`.
         int length = _findLength(arguments);
         return _inferrer.concreteTypes.putIfAbsent(
             node,
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 2998012..c8084d5 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -994,7 +994,7 @@
   /// For instance `A` in:
   ///
   ///     class A {}
-  ///     main() => <A>[] is List<String>;
+  ///     main() => new List<A>() is List<String>;
   ///
   bool typeArgument = false;
 
@@ -1003,7 +1003,7 @@
   /// For instance `A` in:
   ///
   ///     class A {}
-  ///     main() => <String>[] is List<A>;
+  ///     main() => new List<String>() is List<A>;
   ///
   bool checkedTypeArgument = false;
 
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index e81ca79..7c66c12 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -3816,12 +3816,12 @@
       return;
     }
 
-    // Recognize `[]` and `List.filled(n, null)`.
+    // Recognize `List()` and `List(n)`.
     if (_commonElements.isUnnamedListConstructor(function)) {
       if (invocation.arguments.named.isEmpty) {
         int argumentCount = invocation.arguments.positional.length;
         if (argumentCount == 0) {
-          // `[]` takes no arguments, `JSArray.list()` takes a sentinel.
+          // `List()` takes no arguments, `JSArray.list()` takes a sentinel.
           assert(arguments.length == 0 || arguments.length == 1,
               '\narguments: $arguments\n');
           _handleInvokeLegacyGrowableListFactoryConstructor(
@@ -3936,14 +3936,14 @@
     stack.add(_setListRuntimeTypeInfoIfNeeded(pop(), type, sourceInformation));
   }
 
-  /// Handle the legacy `<T>[]` constructor.
+  /// Handle the legacy `List<T>()` constructor.
   void _handleInvokeLegacyGrowableListFactoryConstructor(
       ir.StaticInvocation invocation,
       ConstructorEntity function,
       AbstractValue typeMask,
       List<HInstruction> arguments,
       SourceInformation sourceInformation) {
-    // `<T>[]` is essentially the same as `<T>[]`.
+    // `List<T>()` is essentially the same as `<T>[]`.
     push(_buildLiteralList(<HInstruction>[]));
     HInstruction allocation = pop();
     var inferredType = globalInferenceResults.typeOfNewList(invocation);
@@ -3956,7 +3956,7 @@
         _setListRuntimeTypeInfoIfNeeded(allocation, type, sourceInformation));
   }
 
-  /// Handle the `JSArray<T>.list(length)` and legacy `List<T>.filled(length, null)`
+  /// Handle the `JSArray<T>.list(length)` and legacy `List<T>(length)`
   /// constructors.
   void _handleInvokeLegacyFixedListFactoryConstructor(
       ir.StaticInvocation invocation,
diff --git a/pkg/dev_compiler/doc/GENERIC_METHOD_COMMENTS.md b/pkg/dev_compiler/doc/GENERIC_METHOD_COMMENTS.md
index 8f23657..9050eab 100644
--- a/pkg/dev_compiler/doc/GENERIC_METHOD_COMMENTS.md
+++ b/pkg/dev_compiler/doc/GENERIC_METHOD_COMMENTS.md
@@ -139,7 +139,7 @@
 
 ```dart
 List/*<T>*/ makeList/*<T extends num>*/() {
-  return <num /*=T*/>[];
+  return new List<num /*=T*/>();
 }
 
 void main() {
@@ -174,7 +174,7 @@
    var l0 = <dynamic /*=S*/>[x];
 
    // as above, but with a regular constructor.
-   var l1 = <dynamic /*=S*/>[];
+   var l1 = new List<dynamic /*=S*/>();
    return l1;
 }
 ```
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index a829957..eddf299 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -435,11 +435,12 @@
                                                  const LibraryPrefix& prefix,
                                                  const bool is_import,
                                                  const bool is_deferred) {
-  const Library& importee = Library::Handle(ns.library());
+  const Library& importee = Library::Handle(ns.target());
   const Array& show_names = Array::Handle(ns.show_names());
   const Array& hide_names = Array::Handle(ns.hide_names());
 
-  Object& metadata = Object::Handle(ns.GetMetadata());
+  const Library& owner = Library::Handle(ns.owner());
+  Object& metadata = Object::Handle(owner.GetMetadata(ns));
   if (metadata.IsError()) {
     Exceptions::PropagateError(Error::Cast(metadata));
     UNREACHABLE();
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 7a297eb..b62a6e9 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -39,159 +39,159 @@
 pause_on_unhandled_async_exceptions2_test: Pass, Slow
 
 [ $compiler == dartkp ]
-add_breakpoint_rpc_kernel_test: SkipByDesign
-async_generator_breakpoint_test: SkipByDesign
-async_next_regession_18877_test: Skip, Timeout
-async_next_test: Skip, Timeout
-async_scope_test: Skip, Timeout
-async_single_step_exception_test: Skip, Timeout
-async_single_step_into_test: Skip, Timeout
-async_single_step_out_test: Skip, Timeout
-async_star_single_step_into_test: Skip, Timeout
-async_star_step_out_test: Skip, Timeout
-async_step_out_test: Skip, Timeout
-awaiter_async_stack_contents_2_test: Skip, Timeout
-awaiter_async_stack_contents_test: Skip, Timeout
-bad_reload_test: SkipByDesign
-break_on_activation_test: SkipByDesign
-break_on_async_function_test: Skip, Timeout
-break_on_default_constructor_test: SkipByDesign
-break_on_function_test: Skip, Timeout
-breakpoint_async_break_test: SkipByDesign
-breakpoint_in_package_parts_class_file_uri_test: SkipByDesign
-breakpoint_in_package_parts_class_test: SkipByDesign
-breakpoint_in_parts_class_test: SkipByDesign
-breakpoint_non_debuggable_library_test: SkipByDesign
-breakpoint_on_if_null_1_test: SkipByDesign
-breakpoint_on_if_null_2_test: SkipByDesign
-breakpoint_on_if_null_3_test: SkipByDesign
-breakpoint_on_if_null_4_test: SkipByDesign
-breakpoint_partfile_test: SkipByDesign
-breakpoint_two_args_checked_test: Skip, Timeout
+add_breakpoint_rpc_kernel_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_generator_breakpoint_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_next_regession_18877_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_next_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_single_step_exception_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_single_step_into_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_single_step_out_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_star_single_step_into_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_star_step_out_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_step_out_test: SkipByDesign # Debugger is disabled in AOT mode.
+awaiter_async_stack_contents_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+awaiter_async_stack_contents_test: SkipByDesign # Debugger is disabled in AOT mode.
+bad_reload_test: SkipByDesign # Hot reload is disabled in AOT mode.
+break_on_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+break_on_async_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+break_on_default_constructor_test: SkipByDesign # Debugger is disabled in AOT mode.
+break_on_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_async_break_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_in_package_parts_class_file_uri_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_in_package_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_in_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_non_debuggable_library_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_on_if_null_1_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_on_if_null_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_on_if_null_3_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_on_if_null_4_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_partfile_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_two_args_checked_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoints_with_mixin_test: SkipByDesign # Debugger is disabled in AOT mode.
-capture_stdio_test: Skip, Timeout
-causal_async_stack_contents_test: Skip, Timeout
-causal_async_stack_presence_test: Skip, Timeout
-causal_async_star_stack_contents_test: Skip, Timeout
-causal_async_star_stack_presence_test: Skip, Timeout
-client_resume_approvals_reload_test: SkipByDesign # Compiler is disabled in AOT mode.
-code_test: SkipByDesign
-column_breakpoint_test: SkipByDesign
-complex_reload_test: SkipByDesign
-coverage_const_field_async_closure_test: Skip, Timeout
-coverage_leaf_function_test: Skip, Timeout
-coverage_optimized_function_test: Skip, Timeout
-dds_log_history_size_*: Skip, Timeout
-debugger_inspect_test: SkipByDesign
-debugger_location_second_test: Skip, Timeout
-debugger_location_test: Skip, Timeout
-debugging_inlined_finally_test: Skip, Timeout
-debugging_test: SkipByDesign
-dev_fs_spawn_test: SkipByDesign
-developer_extension_test: Skip, Timeout
-developer_service_get_isolate_id_test: Skip, Timeout
-eval_internal_class_test: SkipByDesign
-eval_regression_flutter20255_test: Skip, Timeout
-eval_test: Skip, Timeout
-evaluate_activation_in_method_class_test: Skip, Timeout
+capture_stdio_test: SkipByDesign # Debugger is disabled in AOT mode.
+causal_async_stack_contents_test: SkipByDesign # Debugger is disabled in AOT mode.
+causal_async_stack_presence_test: SkipByDesign # Debugger is disabled in AOT mode.
+causal_async_star_stack_contents_test: SkipByDesign # Debugger is disabled in AOT mode.
+causal_async_star_stack_presence_test: SkipByDesign # Debugger is disabled in AOT mode.
+client_resume_approvals_reload_test: SkipByDesign # Debugger is disabled in AOT mode.
+code_test: SkipByDesign # Debugger is disabled in AOT mode.
+column_breakpoint_test: SkipByDesign # Debugger is disabled in AOT mode.
+complex_reload_test: SkipByDesign # Debugger is disabled in AOT mode.
+coverage_const_field_async_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
+coverage_leaf_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+coverage_optimized_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+dds_log_history_size_*: SkipByDesign # Debugger is disabled in AOT mode.
+debugger_inspect_test: SkipByDesign # Debugger is disabled in AOT mode.
+debugger_location_second_test: SkipByDesign # Debugger is disabled in AOT mode.
+debugger_location_test: SkipByDesign # Debugger is disabled in AOT mode.
+debugging_inlined_finally_test: SkipByDesign # Debugger is disabled in AOT mode.
+debugging_test: SkipByDesign # Debugger is disabled in AOT mode.
+dev_fs_spawn_test: SkipByDesign # Debugger is disabled in AOT mode.
+developer_extension_test: SkipByDesign # Debugger is disabled in AOT mode.
+developer_service_get_isolate_id_test: SkipByDesign # Debugger is disabled in AOT mode.
+eval_internal_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+eval_regression_flutter20255_test: SkipByDesign # Debugger is disabled in AOT mode.
+eval_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_activation_in_method_class_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_activation_test: SkipByDesign
 evaluate_async_closure_test: SkipByDesign
-evaluate_class_type_parameters_test: Skip, Timeout
-evaluate_function_type_parameters_test: Skip, Timeout
-evaluate_in_async_activation_test: Skip, Timeout
-evaluate_in_async_star_activation_test: Skip, Timeout
-evaluate_in_frame_rpc_test: Skip, Timeout
-evaluate_in_frame_with_scope_test: Skip, Timeout
-evaluate_in_sync_star_activation_test: Skip, Timeout
-evaluate_with_escaping_closure_test: SkipByDesign
-evaluate_with_scope_test: SkipByDesign
-field_script_test: SkipByDesign
-get_allocation_samples_test: Skip, Timeout
+evaluate_class_type_parameters_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_function_type_parameters_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_async_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_async_star_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_frame_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_frame_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_sync_star_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_with_escaping_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
+field_script_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_allocation_samples_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_isolate_after_language_error_test: CompileTimeError
-get_object_rpc_test: SkipByDesign
-get_source_report_test: Skip, Timeout
-get_source_report_with_mixin_test: Skip, Timeout
-get_stack_limit_rpc_test: Skip, Timeout
-get_stack_rpc_test: Skip, Timeout
-implicit_getter_setter_test: SkipByDesign
-invoke_test: Skip, Timeout
-isolate_lifecycle_test: SkipByDesign
-issue_25465_test: SkipByDesign
-issue_27238_test: Skip, Timeout
-issue_27287_test: Skip, Timeout
-issue_30555_test: SkipByDesign
-kill_paused_test: Skip, Timeout
+get_object_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_source_report_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_source_report_with_mixin_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_stack_limit_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_stack_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
+implicit_getter_setter_test: SkipByDesign # Debugger is disabled in AOT mode.
+invoke_test: SkipByDesign # Debugger is disabled in AOT mode.
+isolate_lifecycle_test: SkipByDesign # Debugger is disabled in AOT mode.
+issue_25465_test: SkipByDesign # Debugger is disabled in AOT mode.
+issue_27238_test: SkipByDesign # Debugger is disabled in AOT mode.
+issue_27287_test: SkipByDesign # Debugger is disabled in AOT mode.
+issue_30555_test: SkipByDesign # Debugger is disabled in AOT mode.
+kill_paused_test: SkipByDesign # Debugger is disabled in AOT mode.
 library_dependency_test: CompileTimeError
-local_variable_declaration_test: Skip, Timeout
-local_variable_in_awaiter_async_frame_test: Skip, Timeout
-logging_test: Skip, Timeout
+local_variable_declaration_test: SkipByDesign # Debugger is disabled in AOT mode.
+local_variable_in_awaiter_async_frame_test: SkipByDesign # Debugger is disabled in AOT mode.
+logging_test: SkipByDesign # Debugger is disabled in AOT mode.
 mirror_references_test: CompileTimeError
-mixin_break_test: Skip, Timeout
-network_profiling_test: Skip, Timeout
-next_through_assign_call_test: SkipByDesign
-next_through_assign_int_test: SkipByDesign
-next_through_await_for_test: SkipByDesign
-next_through_call_on_field_in_class_test: SkipByDesign
-next_through_call_on_field_test: SkipByDesign
-next_through_call_on_static_field_in_class_test: SkipByDesign
-next_through_catch_test: SkipByDesign
-next_through_closure_test: SkipByDesign
-next_through_create_list_and_map_test: SkipByDesign
-next_through_for_each_loop_test: SkipByDesign
-next_through_for_loop_with_break_and_continue_test: SkipByDesign
-next_through_function_expression_test: SkipByDesign
-next_through_implicit_call_test: SkipByDesign
-next_through_is_and_as_test: SkipByDesign
-next_through_multi_catch_test: SkipByDesign
-next_through_new_test: SkipByDesign
-next_through_operator_bracket_on_super_test: SkipByDesign
-next_through_operator_bracket_on_this_test: SkipByDesign
-next_through_operator_bracket_test: SkipByDesign
-next_through_simple_async_test: SkipByDesign
-next_through_simple_async_with_returns_test: SkipByDesign
-next_through_simple_linear_2_test: SkipByDesign
-next_through_simple_linear_test: SkipByDesign
-parameters_in_scope_at_entry_test: Skip, Timeout
-pause_idle_isolate_test: Skip, Timeout
-pause_on_exception_from_slow_path_test: SkipByDesign
-pause_on_exceptions_test: SkipByDesign
-pause_on_start_then_step_test: SkipByDesign
-pause_on_unhandled_async_exceptions2_test: SkipByDesign
-pause_on_unhandled_async_exceptions3_test: SkipByDesign
-pause_on_unhandled_async_exceptions_test: SkipByDesign
-pause_on_unhandled_exceptions_test: SkipByDesign
-positive_token_pos_test: Skip, Timeout
-regress_28443_test: SkipByDesign
-regress_28980_test: SkipByDesign
-regress_34841_test: Skip, Timeout
-reload_sources_test: Skip, Timeout
-rewind_optimized_out_test: Skip, Timeout
-rewind_test: Skip, Timeout
-set_library_debuggable_test: Skip, Timeout
-simple_reload_test: SkipByDesign
-steal_breakpoint_test: SkipByDesign
-step_into_async_no_await_test: Skip, Timeout
-step_over_await_test: Skip, Timeout
-step_test: SkipByDesign
-step_through_arithmetic_test: SkipByDesign
-step_through_constructor_calls_test: SkipByDesign
-step_through_constructor_test: SkipByDesign
-step_through_for_each_sync_star_2_test: SkipByDesign
-step_through_for_each_sync_star_test: SkipByDesign
-step_through_function_2_test: SkipByDesign
-step_through_function_test: SkipByDesign
-step_through_getter_test: SkipByDesign
-step_through_mixin_from_sdk_test: SkipByDesign
-step_through_property_get_test: SkipByDesign
-step_through_property_set_test: SkipByDesign
-step_through_setter_test: SkipByDesign
-step_through_switch_test: SkipByDesign
-step_through_switch_with_continue_test: SkipByDesign
-valid_source_locations_test: Skip, Timeout
-validate_timer_port_behavior_test: SkipByDesign, Timeout # Debugger disabled in AOT
-vm_timeline_flags_test: Skip, Timeout
+mixin_break_test: SkipByDesign # Debugger is disabled in AOT mode.
+network_profiling_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_assign_call_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_assign_int_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_await_for_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_call_on_field_in_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_call_on_field_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_call_on_static_field_in_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_catch_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_create_list_and_map_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_for_each_loop_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_for_loop_with_break_and_continue_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_function_expression_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_implicit_call_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_is_and_as_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_multi_catch_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_new_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_operator_bracket_on_super_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_operator_bracket_on_this_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_operator_bracket_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_simple_async_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_simple_async_with_returns_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_simple_linear_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_simple_linear_test: SkipByDesign # Debugger is disabled in AOT mode.
+parameters_in_scope_at_entry_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_idle_isolate_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_exception_from_slow_path_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_exceptions_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_start_then_step_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_unhandled_async_exceptions2_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_unhandled_async_exceptions3_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_unhandled_async_exceptions_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_unhandled_exceptions_test: SkipByDesign # Debugger is disabled in AOT mode.
+positive_token_pos_test: SkipByDesign # Debugger is disabled in AOT mode.
+regress_28443_test: SkipByDesign # Debugger is disabled in AOT mode.
+regress_28980_test: SkipByDesign # Debugger is disabled in AOT mode.
+regress_34841_test: SkipByDesign # Debugger is disabled in AOT mode.
+reload_sources_test: SkipByDesign # Debugger is disabled in AOT mode.
+rewind_optimized_out_test: SkipByDesign # Debugger is disabled in AOT mode.
+rewind_test: SkipByDesign # Debugger is disabled in AOT mode.
+set_library_debuggable_test: SkipByDesign # Debugger is disabled in AOT mode.
+simple_reload_test: SkipByDesign # Hot reload is disabled in AOT mode.
+steal_breakpoint_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_into_async_no_await_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_over_await_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_arithmetic_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_constructor_calls_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_constructor_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_for_each_sync_star_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_for_each_sync_star_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_function_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_getter_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_mixin_from_sdk_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_property_get_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_property_set_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_setter_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_switch_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_switch_with_continue_test: SkipByDesign # Debugger is disabled in AOT mode.
+valid_source_locations_test: SkipByDesign # Debugger is disabled in AOT mode.
+validate_timer_port_behavior_test: SkipByDesign # Debugger is disabled in AOT mode.
+vm_timeline_flags_test: SkipByDesign # Debugger is disabled in AOT mode.
 weak_properties_test: CompileTimeError
-yield_positions_with_finally_test: SkipByDesign
+yield_positions_with_finally_test: SkipByDesign # Debugger is disabled in AOT mode.
 
 [ $fasta ]
 get_isolate_after_language_error_test: CompileTimeError
diff --git a/runtime/observatory_2/tests/service_2/service_2_kernel.status b/runtime/observatory_2/tests/service_2/service_2_kernel.status
index d8996be..2b6e18b 100644
--- a/runtime/observatory_2/tests/service_2/service_2_kernel.status
+++ b/runtime/observatory_2/tests/service_2/service_2_kernel.status
@@ -39,158 +39,158 @@
 pause_on_unhandled_async_exceptions2_test: Pass, Slow
 
 [ $compiler == dartkp ]
-add_breakpoint_rpc_kernel_test: SkipByDesign
-async_generator_breakpoint_test: SkipByDesign
-async_next_regession_18877_test: Skip, Timeout
-async_next_test: Skip, Timeout
-async_scope_test: Skip, Timeout
-async_single_step_exception_test: Skip, Timeout
-async_single_step_into_test: Skip, Timeout
-async_single_step_out_test: Skip, Timeout
-async_star_single_step_into_test: Skip, Timeout
-async_star_step_out_test: Skip, Timeout
-async_step_out_test: Skip, Timeout
-awaiter_async_stack_contents_2_test: Skip, Timeout
-awaiter_async_stack_contents_test: Skip, Timeout
-bad_reload_test: SkipByDesign
-break_on_activation_test: SkipByDesign
-break_on_async_function_test: Skip, Timeout
-break_on_default_constructor_test: SkipByDesign
-break_on_function_test: Skip, Timeout
-breakpoint_async_break_test: SkipByDesign
-breakpoint_in_package_parts_class_file_uri_test: SkipByDesign
-breakpoint_in_package_parts_class_test: SkipByDesign
-breakpoint_in_parts_class_test: SkipByDesign
-breakpoint_non_debuggable_library_test: SkipByDesign
-breakpoint_on_if_null_1_test: SkipByDesign
-breakpoint_on_if_null_2_test: SkipByDesign
-breakpoint_on_if_null_3_test: SkipByDesign
-breakpoint_on_if_null_4_test: SkipByDesign
-breakpoint_partfile_test: SkipByDesign
-breakpoint_two_args_checked_test: Skip, Timeout
+add_breakpoint_rpc_kernel_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_generator_breakpoint_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_next_regession_18877_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_next_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_single_step_exception_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_single_step_into_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_single_step_out_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_star_single_step_into_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_star_step_out_test: SkipByDesign # Debugger is disabled in AOT mode.
+async_step_out_test: SkipByDesign # Debugger is disabled in AOT mode.
+awaiter_async_stack_contents_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+awaiter_async_stack_contents_test: SkipByDesign # Debugger is disabled in AOT mode.
+bad_reload_test: SkipByDesign # Hot reload is disabled in AOT mode.
+break_on_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+break_on_async_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+break_on_default_constructor_test: SkipByDesign # Debugger is disabled in AOT mode.
+break_on_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_async_break_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_in_package_parts_class_file_uri_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_in_package_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_in_parts_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_non_debuggable_library_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_on_if_null_1_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_on_if_null_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_on_if_null_3_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_on_if_null_4_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_partfile_test: SkipByDesign # Debugger is disabled in AOT mode.
+breakpoint_two_args_checked_test: SkipByDesign # Debugger is disabled in AOT mode.
 breakpoints_with_mixin_test: SkipByDesign # Debugger is disabled in AOT mode.
-capture_stdio_test: Skip, Timeout
-causal_async_stack_contents_test: Skip, Timeout
-causal_async_stack_presence_test: Skip, Timeout
-causal_async_star_stack_contents_test: Skip, Timeout
-causal_async_star_stack_presence_test: Skip, Timeout
-client_resume_approvals_reload_test: SkipByDesign # Compiler is disabled in AOT mode.
-code_test: SkipByDesign
-column_breakpoint_test: SkipByDesign
-complex_reload_test: SkipByDesign
-coverage_const_field_async_closure_test: Skip, Timeout
-coverage_leaf_function_test: Skip, Timeout
-coverage_optimized_function_test: Skip, Timeout
-dds_log_history_size_*: Skip, Timeout
-debugger_inspect_test: SkipByDesign
-debugger_location_second_test: Skip, Timeout
-debugger_location_test: Skip, Timeout
-debugging_inlined_finally_test: Skip, Timeout
-debugging_test: SkipByDesign
-dev_fs_spawn_test: SkipByDesign
-developer_extension_test: Skip, Timeout
-developer_service_get_isolate_id_test: Skip, Timeout
-eval_internal_class_test: SkipByDesign
-eval_regression_flutter20255_test: Skip, Timeout
-eval_test: Skip, Timeout
-evaluate_activation_in_method_class_test: Skip, Timeout
+capture_stdio_test: SkipByDesign # Debugger is disabled in AOT mode.
+causal_async_stack_contents_test: SkipByDesign # Debugger is disabled in AOT mode.
+causal_async_stack_presence_test: SkipByDesign # Debugger is disabled in AOT mode.
+causal_async_star_stack_contents_test: SkipByDesign # Debugger is disabled in AOT mode.
+causal_async_star_stack_presence_test: SkipByDesign # Debugger is disabled in AOT mode.
+client_resume_approvals_reload_test: SkipByDesign # Debugger is disabled in AOT mode.
+code_test: SkipByDesign # Debugger is disabled in AOT mode.
+column_breakpoint_test: SkipByDesign # Debugger is disabled in AOT mode.
+complex_reload_test: SkipByDesign # Debugger is disabled in AOT mode.
+coverage_const_field_async_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
+coverage_leaf_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+coverage_optimized_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+dds_log_history_size_*: SkipByDesign # Debugger is disabled in AOT mode.
+debugger_inspect_test: SkipByDesign # Debugger is disabled in AOT mode.
+debugger_location_second_test: SkipByDesign # Debugger is disabled in AOT mode.
+debugger_location_test: SkipByDesign # Debugger is disabled in AOT mode.
+debugging_inlined_finally_test: SkipByDesign # Debugger is disabled in AOT mode.
+debugging_test: SkipByDesign # Debugger is disabled in AOT mode.
+dev_fs_spawn_test: SkipByDesign # Debugger is disabled in AOT mode.
+developer_extension_test: SkipByDesign # Debugger is disabled in AOT mode.
+developer_service_get_isolate_id_test: SkipByDesign # Debugger is disabled in AOT mode.
+eval_internal_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+eval_regression_flutter20255_test: SkipByDesign # Debugger is disabled in AOT mode.
+eval_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_activation_in_method_class_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_activation_test: SkipByDesign
 evaluate_async_closure_test: SkipByDesign
-evaluate_class_type_parameters_test: Skip, Timeout
-evaluate_function_type_parameters_test: Skip, Timeout
-evaluate_in_async_activation_test: Skip, Timeout
-evaluate_in_async_star_activation_test: Skip, Timeout
-evaluate_in_frame_rpc_test: Skip, Timeout
-evaluate_in_frame_with_scope_test: Skip, Timeout
-evaluate_in_sync_star_activation_test: Skip, Timeout
-evaluate_with_escaping_closure_test: SkipByDesign
-evaluate_with_scope_test: SkipByDesign
-field_script_test: SkipByDesign
-get_allocation_samples_test: Skip, Timeout
+evaluate_class_type_parameters_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_function_type_parameters_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_async_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_async_star_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_frame_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_frame_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_in_sync_star_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_with_escaping_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
+field_script_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_allocation_samples_test: SkipByDesign # Debugger is disabled in AOT mode.
 get_isolate_after_language_error_test: CompileTimeError
-get_object_rpc_test: SkipByDesign
-get_source_report_test: Skip, Timeout
-get_source_report_with_mixin_test: Skip, Timeout
-get_stack_limit_rpc_test: Skip, Timeout
-get_stack_rpc_test: Skip, Timeout
-implicit_getter_setter_test: SkipByDesign
-invoke_test: Skip, Timeout
-isolate_lifecycle_test: SkipByDesign
-issue_25465_test: SkipByDesign
-issue_27238_test: Skip, Timeout
-issue_27287_test: Skip, Timeout
-issue_30555_test: SkipByDesign
-kill_paused_test: Skip, Timeout
+get_object_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_source_report_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_source_report_with_mixin_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_stack_limit_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
+get_stack_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
+implicit_getter_setter_test: SkipByDesign # Debugger is disabled in AOT mode.
+invoke_test: SkipByDesign # Debugger is disabled in AOT mode.
+isolate_lifecycle_test: SkipByDesign # Debugger is disabled in AOT mode.
+issue_25465_test: SkipByDesign # Debugger is disabled in AOT mode.
+issue_27238_test: SkipByDesign # Debugger is disabled in AOT mode.
+issue_27287_test: SkipByDesign # Debugger is disabled in AOT mode.
+issue_30555_test: SkipByDesign # Debugger is disabled in AOT mode.
+kill_paused_test: SkipByDesign # Debugger is disabled in AOT mode.
 library_dependency_test: CompileTimeError
-local_variable_declaration_test: Skip, Timeout
-local_variable_in_awaiter_async_frame_test: Skip, Timeout
-logging_test: Skip, Timeout
+local_variable_declaration_test: SkipByDesign # Debugger is disabled in AOT mode.
+local_variable_in_awaiter_async_frame_test: SkipByDesign # Debugger is disabled in AOT mode.
+logging_test: SkipByDesign # Debugger is disabled in AOT mode.
 mirror_references_test: CompileTimeError
-mixin_break_test: Skip, Timeout
-network_profiling_test: Skip, Timeout
-next_through_assign_call_test: SkipByDesign
-next_through_assign_int_test: SkipByDesign
-next_through_await_for_test: SkipByDesign
-next_through_call_on_field_in_class_test: SkipByDesign
-next_through_call_on_field_test: SkipByDesign
-next_through_call_on_static_field_in_class_test: SkipByDesign
-next_through_catch_test: SkipByDesign
-next_through_closure_test: SkipByDesign
-next_through_create_list_and_map_test: SkipByDesign
-next_through_for_each_loop_test: SkipByDesign
-next_through_for_loop_with_break_and_continue_test: SkipByDesign
-next_through_function_expression_test: SkipByDesign
-next_through_implicit_call_test: SkipByDesign
-next_through_is_and_as_test: SkipByDesign
-next_through_multi_catch_test: SkipByDesign
-next_through_new_test: SkipByDesign
-next_through_operator_bracket_on_super_test: SkipByDesign
-next_through_operator_bracket_on_this_test: SkipByDesign
-next_through_operator_bracket_test: SkipByDesign
-next_through_simple_async_test: SkipByDesign
-next_through_simple_async_with_returns_test: SkipByDesign
-next_through_simple_linear_2_test: SkipByDesign
-next_through_simple_linear_test: SkipByDesign
-parameters_in_scope_at_entry_test: Skip, Timeout
-pause_idle_isolate_test: Skip, Timeout
-pause_on_exceptions_test: SkipByDesign
-pause_on_start_then_step_test: SkipByDesign
-pause_on_unhandled_async_exceptions2_test: SkipByDesign
-pause_on_unhandled_async_exceptions3_test: SkipByDesign
-pause_on_unhandled_async_exceptions_test: SkipByDesign
-pause_on_unhandled_exceptions_test: SkipByDesign
-positive_token_pos_test: Skip, Timeout
-regress_28443_test: SkipByDesign
-regress_28980_test: SkipByDesign
-regress_34841_test: Skip, Timeout
-reload_sources_test: Skip, Timeout
-rewind_optimized_out_test: Skip, Timeout
-rewind_test: Skip, Timeout
-set_library_debuggable_test: Skip, Timeout
-simple_reload_test: SkipByDesign
-steal_breakpoint_test: SkipByDesign
-step_into_async_no_await_test: Skip, Timeout
-step_over_await_test: Skip, Timeout
-step_test: SkipByDesign
-step_through_arithmetic_test: SkipByDesign
-step_through_constructor_calls_test: SkipByDesign
-step_through_constructor_test: SkipByDesign
-step_through_for_each_sync_star_2_test: SkipByDesign
-step_through_for_each_sync_star_test: SkipByDesign
-step_through_function_2_test: SkipByDesign
-step_through_function_test: SkipByDesign
-step_through_getter_test: SkipByDesign
-step_through_mixin_from_sdk_test: SkipByDesign
-step_through_property_get_test: SkipByDesign
-step_through_property_set_test: SkipByDesign
-step_through_setter_test: SkipByDesign
-step_through_switch_test: SkipByDesign
-step_through_switch_with_continue_test: SkipByDesign
-valid_source_locations_test: Skip, Timeout
-validate_timer_port_behavior_test: SkipByDesign, Timeout # Debugger disabled in AOT
-vm_timeline_flags_test: Skip, Timeout
+mixin_break_test: SkipByDesign # Debugger is disabled in AOT mode.
+network_profiling_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_assign_call_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_assign_int_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_await_for_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_call_on_field_in_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_call_on_field_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_call_on_static_field_in_class_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_catch_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_create_list_and_map_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_for_each_loop_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_for_loop_with_break_and_continue_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_function_expression_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_implicit_call_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_is_and_as_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_multi_catch_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_new_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_operator_bracket_on_super_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_operator_bracket_on_this_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_operator_bracket_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_simple_async_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_simple_async_with_returns_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_simple_linear_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+next_through_simple_linear_test: SkipByDesign # Debugger is disabled in AOT mode.
+parameters_in_scope_at_entry_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_idle_isolate_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_exceptions_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_start_then_step_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_unhandled_async_exceptions2_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_unhandled_async_exceptions3_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_unhandled_async_exceptions_test: SkipByDesign # Debugger is disabled in AOT mode.
+pause_on_unhandled_exceptions_test: SkipByDesign # Debugger is disabled in AOT mode.
+positive_token_pos_test: SkipByDesign # Debugger is disabled in AOT mode.
+regress_28443_test: SkipByDesign # Debugger is disabled in AOT mode.
+regress_28980_test: SkipByDesign # Debugger is disabled in AOT mode.
+regress_34841_test: SkipByDesign # Debugger is disabled in AOT mode.
+reload_sources_test: SkipByDesign # Debugger is disabled in AOT mode.
+rewind_optimized_out_test: SkipByDesign # Debugger is disabled in AOT mode.
+rewind_test: SkipByDesign # Debugger is disabled in AOT mode.
+set_library_debuggable_test: SkipByDesign # Debugger is disabled in AOT mode.
+simple_reload_test: SkipByDesign # Hot reload is disabled in AOT mode.
+steal_breakpoint_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_into_async_no_await_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_over_await_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_arithmetic_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_constructor_calls_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_constructor_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_for_each_sync_star_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_for_each_sync_star_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_function_2_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_function_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_getter_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_mixin_from_sdk_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_property_get_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_property_set_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_setter_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_switch_test: SkipByDesign # Debugger is disabled in AOT mode.
+step_through_switch_with_continue_test: SkipByDesign # Debugger is disabled in AOT mode.
+valid_source_locations_test: SkipByDesign # Debugger is disabled in AOT mode.
+validate_timer_port_behavior_test: SkipByDesign # Debugger is disabled in AOT mode.
+vm_timeline_flags_test: SkipByDesign # Debugger is disabled in AOT mode.
 weak_properties_test: CompileTimeError
-yield_positions_with_finally_test: SkipByDesign
+yield_positions_with_finally_test: SkipByDesign # Debugger is disabled in AOT mode.
 
 [ $fasta ]
 get_isolate_after_language_error_test: CompileTimeError
diff --git a/runtime/vm/canonical_tables.cc b/runtime/vm/canonical_tables.cc
new file mode 100644
index 0000000..d5ab2ff
--- /dev/null
+++ b/runtime/vm/canonical_tables.cc
@@ -0,0 +1,74 @@
+// 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.
+
+#include "vm/canonical_tables.h"
+
+namespace dart {
+
+bool MetadataMapTraits::IsMatch(const Object& a, const Object& b) {
+  // In the absence of hot reload, this can just be an identity check. With
+  // reload, some old program elements may be retained by the stack, closures
+  // or mirrors, which are absent from the new version of the library's
+  // metadata table. This name-based matching fuzzy maps the old program
+  // elements to corresponding new elements, preserving the behavior of the old
+  // metaname+fields scheme.
+  if (a.IsLibrary() && b.IsLibrary()) {
+    const String& url_a = String::Handle(Library::Cast(a).url());
+    const String& url_b = String::Handle(Library::Cast(b).url());
+    return url_a.Equals(url_b);
+  } else if (a.IsClass() && b.IsClass()) {
+    const String& name_a = String::Handle(Class::Cast(a).Name());
+    const String& name_b = String::Handle(Class::Cast(b).Name());
+    return name_a.Equals(name_b);
+  } else if (a.IsFunction() && b.IsFunction()) {
+    const String& name_a = String::Handle(Function::Cast(a).name());
+    const String& name_b = String::Handle(Function::Cast(b).name());
+    if (!name_a.Equals(name_b)) {
+      return false;
+    }
+    const Object& owner_a = Object::Handle(Function::Cast(a).Owner());
+    const Object& owner_b = Object::Handle(Function::Cast(b).Owner());
+    return IsMatch(owner_a, owner_b);
+  } else if (a.IsField() && b.IsField()) {
+    const String& name_a = String::Handle(Field::Cast(a).name());
+    const String& name_b = String::Handle(Field::Cast(b).name());
+    if (!name_a.Equals(name_b)) {
+      return false;
+    }
+    const Object& owner_a = Object::Handle(Field::Cast(a).Owner());
+    const Object& owner_b = Object::Handle(Field::Cast(b).Owner());
+    return IsMatch(owner_a, owner_b);
+  } else if (a.IsTypeParameter() && b.IsTypeParameter()) {
+    const String& name_a = String::Handle(TypeParameter::Cast(a).name());
+    const String& name_b = String::Handle(TypeParameter::Cast(b).name());
+    if (!name_a.Equals(name_b)) {
+      return false;
+    }
+    const Object& owner_a = Object::Handle(TypeParameter::Cast(a).Owner());
+    const Object& owner_b = Object::Handle(TypeParameter::Cast(b).Owner());
+    return IsMatch(owner_a, owner_b);
+  }
+  return a.raw() == b.raw();
+}
+
+uword MetadataMapTraits::Hash(const Object& key) {
+  if (key.IsLibrary()) {
+    return String::Hash(Library::Cast(key).url());
+  } else if (key.IsClass()) {
+    return String::Hash(Class::Cast(key).Name());
+  } else if (key.IsFunction()) {
+    return CombineHashes(String::Hash(Function::Cast(key).name()),
+                         Hash(Object::Handle(Function::Cast(key).Owner())));
+  } else if (key.IsField()) {
+    return CombineHashes(String::Hash(Field::Cast(key).name()),
+                         Hash(Object::Handle(Field::Cast(key).Owner())));
+  } else if (key.IsTypeParameter()) {
+    return TypeParameter::Cast(key).Hash();
+  } else if (key.IsNamespace()) {
+    return Hash(Library::Handle(Namespace::Cast(key).target()));
+  }
+  UNREACHABLE();
+}
+
+}  // namespace dart
diff --git a/runtime/vm/canonical_tables.h b/runtime/vm/canonical_tables.h
index 69b79eb..f0c3d2b 100644
--- a/runtime/vm/canonical_tables.h
+++ b/runtime/vm/canonical_tables.h
@@ -254,6 +254,15 @@
 typedef UnorderedHashSet<CanonicalTypeArgumentsTraits>
     CanonicalTypeArgumentsSet;
 
+class MetadataMapTraits {
+ public:
+  static const char* Name() { return "MetadataMapTraits"; }
+  static bool ReportStats() { return false; }
+  static bool IsMatch(const Object& a, const Object& b);
+  static uword Hash(const Object& key);
+};
+typedef UnorderedHashMap<MetadataMapTraits> MetadataMap;
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_CANONICAL_TABLES_H_
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index afa2668..175f985 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1503,7 +1503,7 @@
       if (old_cid != new_cid) {
         // Don't touch objects that are unchanged. In particular, Instructions,
         // which are write-protected.
-        obj->ptr()->SetClassId(new_cid);
+        obj->ptr()->SetClassIdUnsynchronized(new_cid);
       }
     }
   }
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 023f790..895f537 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -5837,7 +5837,12 @@
   WriteUnsigned(num_objects);
   WriteUnsigned(canonical_clusters.length());
   WriteUnsigned(clusters.length());
-  WriteUnsigned(initial_field_table_->NumFieldIds());
+  // TODO(dartbug.com/36097): Not every snapshot carries the field table.
+  if (current_loading_unit_id_ <= LoadingUnit::kRootId) {
+    WriteUnsigned(initial_field_table_->NumFieldIds());
+  } else {
+    WriteUnsigned(0);
+  }
 
   for (SerializationCluster* cluster : canonical_clusters) {
     cluster->WriteAndMeasureAlloc(this);
@@ -6573,8 +6578,8 @@
   refs_ = Array::New(num_objects_ + kFirstReference, Heap::kOld);
   if (initial_field_table_len > 0) {
     initial_field_table_->AllocateIndex(initial_field_table_len - 1);
+    ASSERT_EQUAL(initial_field_table_->NumFieldIds(), initial_field_table_len);
   }
-  ASSERT_EQUAL(initial_field_table_->NumFieldIds(), initial_field_table_len);
 
   {
     NoSafepointScope no_safepoint;
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 61cd91d..7a8f7b8 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -2117,47 +2117,9 @@
 
 void Precompiler::DropMetadata() {
   Library& lib = Library::Handle(Z);
-  const GrowableObjectArray& null_growable_list =
-      GrowableObjectArray::Handle(Z);
-  Array& dependencies = Array::Handle(Z);
-  Namespace& ns = Namespace::Handle(Z);
-  const Field& null_field = Field::Handle(Z);
-  GrowableObjectArray& metadata = GrowableObjectArray::Handle(Z);
-  Field& metadata_field = Field::Handle(Z);
-
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
-    metadata ^= lib.metadata();
-    for (intptr_t j = 0; j < metadata.Length(); j++) {
-      metadata_field ^= metadata.At(j);
-      if (metadata_field.is_static()) {
-        // Although this field will become garbage after clearing the list
-        // below, we also need to clear its value from the field table.
-        // The value may be an instance of an otherwise dead class, and if
-        // it remains in the field table we can get an instance on the heap
-        // with a deleted class.
-        metadata_field.SetStaticValue(Object::null_instance(),
-                                      /*save_initial_value=*/true);
-      }
-    }
-
-    lib.set_metadata(null_growable_list);
-
-    dependencies = lib.imports();
-    for (intptr_t j = 0; j < dependencies.Length(); j++) {
-      ns ^= dependencies.At(j);
-      if (!ns.IsNull()) {
-        ns.set_metadata_field(null_field);
-      }
-    }
-
-    dependencies = lib.exports();
-    for (intptr_t j = 0; j < dependencies.Length(); j++) {
-      ns ^= dependencies.At(j);
-      if (!ns.IsNull()) {
-        ns.set_metadata_field(null_field);
-      }
-    }
+    lib.set_metadata(Array::null_array());
   }
 }
 
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 49c32bc..2071a31 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -6013,7 +6013,7 @@
     for (intptr_t j = 0; j < imports.Length(); j++) {
       ns ^= imports.At(j);
       if (ns.IsNull()) continue;
-      importee = ns.library();
+      importee = ns.target();
       importee_uri = importee.url();
       if (importee_uri.StartsWith(scheme_vm)) {
         result.Add(importer);
diff --git a/runtime/vm/heap/sweeper.cc b/runtime/vm/heap/sweeper.cc
index f579074..9013eba 100644
--- a/runtime/vm/heap/sweeper.cc
+++ b/runtime/vm/heap/sweeper.cc
@@ -27,24 +27,28 @@
   uword current = start;
 
   while (current < end) {
-    intptr_t obj_size;
     ObjectPtr raw_obj = ObjectLayout::FromAddr(current);
     ASSERT(OldPage::Of(raw_obj) == page);
-    if (raw_obj->ptr()->IsMarked()) {
+    // These acquire operations balance release operations in array
+    // truncaton, ensuring the writes creating the filler object are ordered
+    // before the writes inserting the filler object into the freelist.
+    uword tags = raw_obj->ptr()->tags_.load(std::memory_order_acquire);
+    intptr_t obj_size = raw_obj->ptr()->HeapSize(tags);
+    if (ObjectLayout::IsMarked(tags)) {
       // Found marked object. Clear the mark bit and update swept bytes.
       raw_obj->ptr()->ClearMarkBit();
-      obj_size = raw_obj->ptr()->HeapSize();
       used_in_bytes += obj_size;
     } else {
-      uword free_end = current + raw_obj->ptr()->HeapSize();
+      uword free_end = current + obj_size;
       while (free_end < end) {
         ObjectPtr next_obj = ObjectLayout::FromAddr(free_end);
-        if (next_obj->ptr()->IsMarked()) {
+        tags = next_obj->ptr()->tags_.load(std::memory_order_acquire);
+        if (ObjectLayout::IsMarked(tags)) {
           // Reached the end of the free block.
           break;
         }
         // Expand the free block by the size of this object.
-        free_end += next_obj->ptr()->HeapSize();
+        free_end += next_obj->ptr()->HeapSize(tags);
       }
       obj_size = free_end - current;
       if (is_executable) {
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index a9e660f..8e586b3 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -961,7 +961,7 @@
     for (intptr_t import_idx = 0; import_idx < ports.Length(); import_idx++) {
       ns ^= ports.At(import_idx);
       if (!ns.IsNull()) {
-        target = ns.library();
+        target = ns.target();
         target_url = target.url();
         if (!target_url.StartsWith(Symbols::DartExtensionScheme())) {
           (*imported_by)[target.index()]->Add(lib.index());
@@ -974,7 +974,7 @@
     for (intptr_t export_idx = 0; export_idx < ports.Length(); export_idx++) {
       ns ^= ports.At(export_idx);
       if (!ns.IsNull()) {
-        target = ns.library();
+        target = ns.target();
         (*imported_by)[target.index()]->Add(lib.index());
       }
     }
@@ -992,7 +992,7 @@
              import_idx++) {
           ns ^= ports.At(import_idx);
           if (!ns.IsNull()) {
-            target = ns.library();
+            target = ns.target();
             (*imported_by)[target.index()]->Add(lib.index());
           }
         }
diff --git a/runtime/vm/kernel.cc b/runtime/vm/kernel.cc
index 7c53e72..952e41a 100644
--- a/runtime/vm/kernel.cc
+++ b/runtime/vm/kernel.cc
@@ -430,26 +430,28 @@
   DISALLOW_COPY_AND_ASSIGN(MetadataEvaluator);
 };
 
-ObjectPtr EvaluateMetadata(const Field& metadata_field,
+ObjectPtr EvaluateMetadata(const Library& library,
+                           intptr_t kernel_offset,
                            bool is_annotations_offset) {
   LongJumpScope jump;
   if (setjmp(*jump.Set()) == 0) {
     Thread* thread = Thread::Current();
     Zone* zone = thread->zone();
     TranslationHelper helper(thread);
-    Script& script = Script::Handle(zone, metadata_field.Script());
+    Script& script = Script::Handle(
+        zone, Class::Handle(zone, library.toplevel_class()).script());
     helper.InitFromScript(script);
 
-    const Class& owner_class = Class::Handle(zone, metadata_field.Owner());
+    const Class& owner_class = Class::Handle(zone, library.toplevel_class());
     ActiveClass active_class;
     ActiveClassScope active_class_scope(&active_class, &owner_class);
 
     MetadataEvaluator metadata_evaluator(
         zone, &helper, script,
-        ExternalTypedData::Handle(zone, metadata_field.KernelData()),
-        metadata_field.KernelDataProgramOffset(), &active_class);
+        ExternalTypedData::Handle(zone, library.kernel_data()),
+        library.kernel_offset(), &active_class);
 
-    return metadata_evaluator.EvaluateMetadata(metadata_field.kernel_offset(),
+    return metadata_evaluator.EvaluateMetadata(kernel_offset,
                                                is_annotations_offset);
 
   } else {
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index 9b0d8de..ed66e25 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -196,7 +196,8 @@
 void CollectTokenPositionsFor(const Script& script);
 
 ObjectPtr EvaluateStaticConstFieldInitializer(const Field& field);
-ObjectPtr EvaluateMetadata(const Field& metadata_field,
+ObjectPtr EvaluateMetadata(const Library& library,
+                           intptr_t kernel_offset,
                            bool is_annotations_offset);
 ObjectPtr BuildParameterDescriptor(const Function& function);
 
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index e37f325..4dbcfb6 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -694,7 +694,7 @@
       // Dart_GetImportsOfScheme('dart-ext').
       const auto& native_library = Library::Handle(Library::New(uri_path));
       library.AddImport(Namespace::Handle(Namespace::New(
-          native_library, Array::null_array(), Array::null_array())));
+          native_library, Array::null_array(), Array::null_array(), library)));
     }
   }
 }
@@ -1122,8 +1122,7 @@
 
   if (FLAG_enable_mirrors && annotation_count > 0) {
     ASSERT(annotations_kernel_offset > 0);
-    library.AddLibraryMetadata(toplevel_class, TokenPosition::kNoSource,
-                               annotations_kernel_offset);
+    library.AddMetadata(library, annotations_kernel_offset);
   }
 
   if (register_class) {
@@ -1248,7 +1247,7 @@
 
     if ((FLAG_enable_mirrors || has_pragma_annotation) &&
         annotation_count > 0) {
-      library.AddFieldMetadata(field, TokenPosition::kNoSource, field_offset);
+      library.AddMetadata(field, field_offset);
     }
     fields_.Add(&field);
   }
@@ -1366,7 +1365,7 @@
           "import of dart:ffi is not supported in the current Dart runtime");
     }
     String& prefix = H.DartSymbolPlain(dependency_helper.name_index_);
-    ns = Namespace::New(target_library, show_names, hide_names);
+    ns = Namespace::New(target_library, show_names, hide_names, *library);
     if ((dependency_helper.flags_ & LibraryDependencyHelper::Export) != 0) {
       library->AddExport(ns);
     } else {
@@ -1389,8 +1388,7 @@
 
     if (FLAG_enable_mirrors && dependency_helper.annotation_count_ > 0) {
       ASSERT(annotations_kernel_offset > 0);
-      ns.AddMetadata(toplevel_class, TokenPosition::kNoSource,
-                     annotations_kernel_offset);
+      library->AddMetadata(ns, annotations_kernel_offset);
     }
 
     if (prefix.IsNull()) {
@@ -1511,9 +1509,7 @@
   }
 
   if ((FLAG_enable_mirrors || has_pragma_annotation) && annotation_count > 0) {
-    library.AddClassMetadata(*out_class, toplevel_class,
-                             TokenPosition::kNoSource,
-                             class_offset - correction_offset_);
+    library.AddMetadata(*out_class, class_offset - correction_offset_);
   }
 
   // We do not register expression evaluation classes with the VM:
@@ -1625,7 +1621,7 @@
       }
       if ((FLAG_enable_mirrors || has_pragma_annotation) &&
           annotation_count > 0) {
-        library.AddFieldMetadata(field, TokenPosition::kNoSource, field_offset);
+        library.AddMetadata(field, field_offset);
       }
       fields_.Add(&field);
     }
@@ -1724,8 +1720,7 @@
 
     if ((FLAG_enable_mirrors || has_pragma_annotation) &&
         annotation_count > 0) {
-      library.AddFunctionMetadata(function, TokenPosition::kNoSource,
-                                  constructor_offset);
+      library.AddMetadata(function, constructor_offset);
     }
   }
 
@@ -2049,8 +2044,7 @@
   helper_.SetOffset(procedure_end);
 
   if (annotation_count > 0) {
-    library.AddFunctionMetadata(function, TokenPosition::kNoSource,
-                                procedure_offset);
+    library.AddMetadata(function, procedure_offset);
   }
 
   if (has_pragma_annotation) {
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 9352916..927cfef 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -1467,14 +1467,7 @@
       // new array length, and so treat it as a pointer. Ensure it is a Smi so
       // the marker won't dereference it.
       ASSERT((new_tags & kSmiTagMask) == kSmiTag);
-      uword tags = raw->ptr()->tags_;
-      uword old_tags;
-      // TODO(iposva): Investigate whether CompareAndSwapWord is necessary.
-      do {
-        old_tags = tags;
-        // We can't use obj.CompareAndSwapTags here because we don't have a
-        // handle for the new object.
-      } while (!raw->ptr()->tags_.WeakCAS(old_tags, new_tags));
+      raw->ptr()->tags_ = new_tags;
 
       intptr_t leftover_len = (leftover_size - TypedData::InstanceSize(0));
       ASSERT(TypedData::InstanceSize(leftover_len) == leftover_size);
@@ -1496,14 +1489,7 @@
       // new array length, and so treat it as a pointer. Ensure it is a Smi so
       // the marker won't dereference it.
       ASSERT((new_tags & kSmiTagMask) == kSmiTag);
-      uword tags = raw->ptr()->tags_;
-      uword old_tags;
-      // TODO(iposva): Investigate whether CompareAndSwapWord is necessary.
-      do {
-        old_tags = tags;
-        // We can't use obj.CompareAndSwapTags here because we don't have a
-        // handle for the new object.
-      } while (!raw->ptr()->tags_.WeakCAS(old_tags, new_tags));
+      raw->ptr()->tags_ = new_tags;
     }
   }
 }
@@ -11609,175 +11595,25 @@
   StoreNonPointer(&raw_ptr()->load_state_, LibraryLayout::kLoaded);
 }
 
-static StringPtr MakeClassMetaName(Thread* thread,
-                                   Zone* zone,
-                                   const Class& cls) {
-  return Symbols::FromConcat(thread, Symbols::At(),
-                             String::Handle(zone, cls.Name()));
-}
-
-static StringPtr MakeFieldMetaName(Thread* thread,
-                                   Zone* zone,
-                                   const Field& field) {
-  const String& cname = String::Handle(
-      zone,
-      MakeClassMetaName(thread, zone, Class::Handle(zone, field.Origin())));
-  GrowableHandlePtrArray<const String> pieces(zone, 3);
-  pieces.Add(cname);
-  pieces.Add(Symbols::At());
-  pieces.Add(String::Handle(zone, field.name()));
-  return Symbols::FromConcatAll(thread, pieces);
-}
-
-static StringPtr MakeFunctionMetaName(Thread* thread,
-                                      Zone* zone,
-                                      const Function& func) {
-  const String& cname = String::Handle(
-      zone,
-      MakeClassMetaName(thread, zone, Class::Handle(zone, func.origin())));
-  GrowableHandlePtrArray<const String> pieces(zone, 3);
-  pieces.Add(cname);
-  pieces.Add(Symbols::At());
-  pieces.Add(String::Handle(zone, func.name()));
-  return Symbols::FromConcatAll(thread, pieces);
-}
-
-static StringPtr MakeTypeParameterMetaName(Thread* thread,
-                                           Zone* zone,
-                                           const TypeParameter& param) {
-  const String& cname = String::Handle(
-      zone,
-      MakeClassMetaName(thread, zone,
-                        Class::Handle(zone, param.parameterized_class())));
-  GrowableHandlePtrArray<const String> pieces(zone, 3);
-  pieces.Add(cname);
-  pieces.Add(Symbols::At());
-  pieces.Add(String::Handle(zone, param.name()));
-  return Symbols::FromConcatAll(thread, pieces);
-}
-
-void Library::AddMetadata(const Object& owner,
-                          const String& name,
-                          TokenPosition token_pos,
+void Library::AddMetadata(const Object& declaration,
                           intptr_t kernel_offset) const {
 #if defined(DART_PRECOMPILED_RUNTIME)
   UNREACHABLE();
 #else
-  Thread* thread = Thread::Current();
-  ASSERT(thread->IsMutatorThread());
-  Zone* zone = thread->zone();
-  const String& metaname = String::Handle(zone, Symbols::New(thread, name));
-  const Field& field =
-      Field::Handle(zone, Field::NewTopLevel(metaname,
-                                             false,  // is_final
-                                             false,  // is_const
-                                             false,  // is_late
-                                             owner, token_pos, token_pos));
-  field.SetFieldType(Object::dynamic_type());
-  field.set_is_reflectable(false);
-  field.set_kernel_offset(kernel_offset);
-  thread->isolate_group()->RegisterStaticField(field, Array::empty_array());
-
-  GrowableObjectArray& metadata =
-      GrowableObjectArray::Handle(zone, this->metadata());
-  metadata.Add(field, Heap::kOld);
+  MetadataMap map(metadata());
+  map.UpdateOrInsert(declaration, Smi::Handle(Smi::New(kernel_offset)));
+  set_metadata(map.Release());
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
-void Library::AddClassMetadata(const Class& cls,
-                               const Object& tl_owner,
-                               TokenPosition token_pos,
-                               intptr_t kernel_offset) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  // We use the toplevel class as the owner of a class's metadata field because
-  // a class's metadata is in scope of the library, not the class.
-  AddMetadata(tl_owner,
-              String::Handle(zone, MakeClassMetaName(thread, zone, cls)),
-              token_pos, kernel_offset);
-}
-
-void Library::AddFieldMetadata(const Field& field,
-                               TokenPosition token_pos,
-                               intptr_t kernel_offset) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  const auto& owner = Object::Handle(zone, field.RawOwner());
-  const auto& name =
-      String::Handle(zone, MakeFieldMetaName(thread, zone, field));
-  AddMetadata(owner, name, token_pos, kernel_offset);
-}
-
-void Library::AddFunctionMetadata(const Function& func,
-                                  TokenPosition token_pos,
-                                  intptr_t kernel_offset) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  const auto& owner = Object::Handle(zone, func.RawOwner());
-  const auto& name =
-      String::Handle(zone, MakeFunctionMetaName(thread, zone, func));
-  AddMetadata(owner, name, token_pos, kernel_offset);
-}
-
-void Library::AddTypeParameterMetadata(const TypeParameter& param,
-                                       TokenPosition token_pos) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  const auto& owner = Class::Handle(zone, param.parameterized_class());
-  const auto& name =
-      String::Handle(zone, MakeTypeParameterMetaName(thread, zone, param));
-  AddMetadata(owner, name, token_pos, 0);
-}
-
-void Library::AddLibraryMetadata(const Object& tl_owner,
-                                 TokenPosition token_pos,
-                                 intptr_t kernel_offset) const {
-  AddMetadata(tl_owner, Symbols::TopLevel(), token_pos, kernel_offset);
-}
-
-StringPtr Library::MakeMetadataName(const Object& obj) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  if (obj.IsClass()) {
-    return MakeClassMetaName(thread, zone, Class::Cast(obj));
-  } else if (obj.IsField()) {
-    return MakeFieldMetaName(thread, zone, Field::Cast(obj));
-  } else if (obj.IsFunction()) {
-    return MakeFunctionMetaName(thread, zone, Function::Cast(obj));
-  } else if (obj.IsLibrary()) {
-    return Symbols::TopLevel().raw();
-  } else if (obj.IsTypeParameter()) {
-    return MakeTypeParameterMetaName(thread, zone, TypeParameter::Cast(obj));
-  }
-  UNIMPLEMENTED();
-  return String::null();
-}
-
-FieldPtr Library::GetMetadataField(const String& metaname) const {
-  const GrowableObjectArray& metadata =
-      GrowableObjectArray::Handle(this->metadata());
-  Field& entry = Field::Handle();
-  String& entryname = String::Handle();
-  intptr_t num_entries = metadata.Length();
-  for (intptr_t i = 0; i < num_entries; i++) {
-    entry ^= metadata.At(i);
-    entryname = entry.name();
-    if (entryname.Equals(metaname)) {
-      return entry.raw();
-    }
-  }
-  return Field::null();
-}
-
-ObjectPtr Library::GetMetadata(const Object& obj) const {
+ObjectPtr Library::GetMetadata(const Object& declaration) const {
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Object::empty_array().raw();
 #else
-  if (!obj.IsClass() && !obj.IsField() && !obj.IsFunction() &&
-      !obj.IsLibrary() && !obj.IsTypeParameter()) {
-    UNREACHABLE();
-  }
-  if (obj.IsLibrary()) {
+  RELEASE_ASSERT(declaration.IsClass() || declaration.IsField() ||
+                 declaration.IsFunction() || declaration.IsLibrary() ||
+                 declaration.IsTypeParameter() || declaration.IsNamespace());
+  if (declaration.IsLibrary()) {
     // Ensure top-level class is loaded as it may contain annotations of
     // a library.
     const auto& cls = Class::Handle(toplevel_class());
@@ -11785,31 +11621,36 @@
       cls.EnsureDeclarationLoaded();
     }
   }
-  const String& metaname = String::Handle(MakeMetadataName(obj));
-  Field& field = Field::Handle(GetMetadataField(metaname));
-  if (field.IsNull()) {
+  Object& value = Object::Handle();
+  {
+    MetadataMap map(metadata());
+    value = map.GetOrNull(declaration);
+    set_metadata(map.Release());
+  }
+  if (value.IsNull()) {
     // There is no metadata for this object.
     return Object::empty_array().raw();
   }
-  Object& metadata = Object::Handle(field.StaticValue());
-  if (metadata.raw() == Object::empty_array().raw()) {
-    ASSERT(field.kernel_offset() > 0);
-    metadata = kernel::EvaluateMetadata(
-        field, /* is_annotations_offset = */ obj.IsLibrary());
-    if (metadata.IsArray() || metadata.IsNull()) {
-      ASSERT(metadata.raw() != Object::empty_array().raw());
-      if (!Compiler::IsBackgroundCompilation()) {
-        field.SetStaticValue(
-            metadata.IsNull() ? Object::null_array() : Array::Cast(metadata),
-            true);
-      }
+  if (!value.IsSmi()) {
+    // Metadata is already evaluated.
+    ASSERT(value.IsArray());
+    return value.raw();
+  }
+  intptr_t kernel_offset = Smi::Cast(value).Value();
+  ASSERT(kernel_offset > 0);
+  value = kernel::EvaluateMetadata(
+      *this, kernel_offset,
+      /* is_annotations_offset = */ declaration.IsLibrary() ||
+          declaration.IsNamespace());
+  if (value.IsArray() || value.IsNull()) {
+    ASSERT(value.raw() != Object::empty_array().raw());
+    if (!Compiler::IsBackgroundCompilation()) {
+      MetadataMap map(metadata());
+      map.UpdateOrInsert(declaration, value);
+      set_metadata(map.Release());
     }
   }
-  if (metadata.IsNull()) {
-    // Metadata field exists in order to reference extended metadata.
-    return Object::empty_array().raw();
-  }
-  return metadata.raw();
+  return value.raw();
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
@@ -12356,7 +12197,7 @@
     import = ImportAt(i);
     obj = import.Lookup(name);
     if (!obj.IsNull()) {
-      import_lib = import.library();
+      import_lib = import.target();
       import_lib_url = import_lib.url();
       if (found_obj.raw() != obj.raw()) {
         if (first_import_lib_url.IsNull() ||
@@ -12480,7 +12321,7 @@
   raw_ptr()->set_dependencies(deps.raw());
 }
 
-void Library::set_metadata(const GrowableObjectArray& value) const {
+void Library::set_metadata(const Array& value) const {
   raw_ptr()->set_metadata(value.raw());
 }
 
@@ -12489,7 +12330,7 @@
   if (import.IsNull()) {
     return Library::null();
   }
-  return import.library();
+  return import.target();
 }
 
 NamespacePtr Library::ImportAt(intptr_t index) const {
@@ -12511,7 +12352,7 @@
   for (int i = 0; i < imports.Length(); ++i) {
     ns = Namespace::RawCast(imports.At(i));
     if (ns.IsNull()) continue;
-    lib = ns.library();
+    lib = ns.target();
     url = lib.url();
     if (url.StartsWith(Symbols::DartExtensionScheme())) {
       native_import_count++;
@@ -12522,7 +12363,7 @@
   for (int i = 0, j = 0; i < imports.Length(); ++i) {
     ns = Namespace::RawCast(imports.At(i));
     if (ns.IsNull()) continue;
-    lib = ns.library();
+    lib = ns.target();
     url = lib.url();
     if (url.StartsWith(Symbols::DartExtensionScheme())) {
       new_imports.SetAt(j++, ns);
@@ -12640,10 +12481,11 @@
   result.raw_ptr()->set_resolved_names(Array::null());
   result.raw_ptr()->set_exported_names(Array::null());
   result.raw_ptr()->set_dictionary(Object::empty_array().raw());
-  GrowableObjectArray& list = GrowableObjectArray::Handle(zone);
-  list = GrowableObjectArray::New(4, Heap::kOld);
-  result.raw_ptr()->set_metadata(list.raw());
+  Array& array = Array::Handle(zone);
+  array = HashTables::New<MetadataMap>(4, Heap::kOld);
+  result.raw_ptr()->set_metadata(array.raw());
   result.raw_ptr()->set_toplevel_class(Class::null());
+  GrowableObjectArray& list = GrowableObjectArray::Handle(zone);
   list = GrowableObjectArray::New(Object::empty_array(), Heap::kOld);
   result.raw_ptr()->set_used_scripts(list.raw());
   result.raw_ptr()->set_imports(Object::empty_array().raw());
@@ -12673,9 +12515,9 @@
   if (import_core_lib) {
     const Library& core_lib = Library::Handle(zone, Library::CoreLibrary());
     ASSERT(!core_lib.IsNull());
-    const Namespace& ns = Namespace::Handle(
-        zone,
-        Namespace::New(core_lib, Object::null_array(), Object::null_array()));
+    const Namespace& ns =
+        Namespace::Handle(zone, Namespace::New(core_lib, Object::null_array(),
+                                               Object::null_array(), result));
     result.AddImport(ns);
   }
   return result.raw();
@@ -13300,7 +13142,7 @@
     const Array& imports = Array::Handle(this->imports());
     Namespace& import = Namespace::Handle();
     import ^= imports.At(index);
-    return import.library();
+    return import.target();
   }
   return Library::null();
 }
@@ -13370,59 +13212,8 @@
   return prefix.ToCString();
 }
 
-void Namespace::set_metadata_field(const Field& value) const {
-  raw_ptr()->set_metadata_field(value.raw());
-}
-
-void Namespace::AddMetadata(const Object& owner,
-                            TokenPosition token_pos,
-                            intptr_t kernel_offset) {
-  auto thread = Thread::Current();
-  auto zone = thread->zone();
-  auto isolate_group = thread->isolate_group();
-  ASSERT(Field::Handle(zone, metadata_field()).IsNull());
-  Field& field =
-      Field::Handle(zone, Field::NewTopLevel(Symbols::TopLevel(),
-                                             false,  // is_final
-                                             false,  // is_const
-                                             false,  // is_late
-                                             owner, token_pos, token_pos));
-  field.set_is_reflectable(false);
-  field.SetFieldType(Object::dynamic_type());
-  field.set_kernel_offset(kernel_offset);
-  isolate_group->RegisterStaticField(field, Array::empty_array());
-  set_metadata_field(field);
-}
-
-ObjectPtr Namespace::GetMetadata() const {
-#if defined(DART_PRECOMPILED_RUNTIME)
-  return Object::empty_array().raw();
-#else
-  Field& field = Field::Handle(metadata_field());
-  if (field.IsNull()) {
-    // There is no metadata for this object.
-    return Object::empty_array().raw();
-  }
-  Object& metadata = Object::Handle();
-  metadata = field.StaticValue();
-  if (field.StaticValue() == Object::empty_array().raw()) {
-    if (field.kernel_offset() > 0) {
-      metadata =
-          kernel::EvaluateMetadata(field, /* is_annotations_offset = */ true);
-    } else {
-      UNREACHABLE();
-    }
-    if (metadata.IsArray()) {
-      ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw());
-      field.SetStaticValue(Array::Cast(metadata), true);
-    }
-  }
-  return metadata.raw();
-#endif  // defined(DART_PRECOMPILED_RUNTIME)
-}
-
 const char* Namespace::ToCString() const {
-  const Library& lib = Library::Handle(library());
+  const Library& lib = Library::Handle(target());
   return OS::SCreate(Thread::Current()->zone(), "Namespace for library '%s'",
                      lib.ToCString());
 }
@@ -13476,7 +13267,7 @@
 ObjectPtr Namespace::Lookup(const String& name,
                             ZoneGrowableArray<intptr_t>* trail) const {
   Zone* zone = Thread::Current()->zone();
-  const Library& lib = Library::Handle(zone, library());
+  const Library& lib = Library::Handle(zone, target());
 
   if (trail != NULL) {
     // Look for cycle in reexport graph.
@@ -13537,15 +13328,17 @@
   return static_cast<NamespacePtr>(raw);
 }
 
-NamespacePtr Namespace::New(const Library& library,
+NamespacePtr Namespace::New(const Library& target,
                             const Array& show_names,
-                            const Array& hide_names) {
+                            const Array& hide_names,
+                            const Library& owner) {
   ASSERT(show_names.IsNull() || (show_names.Length() > 0));
   ASSERT(hide_names.IsNull() || (hide_names.Length() > 0));
   const Namespace& result = Namespace::Handle(Namespace::New());
-  result.raw_ptr()->set_library(library.raw());
+  result.raw_ptr()->set_target(target.raw());
   result.raw_ptr()->set_show_names(show_names.raw());
   result.raw_ptr()->set_hide_names(hide_names.raw());
+  result.raw_ptr()->set_owner(owner.raw());
   return result.raw();
 }
 
@@ -23228,15 +23021,7 @@
 void Array::MakeImmutable() const {
   if (IsImmutable()) return;
   ASSERT(!IsCanonical());
-  NoSafepointScope no_safepoint;
-  uword tags = raw_ptr()->tags_;
-  uword old_tags;
-  do {
-    old_tags = tags;
-    uword new_tags =
-        ObjectLayout::ClassIdTag::update(kImmutableArrayCid, old_tags);
-    tags = CompareAndSwapTags(old_tags, new_tags);
-  } while (tags != old_tags);
+  raw_ptr()->SetClassId(kImmutableArrayCid);
 }
 
 const char* Array::ToCString() const {
@@ -23293,25 +23078,22 @@
   // that it can be traversed over successfully during garbage collection.
   Object::MakeUnusedSpaceTraversable(array, old_size, new_size);
 
-  // For the heap to remain walkable by the sweeper, it must observe the
-  // creation of the filler object no later than the new length of the array.
-  std::atomic_thread_fence(std::memory_order_release);
-
   // Update the size in the header field and length of the array object.
-  uword tags = array.raw_ptr()->tags_;
-  ASSERT(kArrayCid == ObjectLayout::ClassIdTag::decode(tags));
-  uword old_tags;
+  // These release operations are balanced by acquire operations in the
+  // concurrent sweeper.
+  uword old_tags = array.raw_ptr()->tags_;
+  uword new_tags;
+  ASSERT(kArrayCid == ObjectLayout::ClassIdTag::decode(old_tags));
   do {
-    old_tags = tags;
-    uword new_tags = ObjectLayout::SizeTag::update(new_size, old_tags);
-    tags = CompareAndSwapTags(old_tags, new_tags);
-  } while (tags != old_tags);
+    new_tags = ObjectLayout::SizeTag::update(new_size, old_tags);
+  } while (!array.raw_ptr()->tags_.compare_exchange_weak(
+      old_tags, new_tags, std::memory_order_release));
 
   // Between the CAS of the header above and the SetLength below, the array is
   // temporarily in an inconsistent state. The header is considered the
   // overriding source of object size by ObjectLayout::Size, but the ASSERTs in
-  // ObjectLayout::SizeFromClass must handle this special case.
-  array.SetLengthIgnoreRace(new_len);
+  // ObjectLayout::HeapSizeFromClass must handle this special case.
+  array.SetLengthRelease(new_len);
 }
 
 ArrayPtr Array::MakeFixedLength(const GrowableObjectArray& growable_array,
@@ -25089,9 +24871,13 @@
   const Library& lib = Library::Handle(cls.library());
   switch (kind()) {
     case FunctionLayout::kRegularFunction:
-    case FunctionLayout::kImplicitClosureFunction:
       return dart::VerifyEntryPoint(lib, *this, *this,
                                     {EntryPointPragma::kGetterOnly});
+    case FunctionLayout::kImplicitClosureFunction: {
+      const Function& parent = Function::Handle(parent_function());
+      return dart::VerifyEntryPoint(lib, parent, parent,
+                                    {EntryPointPragma::kGetterOnly});
+    }
     default:
       UNREACHABLE();
   }
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index b729ba3..8ea8ae0 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -290,10 +290,6 @@
   ObjectPtr raw() const { return raw_; }
   void operator=(ObjectPtr value) { initializeHandle(this, value); }
 
-  uword CompareAndSwapTags(uword old_tags, uword new_tags) const {
-    raw()->ptr()->tags_.StrongCAS(old_tags, new_tags);
-    return old_tags;
-  }
   bool IsCanonical() const { return raw()->ptr()->IsCanonical(); }
   void SetCanonical() const { raw()->ptr()->SetCanonical(); }
   void ClearCanonical() const { raw()->ptr()->ClearCanonical(); }
@@ -645,9 +641,6 @@
   void StoreSmi(SmiPtr const* addr, SmiPtr value) const {
     raw()->ptr()->StoreSmi(addr, value);
   }
-  void StoreSmiIgnoreRace(SmiPtr const* addr, SmiPtr value) const {
-    raw()->ptr()->StoreSmiIgnoreRace(addr, value);
-  }
 
   template <typename FieldType>
   void StoreSimd128(const FieldType* addr, simd128_value_t value) const {
@@ -4738,22 +4731,8 @@
 
   void AddExport(const Namespace& ns) const;
 
-  void AddClassMetadata(const Class& cls,
-                        const Object& tl_owner,
-                        TokenPosition token_pos,
-                        intptr_t kernel_offset) const;
-  void AddFieldMetadata(const Field& field,
-                        TokenPosition token_pos,
-                        intptr_t kernel_offset) const;
-  void AddFunctionMetadata(const Function& func,
-                           TokenPosition token_pos,
-                           intptr_t kernel_offset) const;
-  void AddLibraryMetadata(const Object& tl_owner,
-                          TokenPosition token_pos,
-                          intptr_t kernel_offset) const;
-  void AddTypeParameterMetadata(const TypeParameter& param,
-                                TokenPosition token_pos) const;
-  ObjectPtr GetMetadata(const Object& obj) const;
+  void AddMetadata(const Object& declaration, intptr_t kernel_offset) const;
+  ObjectPtr GetMetadata(const Object& declaration) const;
 
   // Tries to finds a @pragma annotation on [object].
   //
@@ -4978,8 +4957,8 @@
   void set_flags(uint8_t flags) const;
   bool HasExports() const;
   ArrayPtr loaded_scripts() const { return raw_ptr()->loaded_scripts(); }
-  GrowableObjectArrayPtr metadata() const { return raw_ptr()->metadata(); }
-  void set_metadata(const GrowableObjectArray& value) const;
+  ArrayPtr metadata() const { return raw_ptr()->metadata(); }
+  void set_metadata(const Array& value) const;
   ArrayPtr dictionary() const { return raw_ptr()->dictionary(); }
   void InitClassDictionary() const;
 
@@ -5007,13 +4986,6 @@
 
   void AllocatePrivateKey() const;
 
-  StringPtr MakeMetadataName(const Object& obj) const;
-  FieldPtr GetMetadataField(const String& metaname) const;
-  void AddMetadata(const Object& owner,
-                   const String& name,
-                   TokenPosition token_pos,
-                   intptr_t kernel_offset) const;
-
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Library, Object);
 
   friend class Bootstrap;
@@ -5031,14 +5003,10 @@
 // the show/hide combinators.
 class Namespace : public Object {
  public:
-  LibraryPtr library() const { return raw_ptr()->library(); }
+  LibraryPtr target() const { return raw_ptr()->target(); }
   ArrayPtr show_names() const { return raw_ptr()->show_names(); }
   ArrayPtr hide_names() const { return raw_ptr()->hide_names(); }
-
-  void AddMetadata(const Object& owner,
-                   TokenPosition token_pos,
-                   intptr_t kernel_offset = 0);
-  ObjectPtr GetMetadata() const;
+  LibraryPtr owner() const { return raw_ptr()->owner(); }
 
   static intptr_t InstanceSize() {
     return RoundedAllocationSize(sizeof(NamespaceLayout));
@@ -5050,14 +5018,12 @@
 
   static NamespacePtr New(const Library& library,
                           const Array& show_names,
-                          const Array& hide_names);
+                          const Array& hide_names,
+                          const Library& owner);
 
  private:
   static NamespacePtr New();
 
-  FieldPtr metadata_field() const { return raw_ptr()->metadata_field(); }
-  void set_metadata_field(const Field& value) const;
-
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Namespace, Object);
   friend class Class;
   friend class Precompiler;
@@ -8265,6 +8231,13 @@
   bool IsFunctionTypeParameter() const {
     return parameterized_function() != Function::null();
   }
+  ObjectPtr Owner() const {
+    if (IsClassTypeParameter()) {
+      return parameterized_class();
+    } else {
+      return parameterized_function();
+    }
+  }
 
   static intptr_t parameterized_class_id_offset() {
     return OFFSET_OF(TypeParameterLayout, parameterized_class_id_);
@@ -9640,8 +9613,8 @@
   void SetLength(intptr_t value) const {
     raw_ptr()->set_length(Smi::New(value));
   }
-  void SetLengthIgnoreRace(intptr_t value) const {
-    raw_ptr()->set_length_ignore_race(Smi::New(value));
+  void SetLengthRelease(intptr_t value) const {
+    raw_ptr()->set_length<std::memory_order_release>(Smi::New(value));
   }
 
   template <typename type, std::memory_order order = std::memory_order_relaxed>
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 08bfa23..1dfe634 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -519,7 +519,7 @@
       jsdep.AddProperty("isDeferred", false);
       jsdep.AddProperty("isExport", false);
       jsdep.AddProperty("isImport", true);
-      target = ns.library();
+      target = ns.target();
       jsdep.AddProperty("target", target);
     }
 
@@ -533,7 +533,7 @@
       jsdep.AddProperty("isDeferred", false);
       jsdep.AddProperty("isExport", true);
       jsdep.AddProperty("isImport", false);
-      target = ns.library();
+      target = ns.target();
       jsdep.AddProperty("target", target);
     }
 
@@ -559,7 +559,7 @@
             prefix_name = prefix.name();
             ASSERT(!prefix_name.IsNull());
             jsdep.AddProperty("prefix", prefix_name.ToCString());
-            target = ns.library();
+            target = ns.target();
             jsdep.AddProperty("target", target);
           }
         }
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 5f87bb1..64adf66 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -145,7 +145,8 @@
     case kArrayCid:
     case kImmutableArrayCid: {
       const ArrayPtr raw_array = static_cast<const ArrayPtr>(this);
-      intptr_t array_length = Smi::Value(raw_array->ptr()->length_);
+      intptr_t array_length =
+          Smi::Value(raw_array->ptr()->length<std::memory_order_acquire>());
       instance_size = Array::InstanceSize(array_length);
       break;
     }
@@ -539,7 +540,7 @@
 VARIABLE_VISITOR(LocalVarDescriptors, raw_obj->ptr()->num_entries_)
 VARIABLE_VISITOR(ExceptionHandlers, raw_obj->ptr()->num_entries_)
 VARIABLE_VISITOR(Context, raw_obj->ptr()->num_variables_)
-VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->ptr()->length_))
+VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->ptr()->length()))
 VARIABLE_COMPRESSED_VISITOR(
     TypedData,
     TypedData::ElementSizeInBytes(raw_obj->GetClassId()) *
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index bc02ac3..b6e04fc 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -226,14 +226,12 @@
       return tags;
     }
 
-    bool StrongCAS(uword old_tags, uword new_tags) {
-      return tags_.compare_exchange_strong(old_tags, new_tags,
-                                           std::memory_order_relaxed);
-    }
+    uword load(std::memory_order order) const { return tags_.load(order); }
 
-    bool WeakCAS(uword old_tags, uword new_tags) {
-      return tags_.compare_exchange_weak(old_tags, new_tags,
-                                         std::memory_order_relaxed);
+    bool compare_exchange_weak(uword old_tags,
+                               uword new_tags,
+                               std::memory_order order) {
+      return tags_.compare_exchange_weak(old_tags, new_tags, order);
     }
 
     template <class TagBitField>
@@ -304,6 +302,7 @@
 
   // Support for GC marking bit. Marked objects are either grey (not yet
   // visited) or black (already visited).
+  static bool IsMarked(uword tags) { return !OldAndNotMarkedBit::decode(tags); }
   bool IsMarked() const {
     ASSERT(IsOldObject());
     return !tags_.Read<OldAndNotMarkedBit>();
@@ -529,7 +528,8 @@
 
   intptr_t HeapSizeFromClass(uword tags) const;
 
-  void SetClassId(intptr_t new_cid) {
+  void SetClassId(intptr_t new_cid) { tags_.Update<ClassIdTag>(new_cid); }
+  void SetClassIdUnsynchronized(intptr_t new_cid) {
     tags_.UpdateUnsynchronized<ClassIdTag>(new_cid);
   }
 
@@ -665,12 +665,6 @@
     reinterpret_cast<std::atomic<SmiPtr>*>(const_cast<SmiPtr*>(addr))
         ->store(value, order);
   }
-  NO_SANITIZE_THREAD
-  void StoreSmiIgnoreRace(SmiPtr const* addr, SmiPtr value) {
-    // Can't use Contains, as array length is initialized through this method.
-    ASSERT(reinterpret_cast<uword>(addr) >= ObjectLayout::ToAddr(this));
-    *const_cast<SmiPtr*>(addr) = value;
-  }
 
   friend class StoreBufferUpdateVisitor;  // RememberCard
   void RememberCard(ObjectPtr const* slot);
@@ -688,6 +682,7 @@
   friend class FreeListElement;
   friend class Function;
   friend class GCMarker;
+  friend class GCSweeper;
   friend class ExternalTypedData;
   friend class ForwardList;
   friend class GrowableObjectArray;  // StorePointer
@@ -785,10 +780,6 @@
     ASSERT(!value.IsHeapObject());                                             \
     StoreSmi<order>(&name##_, value);                                          \
   }                                                                            \
-  void set_##name##_ignore_race(type value) {                                  \
-    ASSERT(!value.IsHeapObject());                                             \
-    StoreSmiIgnoreRace(&name##_, value);                                       \
-  }                                                                            \
                                                                                \
  protected:                                                                    \
   type name##_;
@@ -1409,8 +1400,7 @@
   POINTER_FIELD(StringPtr, url)
   POINTER_FIELD(StringPtr, private_key)
   POINTER_FIELD(ArrayPtr, dictionary)  // Top-level names in this library.
-  POINTER_FIELD(GrowableObjectArrayPtr,
-                metadata)  // Metadata on classes, methods etc.
+  POINTER_FIELD(ArrayPtr, metadata)    // Metadata on classes, methods etc.
   POINTER_FIELD(ClassPtr,
                 toplevel_class)  // Class containing top-level elements.
   POINTER_FIELD(GrowableObjectArrayPtr, used_scripts)
@@ -1462,14 +1452,12 @@
 class NamespaceLayout : public ObjectLayout {
   RAW_HEAP_OBJECT_IMPLEMENTATION(Namespace);
 
-  VISIT_FROM(ObjectPtr, library)
-  POINTER_FIELD(LibraryPtr, library)   // library with name dictionary.
+  VISIT_FROM(ObjectPtr, target)
+  POINTER_FIELD(LibraryPtr, target)    // library with name dictionary.
   POINTER_FIELD(ArrayPtr, show_names)  // list of names that are exported.
   POINTER_FIELD(ArrayPtr, hide_names)  // list of names that are hidden.
-  POINTER_FIELD(FieldPtr,
-                metadata_field)  // remembers the token pos of metadata if any,
-                                 // and the metadata values if computed.
-  VISIT_TO(ObjectPtr, metadata_field)
+  POINTER_FIELD(LibraryPtr, owner)
+  VISIT_TO(ObjectPtr, owner)
   ObjectPtr* to_snapshot(Snapshot::Kind kind) { return to(); }
 };
 
diff --git a/runtime/vm/raw_object_fields.cc b/runtime/vm/raw_object_fields.cc
index cf5625b..103611e 100644
--- a/runtime/vm/raw_object_fields.cc
+++ b/runtime/vm/raw_object_fields.cc
@@ -75,10 +75,10 @@
   F(Library, resolved_names_)                                                  \
   F(Library, exported_names_)                                                  \
   F(Library, loaded_scripts_)                                                  \
-  F(Namespace, library_)                                                       \
+  F(Namespace, target_)                                                        \
   F(Namespace, show_names_)                                                    \
   F(Namespace, hide_names_)                                                    \
-  F(Namespace, metadata_field_)                                                \
+  F(Namespace, owner_)                                                         \
   F(KernelProgramInfo, string_offsets_)                                        \
   F(KernelProgramInfo, string_data_)                                           \
   F(KernelProgramInfo, canonical_names_)                                       \
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index 665d37b..0f71c57 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -21,6 +21,7 @@
   "bootstrap_natives.h",
   "bss_relocs.cc",
   "bss_relocs.h",
+  "canonical_tables.cc",
   "canonical_tables.h",
   "class_finalizer.cc",
   "class_finalizer.h",
diff --git a/tools/VERSION b/tools/VERSION
index 2f20bdc..c30eba8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 129
+PRERELEASE 130
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 3ac4fe4..4b3cf6e 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -1436,7 +1436,7 @@
           "name": "vm tests",
           "arguments": [
             "-ndartk-${sanitizer}-${system}-${mode}-${arch}",
-            "vm"
+            "vm/cc"
           ]
         }
       ]
@@ -1490,7 +1490,7 @@
           "name": "vm tests",
           "arguments": [
             "-ndartkp-${sanitizer}-${system}-${mode}-${arch}",
-            "vm"
+            "vm/cc"
           ]
         }
       ]
