diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4a229d0..3a1ba65 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -132,7 +132,7 @@
     }
     ```
 
-## 2.13.0
+## 2.13.0 - 2021-05-18
 
 ### Language
 
diff --git a/DEPS b/DEPS
index 65c748d..835c510 100644
--- a/DEPS
+++ b/DEPS
@@ -710,20 +710,4 @@
     'action': ['python3', 'sdk/build/vs_toolchain.py', 'update'],
     'condition': 'checkout_win'
   },
-  {
-    "name": "7zip",
-    "pattern": ".",
-    "action": [
-      "download_from_google_storage",
-      "--no_auth",
-      "--no_resume",
-      "--bucket",
-      "dart-dependencies",
-      "--platform=win32",
-      "--extract",
-      "-s",
-      Var('dart_root') + "/third_party/7zip.tar.gz.sha1",
-    ],
-    'condition': 'checkout_win'
-  },
 ]
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index f380214..7321d6b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -25,6 +25,7 @@
       ExperimentalFeatures.nonfunction_type_aliases,
   EnableString.set_literals: ExperimentalFeatures.set_literals,
   EnableString.spread_collections: ExperimentalFeatures.spread_collections,
+  EnableString.test_experiment: ExperimentalFeatures.test_experiment,
   EnableString.triple_shift: ExperimentalFeatures.triple_shift,
   EnableString.value_class: ExperimentalFeatures.value_class,
   EnableString.variance: ExperimentalFeatures.variance,
@@ -66,6 +67,9 @@
   /// String to enable the experiment "spread-collections"
   static const String spread_collections = 'spread-collections';
 
+  /// String to enable the experiment "test-experiment"
+  static const String test_experiment = 'test-experiment';
+
   /// String to enable the experiment "triple-shift"
   static const String triple_shift = 'triple-shift';
 
@@ -190,8 +194,19 @@
     releaseVersion: Version.parse('2.0.0'),
   );
 
-  static final triple_shift = ExperimentalFeature(
+  static final test_experiment = ExperimentalFeature(
     index: 11,
+    enableString: EnableString.test_experiment,
+    isEnabledByDefault: IsEnabledByDefault.test_experiment,
+    isExpired: IsExpired.test_experiment,
+    documentation:
+        'Has no effect. Can be used for testing the --enable-experiment command line functionality.',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
+  static final triple_shift = ExperimentalFeature(
+    index: 12,
     enableString: EnableString.triple_shift,
     isEnabledByDefault: IsEnabledByDefault.triple_shift,
     isExpired: IsExpired.triple_shift,
@@ -201,7 +216,7 @@
   );
 
   static final value_class = ExperimentalFeature(
-    index: 12,
+    index: 13,
     enableString: EnableString.value_class,
     isEnabledByDefault: IsEnabledByDefault.value_class,
     isExpired: IsExpired.value_class,
@@ -211,7 +226,7 @@
   );
 
   static final variance = ExperimentalFeature(
-    index: 13,
+    index: 14,
     enableString: EnableString.variance,
     isEnabledByDefault: IsEnabledByDefault.variance,
     isExpired: IsExpired.variance,
@@ -257,6 +272,9 @@
   /// Default state of the experiment "spread-collections"
   static const bool spread_collections = true;
 
+  /// Default state of the experiment "test-experiment"
+  static const bool test_experiment = false;
+
   /// Default state of the experiment "triple-shift"
   static const bool triple_shift = true;
 
@@ -304,6 +322,9 @@
   /// Expiration status of the experiment "spread-collections"
   static const bool spread_collections = true;
 
+  /// Expiration status of the experiment "test-experiment"
+  static const bool test_experiment = false;
+
   /// Expiration status of the experiment "triple-shift"
   static const bool triple_shift = false;
 
@@ -354,6 +375,9 @@
   bool get spread_collections =>
       isEnabled(ExperimentalFeatures.spread_collections);
 
+  /// Current state for the flag "test-experiment"
+  bool get test_experiment => isEnabled(ExperimentalFeatures.test_experiment);
+
   /// Current state for the flag "triple-shift"
   bool get triple_shift => isEnabled(ExperimentalFeatures.triple_shift);
 
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 61af881..67045fb 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -6265,10 +6265,6 @@
   PrefixElementImpl(String name, int nameOffset, {Reference? reference})
       : super(name, nameOffset, reference: reference);
 
-  PrefixElementImpl.forLinkedNode(
-      ElementImpl enclosing, Reference reference, SimpleIdentifier linkedNode)
-      : super.forLinkedNode(enclosing, reference, linkedNode);
-
   @override
   String get displayName => name;
 
@@ -6281,21 +6277,10 @@
 
   @override
   String get name {
-    if (linkedNode != null) {
-      return reference!.name;
-    }
     return super.name!;
   }
 
   @override
-  int get nameOffset {
-    if (linkedNode != null) {
-      return (linkedNode as SimpleIdentifier).offset;
-    }
-    return super.nameOffset;
-  }
-
-  @override
   Scope get scope => _scope ??= PrefixScope(enclosingElement, this);
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index c6cb319..c91e88e 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -406,9 +406,7 @@
   }
 
   @override
-  void visitExportDirective(ast.ExportDirective node) {
-    node as ast.ExportDirectiveImpl;
-
+  void visitExportDirective(covariant ast.ExportDirectiveImpl node) {
     var element = ExportElementImpl(node.keyword.offset);
     element.combinators = _buildCombinators(node.combinators);
     element.exportedLibrary = _selectLibrary(node);
@@ -420,9 +418,7 @@
   }
 
   @override
-  void visitImportDirective(ast.ImportDirective node) {
-    node as ast.ImportDirectiveImpl;
-
+  void visitImportDirective(covariant ast.ImportDirectiveImpl node) {
     var element = ImportElementImpl(node.keyword.offset);
     element.combinators = _buildCombinators(node.combinators);
     element.importedLibrary = _selectLibrary(node);
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 7288f48..74f994c 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -79,6 +79,10 @@
   static const String noNativeNullAssertions = '--no-native-null-assertions';
 
   static const String noSourceMaps = '--no-source-maps';
+
+  static const String omitLateNames = '--omit-late-names';
+  static const String noOmitLateNames = '--no-omit-late-names';
+
   static const String preserveUris = '--preserve-uris';
   static const String printLegacyStars = '--debug-print-legacy-stars';
   static const String showPackageWarnings = '--show-package-warnings';
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 1dcfde0..e193c1c 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -512,6 +512,8 @@
     new OptionHandler(Flags.initializingFormalAccess, ignoreOption),
     new OptionHandler(Flags.minify, passThrough),
     new OptionHandler(Flags.noMinify, passThrough),
+    new OptionHandler(Flags.omitLateNames, passThrough),
+    new OptionHandler(Flags.noOmitLateNames, passThrough),
     new OptionHandler(Flags.preserveUris, ignoreOption),
     new OptionHandler(Flags.printLegacyStars, passThrough),
     new OptionHandler('--force-strip=.*', setStrip),
@@ -1122,6 +1124,11 @@
   --no-source-maps
     Do not generate a source map file.
 
+  --omit-late-names
+    Do not include names of late variables in error messages. This allows
+    dart2js to generate smaller code by removing late variable names from the
+    generated JavaScript.
+
   -O<0,1,2,3,4>
     Controls optimizations that can help reduce code-size and improve
     performance of the generated code for deployment.
@@ -1149,6 +1156,7 @@
        Equivalent to calling dart2js with these extra flags:
         --minify
         --lax-runtime-type-to-string
+        --omit-late-names
 
     -O3
        Enables optimizations that respect the language semantics only on
diff --git a/pkg/compiler/lib/src/ir/scope_visitor.dart b/pkg/compiler/lib/src/ir/scope_visitor.dart
index 2a6ddc4..075e6aa 100644
--- a/pkg/compiler/lib/src/ir/scope_visitor.dart
+++ b/pkg/compiler/lib/src/ir/scope_visitor.dart
@@ -983,17 +983,20 @@
   @override
   EvaluationComplexity visitConstructorInvocation(
       ir.ConstructorInvocation node) {
+    ir.Constructor target = node.target;
+    ir.Class enclosingClass = target.enclosingClass;
+
     // TODO(45681): Investigate if other initializers should be made eager.
 
-    // Lazily invoking the `_Cell` constructor pessimizes certain uses of late
-    // variables, so we ensure it gets called eagerly.
-    if (node.target == _coreTypes.cellConstructor) {
+    // Lazily constructing cells pessimizes certain uses of late variables, so
+    // we ensure they get constructed eagerly.
+    if (enclosingClass == _coreTypes.cellClass) {
       return EvaluationComplexity.eager();
     }
 
     if (node.arguments.types.isNotEmpty) {
       visitNodesInContext(node.arguments.types,
-          new VariableUse.constructorTypeArgument(node.target));
+          new VariableUse.constructorTypeArgument(target));
     }
     visitArguments(node.arguments);
     return node.isConst
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index a048dea..eb08931 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -77,9 +77,11 @@
   @override
   final String name;
 
+  final bool omitLateNames;
+
   Map<String, ir.Class> _nativeClasses;
 
-  Dart2jsTarget(this.name, this.flags);
+  Dart2jsTarget(this.name, this.flags, {this.omitLateNames = false});
 
   @override
   bool get enableNoSuchMethodForwarders => true;
@@ -158,7 +160,8 @@
               _nativeClasses)
           .visitLibrary(library);
     }
-    lowering.transformLibraries(libraries, coreTypes, hierarchy);
+    lowering.transformLibraries(libraries, coreTypes, hierarchy,
+        omitLateNames: omitLateNames);
     logger?.call("Lowering transformations performed");
   }
 
diff --git a/pkg/compiler/lib/src/kernel/loader.dart b/pkg/compiler/lib/src/kernel/loader.dart
index 99a37c5..a348813 100644
--- a/pkg/compiler/lib/src/kernel/loader.dart
+++ b/pkg/compiler/lib/src/kernel/loader.dart
@@ -136,7 +136,8 @@
         }
       } else {
         bool verbose = false;
-        Target target = Dart2jsTarget(targetName, TargetFlags());
+        Target target = Dart2jsTarget(targetName, TargetFlags(),
+            omitLateNames: _options.omitLateNames);
         fe.FileSystem fileSystem = CompilerFileSystem(_compilerInput);
         fe.Verbosity verbosity = _options.verbosity;
         fe.DiagnosticMessageHandler onDiagnostic =
diff --git a/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart b/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
index ebac6bb..5b9b6e4 100644
--- a/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
+++ b/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
@@ -6,16 +6,16 @@
 import 'package:kernel/core_types.dart';
 import 'package:kernel/type_algebra.dart';
 
-bool _shouldLowerVariable(VariableDeclaration node) => node.isLate;
+bool _shouldLowerVariable(VariableDeclaration variable) => variable.isLate;
 
-bool _shouldLowerUninitializedVariable(VariableDeclaration node) =>
-    _shouldLowerVariable(node) && node.initializer == null;
+bool _shouldLowerUninitializedVariable(VariableDeclaration variable) =>
+    _shouldLowerVariable(variable) && variable.initializer == null;
 
-bool _shouldLowerInitializedVariable(VariableDeclaration node) =>
-    _shouldLowerVariable(node) && node.initializer != null;
+bool _shouldLowerInitializedVariable(VariableDeclaration variable) =>
+    _shouldLowerVariable(variable) && variable.initializer != null;
 
-bool _shouldLowerField(Field node) =>
-    node.isLate && node.isStatic && node.initializer == null;
+bool _shouldLowerField(Field field) =>
+    field.isLate && field.isStatic && field.initializer == null;
 
 class _Reader {
   final Procedure _procedure;
@@ -30,25 +30,32 @@
 class LateLowering {
   final CoreTypes _coreTypes;
 
+  final bool omitLateNames;
+
   final _Reader _readLocal;
   final _Reader _readField;
   final _Reader _readInitialized;
   final _Reader _readInitializedFinal;
 
-  // TODO(fishythefish): Remove cells when exiting their scope.
-  final Map<VariableDeclaration, VariableDeclaration> _variableCells = {};
+  // Each map contains the mapping from late local variables to cells for a
+  // given function scope.
+  final List<Map<VariableDeclaration, VariableDeclaration>> _variableCells = [];
+
   final Map<Field, Field> _fieldCells = {};
 
   Member _contextMember;
 
-  LateLowering(this._coreTypes)
-      : _readLocal = _Reader(_coreTypes.cellReadLocal),
+  LateLowering(this._coreTypes, {this.omitLateNames})
+      : assert(omitLateNames != null),
+        _readLocal = _Reader(_coreTypes.cellReadLocal),
         _readField = _Reader(_coreTypes.cellReadField),
         _readInitialized = _Reader(_coreTypes.initializedCellRead),
         _readInitializedFinal = _Reader(_coreTypes.initializedCellReadFinal);
 
-  void transformAdditionalExports(Library node) {
-    List<Reference> additionalExports = node.additionalExports;
+  Nullability get nonNullable => _contextMember.enclosingLibrary.nonNullable;
+
+  void transformAdditionalExports(Library library) {
+    List<Reference> additionalExports = library.additionalExports;
     Set<Reference> newExports = {};
     additionalExports.removeWhere((Reference reference) {
       Field cell = _fieldCells[reference.node];
@@ -59,17 +66,43 @@
     additionalExports.addAll(newExports);
   }
 
-  ConstructorInvocation _callCellConstructor(int fileOffset) =>
+  ConstructorInvocation _callCellConstructor(Expression name, int fileOffset) =>
+      omitLateNames
+          ? _callCellUnnamedConstructor(fileOffset)
+          : _callCellNamedConstructor(name, fileOffset);
+
+  ConstructorInvocation _callCellUnnamedConstructor(int fileOffset) =>
       ConstructorInvocation(_coreTypes.cellConstructor,
           Arguments.empty()..fileOffset = fileOffset)
         ..fileOffset = fileOffset;
 
+  ConstructorInvocation _callCellNamedConstructor(
+          Expression name, int fileOffset) =>
+      ConstructorInvocation(_coreTypes.cellNamedConstructor,
+          Arguments([name])..fileOffset = fileOffset)
+        ..fileOffset = fileOffset;
+
   ConstructorInvocation _callInitializedCellConstructor(
+          Expression name, Expression initializer, int fileOffset) =>
+      omitLateNames
+          ? _callInitializedCellUnnamedConstructor(initializer, fileOffset)
+          : _callInitializedCellNamedConstructor(name, initializer, fileOffset);
+
+  ConstructorInvocation _callInitializedCellUnnamedConstructor(
           Expression initializer, int fileOffset) =>
       ConstructorInvocation(_coreTypes.initializedCellConstructor,
           Arguments([initializer])..fileOffset = fileOffset)
         ..fileOffset = fileOffset;
 
+  ConstructorInvocation _callInitializedCellNamedConstructor(
+          Expression name, Expression initializer, int fileOffset) =>
+      ConstructorInvocation(_coreTypes.initializedCellNamedConstructor,
+          Arguments([name, initializer])..fileOffset = fileOffset)
+        ..fileOffset = fileOffset;
+
+  StringLiteral _nameLiteral(String name, int fileOffset) =>
+      StringLiteral(name ?? '')..fileOffset = fileOffset;
+
   InstanceInvocation _callReader(
       _Reader reader, Expression receiver, DartType type, int fileOffset) {
     Procedure procedure = reader._procedure;
@@ -92,17 +125,51 @@
           interfaceTarget: _setter)
         ..fileOffset = fileOffset;
 
+  void enterFunction() {
+    _variableCells.add(null);
+  }
+
+  void exitFunction() {
+    _variableCells.removeLast();
+  }
+
+  VariableDeclaration _lookupVariableCell(VariableDeclaration variable) {
+    assert(_shouldLowerVariable(variable));
+    for (final scope in _variableCells) {
+      if (scope == null) continue;
+      final cell = scope[variable];
+      if (cell != null) return cell;
+    }
+    return null;
+  }
+
+  VariableDeclaration _addToCurrentScope(
+      VariableDeclaration variable, VariableDeclaration cell) {
+    assert(_shouldLowerVariable(variable));
+    assert(_lookupVariableCell(variable) == null);
+    return (_variableCells.last ??= {})[variable] = cell;
+  }
+
+  VariableDeclaration _variableCell(VariableDeclaration variable) {
+    assert(_shouldLowerVariable(variable));
+    final cell = _lookupVariableCell(variable);
+    if (cell != null) return cell;
+    return variable.initializer == null
+        ? _uninitializedVariableCell(variable)
+        : _initializedVariableCell(variable);
+  }
+
   VariableDeclaration _uninitializedVariableCell(VariableDeclaration variable) {
     assert(_shouldLowerUninitializedVariable(variable));
-    return _variableCells.putIfAbsent(variable, () {
-      int fileOffset = variable.fileOffset;
-      return VariableDeclaration(variable.name,
-          initializer: _callCellConstructor(fileOffset),
-          type: InterfaceType(_coreTypes.cellClass,
-              _contextMember.enclosingLibrary.nonNullable),
-          isFinal: true)
-        ..fileOffset = fileOffset;
-    });
+    int fileOffset = variable.fileOffset;
+    String name = variable.name;
+    final cell = VariableDeclaration(name,
+        initializer:
+            _callCellConstructor(_nameLiteral(name, fileOffset), fileOffset),
+        type: InterfaceType(_coreTypes.cellClass, nonNullable),
+        isFinal: true)
+      ..fileOffset = fileOffset;
+    return _addToCurrentScope(variable, cell);
   }
 
   FunctionExpression _initializerClosure(
@@ -117,41 +184,36 @@
 
   VariableDeclaration _initializedVariableCell(VariableDeclaration variable) {
     assert(_shouldLowerInitializedVariable(variable));
-    return _variableCells.putIfAbsent(variable, () {
-      int fileOffset = variable.fileOffset;
-      return VariableDeclaration(variable.name,
-          initializer: _callInitializedCellConstructor(
-              _initializerClosure(variable.initializer, variable.type),
-              fileOffset),
-          type: InterfaceType(_coreTypes.initializedCellClass,
-              _contextMember.enclosingLibrary.nonNullable),
-          isFinal: true)
-        ..fileOffset = fileOffset;
-    });
+    int fileOffset = variable.fileOffset;
+    String name = variable.name;
+    final cell = VariableDeclaration(name,
+        initializer: _callInitializedCellConstructor(
+            _nameLiteral(name, fileOffset),
+            _initializerClosure(variable.initializer, variable.type),
+            fileOffset),
+        type: InterfaceType(_coreTypes.initializedCellClass, nonNullable),
+        isFinal: true)
+      ..fileOffset = fileOffset;
+    return _addToCurrentScope(variable, cell);
   }
 
-  VariableDeclaration _variableCell(VariableDeclaration variable) {
-    assert(_shouldLowerVariable(variable));
-    return variable.initializer == null
-        ? _uninitializedVariableCell(variable)
-        : _initializedVariableCell(variable);
-  }
-
-  VariableGet _variableCellAccess(
-          VariableDeclaration variable, int fileOffset) =>
-      VariableGet(_variableCell(variable))..fileOffset = fileOffset;
-
   TreeNode transformVariableDeclaration(
-      VariableDeclaration node, Member contextMember) {
+      VariableDeclaration variable, Member contextMember) {
     _contextMember = contextMember;
 
-    if (!_shouldLowerVariable(node)) return node;
+    if (!_shouldLowerVariable(variable)) return variable;
 
     // A [VariableDeclaration] being used as a statement must be a direct child
     // of a [Block].
-    if (node.parent is! Block) return node;
+    if (variable.parent is! Block) return variable;
 
-    return _variableCell(node);
+    return _variableCell(variable);
+  }
+
+  VariableGet _variableCellAccess(
+      VariableDeclaration variable, int fileOffset) {
+    assert(_shouldLowerVariable(variable));
+    return VariableGet(_variableCell(variable))..fileOffset = fileOffset;
   }
 
   TreeNode transformVariableGet(VariableGet node, Member contextMember) {
@@ -191,12 +253,13 @@
     assert(_shouldLowerField(field));
     return _fieldCells.putIfAbsent(field, () {
       int fileOffset = field.fileOffset;
+      Name name = field.name;
       field.getterReference.canonicalName?.unbind();
       field.setterReference?.canonicalName?.unbind();
-      return Field.immutable(field.name,
-          type: InterfaceType(
-              _coreTypes.cellClass, field.enclosingLibrary.nonNullable),
-          initializer: _callCellConstructor(fileOffset),
+      return Field.immutable(name,
+          type: InterfaceType(_coreTypes.cellClass, nonNullable),
+          initializer: _callCellConstructor(
+              _nameLiteral(name.text, fileOffset), fileOffset),
           isFinal: true,
           isStatic: true,
           fileUri: field.fileUri)
@@ -208,12 +271,12 @@
   StaticGet _fieldCellAccess(Field field, int fileOffset) =>
       StaticGet(_fieldCell(field))..fileOffset = fileOffset;
 
-  TreeNode transformField(Field node, Member contextMember) {
+  TreeNode transformField(Field field, Member contextMember) {
     _contextMember = contextMember;
 
-    if (!_shouldLowerField(node)) return node;
+    if (!_shouldLowerField(field)) return field;
 
-    return _fieldCell(node);
+    return _fieldCell(field);
   }
 
   TreeNode transformStaticGet(StaticGet node, Member contextMember) {
diff --git a/pkg/compiler/lib/src/kernel/transformations/lowering.dart b/pkg/compiler/lib/src/kernel/transformations/lowering.dart
index 3885486..f8726e9 100644
--- a/pkg/compiler/lib/src/kernel/transformations/lowering.dart
+++ b/pkg/compiler/lib/src/kernel/transformations/lowering.dart
@@ -14,8 +14,11 @@
 /// Each transformation is applied locally to AST nodes of certain types after
 /// transforming children nodes.
 void transformLibraries(
-    List<Library> libraries, CoreTypes coreTypes, ClassHierarchy hierarchy) {
-  final transformer = _Lowering(coreTypes, hierarchy);
+    List<Library> libraries, CoreTypes coreTypes, ClassHierarchy hierarchy,
+    {bool omitLateNames}) {
+  assert(omitLateNames != null);
+  final transformer =
+      _Lowering(coreTypes, hierarchy, omitLateNames: omitLateNames);
   libraries.forEach(transformer.visitLibrary);
 
   // Do a second pass to remove/replace now-unused nodes.
@@ -31,9 +34,10 @@
 
   Member _currentMember;
 
-  _Lowering(CoreTypes coreTypes, ClassHierarchy hierarchy)
-      : factorySpecializer = FactorySpecializer(coreTypes, hierarchy),
-        _lateLowering = LateLowering(coreTypes);
+  _Lowering(CoreTypes coreTypes, ClassHierarchy hierarchy, {bool omitLateNames})
+      : assert(omitLateNames != null),
+        factorySpecializer = FactorySpecializer(coreTypes, hierarchy),
+        _lateLowering = LateLowering(coreTypes, omitLateNames: omitLateNames);
 
   void transformAdditionalExports(Library node) {
     _lateLowering.transformAdditionalExports(node);
@@ -52,6 +56,14 @@
   }
 
   @override
+  TreeNode visitFunctionNode(FunctionNode node) {
+    _lateLowering.enterFunction();
+    node.transformChildren(this);
+    _lateLowering.exitFunction();
+    return node;
+  }
+
+  @override
   TreeNode visitVariableDeclaration(VariableDeclaration node) {
     node.transformChildren(this);
     return _lateLowering.transformVariableDeclaration(node, _currentMember);
@@ -71,6 +83,7 @@
 
   @override
   TreeNode visitField(Field node) {
+    _currentMember = node;
     node.transformChildren(this);
     return _lateLowering.transformField(node, _currentMember);
   }
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index f3b99c9..a37a9c8 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -248,6 +248,14 @@
   /// which case [_disableMinification] wins.
   bool _disableMinification = false;
 
+  /// Whether to omit names of late variables from error messages.
+  bool omitLateNames = false;
+
+  /// Flag to turn off `omitLateNames` even if enabled elsewhere, e.g. via
+  /// `-O2`. Both [omitLateNames] and [_noOmitLateNames] can be true, in which
+  /// case [_noOmitLateNames] wins.
+  bool _noOmitLateNames = false;
+
   /// Whether to model which native classes are live based on annotations on the
   /// core libraries. If false, all native classes will be included by default.
   bool enableNativeLiveTypeAnalysis = true;
@@ -490,6 +498,8 @@
           _extractStringOption(options, '${Flags.dumpSsa}=', null)
       ..enableMinification = _hasOption(options, Flags.minify)
       .._disableMinification = _hasOption(options, Flags.noMinify)
+      ..omitLateNames = _hasOption(options, Flags.omitLateNames)
+      .._noOmitLateNames = _hasOption(options, Flags.noOmitLateNames)
       ..enableNativeLiveTypeAnalysis =
           !_hasOption(options, Flags.disableNativeLiveTypeAnalysis)
       ..enableUserAssertions = _hasOption(options, Flags.enableCheckedMode) ||
@@ -623,6 +633,7 @@
       if (optimizationLevel >= 2) {
         enableMinification = true;
         laxRuntimeTypeToString = true;
+        omitLateNames = true;
       }
       if (optimizationLevel >= 3) {
         omitImplicitChecks = true;
@@ -658,6 +669,10 @@
       enableMinification = false;
     }
 
+    if (_noOmitLateNames) {
+      omitLateNames = false;
+    }
+
     if (_noNativeNullAssertions || nullSafetyMode != NullSafetyMode.sound) {
       nativeNullAssertions = false;
     }
diff --git a/pkg/compiler/test/codegen/model_test.dart b/pkg/compiler/test/codegen/model_test.dart
index 6748f8b..f7a1537 100644
--- a/pkg/compiler/test/codegen/model_test.dart
+++ b/pkg/compiler/test/codegen/model_test.dart
@@ -17,7 +17,6 @@
 import 'package:compiler/src/js_emitter/model.dart';
 import 'package:compiler/src/js_model/element_map.dart';
 import 'package:compiler/src/js_model/js_world.dart';
-import 'package:js_ast/js_ast.dart' as js;
 import 'package:kernel/ast.dart' as ir;
 import '../equivalence/id_equivalence.dart';
 import '../equivalence/id_equivalence_helper.dart';
diff --git a/pkg/dartdev/lib/src/templates/common.dart b/pkg/dartdev/lib/src/templates/common.dart
index 37e4bdc..2aac572 100644
--- a/pkg/dartdev/lib/src/templates/common.dart
+++ b/pkg/dartdev/lib/src/templates/common.dart
@@ -14,13 +14,18 @@
 final String analysisOptions = '''
 # This file configures the static analysis results for your project (errors,
 # warnings, and lints).
+#
+# This enables the 'recommended' set of lints from `package:lints`.
+# This set helps identify many issues that may lead to problems when running
+# or consuming Dart code, and enforces writing Dart using a single, idiomatic
+# style and format.
+#
+# If you want a smaller set of lints you can change this to specify
+# 'package:lints/core.yaml'. These are just the most critical lints
+# (the recommended set includes the core lints).
+# The core lints are also what is used by pub.dev for scoring packages.
 
-# The following line activates a set of core lints for Dart apps; this is the
-# set that is used by pub.dev for scoring packages. For many projects, consider
-# changing this to specify 'package:lints/recommended.yaml'; that's an
-# additional set of lints designed to encourage good coding practices.
-
-include: package:lints/core.yaml
+include: package:lints/recommended.yaml
 
 # Uncomment the following section to specify additional rules.
 
diff --git a/pkg/dartdev/test/commands/run_test.dart b/pkg/dartdev/test/commands/run_test.dart
index 58a4d56..f10f092 100644
--- a/pkg/dartdev/test/commands/run_test.dart
+++ b/pkg/dartdev/test/commands/run_test.dart
@@ -81,7 +81,7 @@
     p.file('main.dart', 'void main(args) { print(args); }');
     ProcessResult result = p.runSync([
       'run',
-      '--enable-experiment=triple-shift',
+      '--enable-experiment=test-experiment',
       'main.dart',
       'argument1',
       'argument2',
@@ -133,7 +133,7 @@
     final name = path.join(p.dirPath, 'main.dart');
     final result = p.runSync([
       'run',
-      '--enable-experiment=triple-shift',
+      '--enable-experiment=test-experiment',
       name,
       '--argument1',
       'argument2',
diff --git a/pkg/expect/lib/expect.dart b/pkg/expect/lib/expect.dart
index 59b0c0d..1b1a534 100644
--- a/pkg/expect/lib/expect.dart
+++ b/pkg/expect/lib/expect.dart
@@ -712,14 +712,14 @@
   /// because the types appear to be unrelated.
   static void _subtypeAtRuntime<Sub, Super>() {
     if (<Sub>[] is! List<Super>) {
-      fail("$Sub is not a subtype of $Super");
+      _fail("Expect.subtype<$Sub, $Super>: $Sub is not a subtype of $Super");
     }
   }
 
   /// Checks that `Sub` is not a subtype of `Super` at run time.
   static void notSubtype<Sub, Super>() {
     if (<Sub>[] is List<Super>) {
-      fail("$Sub is a subtype of $Super");
+      _fail("Expect.notSubtype<$Sub, $Super>: $Sub is a subtype of $Super");
     }
   }
 
@@ -727,7 +727,7 @@
       (reason.isEmpty) ? "" : ", '$reason'";
 
   @alwaysThrows
-  static void _fail(String message) {
+  static Never _fail(String message) {
     throw new ExpectException(message);
   }
 }
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index 71f0bd6..65286ee 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -22,6 +22,7 @@
   nonfunctionTypeAliases,
   setLiterals,
   spreadCollections,
+  testExperiment,
   tripleShift,
   valueClass,
   variance,
@@ -40,6 +41,7 @@
 const Version enableNonfunctionTypeAliasesVersion = const Version(2, 13);
 const Version enableSetLiteralsVersion = const Version(2, 0);
 const Version enableSpreadCollectionsVersion = const Version(2, 0);
+const Version enableTestExperimentVersion = const Version(2, 14);
 const Version enableTripleShiftVersion = const Version(2, 14);
 const Version enableValueClassVersion = const Version(2, 14);
 const Version enableVarianceVersion = const Version(2, 14);
@@ -70,6 +72,8 @@
       return ExperimentalFlag.setLiterals;
     case "spread-collections":
       return ExperimentalFlag.spreadCollections;
+    case "test-experiment":
+      return ExperimentalFlag.testExperiment;
     case "triple-shift":
       return ExperimentalFlag.tripleShift;
     case "value-class":
@@ -93,6 +97,7 @@
   ExperimentalFlag.nonfunctionTypeAliases: true,
   ExperimentalFlag.setLiterals: true,
   ExperimentalFlag.spreadCollections: true,
+  ExperimentalFlag.testExperiment: false,
   ExperimentalFlag.tripleShift: true,
   ExperimentalFlag.valueClass: false,
   ExperimentalFlag.variance: false,
@@ -111,6 +116,7 @@
   ExperimentalFlag.nonfunctionTypeAliases: false,
   ExperimentalFlag.setLiterals: true,
   ExperimentalFlag.spreadCollections: true,
+  ExperimentalFlag.testExperiment: false,
   ExperimentalFlag.tripleShift: false,
   ExperimentalFlag.valueClass: false,
   ExperimentalFlag.variance: false,
@@ -129,6 +135,7 @@
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
   ExperimentalFlag.setLiterals: const Version(2, 0),
   ExperimentalFlag.spreadCollections: const Version(2, 0),
+  ExperimentalFlag.testExperiment: const Version(2, 14),
   ExperimentalFlag.tripleShift: const Version(2, 14),
   ExperimentalFlag.valueClass: const Version(2, 14),
   ExperimentalFlag.variance: const Version(2, 14),
@@ -147,194 +154,195 @@
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
   ExperimentalFlag.setLiterals: const Version(2, 0),
   ExperimentalFlag.spreadCollections: const Version(2, 0),
+  ExperimentalFlag.testExperiment: const Version(2, 14),
   ExperimentalFlag.tripleShift: const Version(2, 14),
   ExperimentalFlag.valueClass: const Version(2, 14),
   ExperimentalFlag.variance: const Version(2, 14),
 };
 
 const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
-    const AllowedExperimentalFlags(sdkDefaultExperiments: {
-  ExperimentalFlag.nonNullable,
-  ExperimentalFlag.tripleShift,
-}, sdkLibraryExperiments: {}, packageExperiments: {
-  "async": {
-    ExperimentalFlag.nonNullable,
-  },
-  "boolean_selector": {
-    ExperimentalFlag.nonNullable,
-  },
-  "characters": {
-    ExperimentalFlag.nonNullable,
-  },
-  "charcode": {
-    ExperimentalFlag.nonNullable,
-  },
-  "clock": {
-    ExperimentalFlag.nonNullable,
-  },
-  "collection": {
-    ExperimentalFlag.nonNullable,
-  },
-  "connectivity": {
-    ExperimentalFlag.nonNullable,
-  },
-  "connectivity_platform_interface": {
-    ExperimentalFlag.nonNullable,
-  },
-  "convert": {
-    ExperimentalFlag.nonNullable,
-  },
-  "crypto": {
-    ExperimentalFlag.nonNullable,
-  },
-  "csslib": {
-    ExperimentalFlag.nonNullable,
-  },
-  "dart_internal": {
-    ExperimentalFlag.nonNullable,
-  },
-  "device_info": {
-    ExperimentalFlag.nonNullable,
-  },
-  "device_info_platform_interface": {
-    ExperimentalFlag.nonNullable,
-  },
-  "fake_async": {
-    ExperimentalFlag.nonNullable,
-  },
-  "file": {
-    ExperimentalFlag.nonNullable,
-  },
-  "fixnum": {
-    ExperimentalFlag.nonNullable,
-  },
-  "flutter": {
-    ExperimentalFlag.nonNullable,
-  },
-  "flutter_driver": {
-    ExperimentalFlag.nonNullable,
-  },
-  "flutter_test": {
-    ExperimentalFlag.nonNullable,
-  },
-  "flutter_goldens": {
-    ExperimentalFlag.nonNullable,
-  },
-  "flutter_goldens_client": {
-    ExperimentalFlag.nonNullable,
-  },
-  "http": {
-    ExperimentalFlag.nonNullable,
-  },
-  "http_parser": {
-    ExperimentalFlag.nonNullable,
-  },
-  "intl": {
-    ExperimentalFlag.nonNullable,
-  },
-  "js": {
-    ExperimentalFlag.nonNullable,
-  },
-  "logging": {
-    ExperimentalFlag.nonNullable,
-  },
-  "matcher": {
-    ExperimentalFlag.nonNullable,
-  },
-  "meta": {
-    ExperimentalFlag.nonNullable,
-  },
-  "native_stack_traces": {
-    ExperimentalFlag.nonNullable,
-  },
-  "observatory": {
-    ExperimentalFlag.nonNullable,
-  },
-  "observatory_test_package": {
-    ExperimentalFlag.nonNullable,
-  },
-  "path": {
-    ExperimentalFlag.nonNullable,
-  },
-  "pedantic": {
-    ExperimentalFlag.nonNullable,
-  },
-  "platform": {
-    ExperimentalFlag.nonNullable,
-  },
-  "plugin_platform_interface": {
-    ExperimentalFlag.nonNullable,
-  },
-  "pool": {
-    ExperimentalFlag.nonNullable,
-  },
-  "process": {
-    ExperimentalFlag.nonNullable,
-  },
-  "pub_semver": {
-    ExperimentalFlag.nonNullable,
-  },
-  "sky_engine": {
-    ExperimentalFlag.nonNullable,
-  },
-  "source_maps": {
-    ExperimentalFlag.nonNullable,
-  },
-  "source_map_stack_trace": {
-    ExperimentalFlag.nonNullable,
-  },
-  "source_span": {
-    ExperimentalFlag.nonNullable,
-  },
-  "stack_trace": {
-    ExperimentalFlag.nonNullable,
-  },
-  "stream_channel": {
-    ExperimentalFlag.nonNullable,
-  },
-  "string_scanner": {
-    ExperimentalFlag.nonNullable,
-  },
-  "term_glyph": {
-    ExperimentalFlag.nonNullable,
-  },
-  "test": {
-    ExperimentalFlag.nonNullable,
-  },
-  "test_api": {
-    ExperimentalFlag.nonNullable,
-  },
-  "test_core": {
-    ExperimentalFlag.nonNullable,
-  },
-  "typed_data": {
-    ExperimentalFlag.nonNullable,
-  },
-  "url_launcher": {
-    ExperimentalFlag.nonNullable,
-  },
-  "url_launcher_linux": {
-    ExperimentalFlag.nonNullable,
-  },
-  "url_launcher_macos": {
-    ExperimentalFlag.nonNullable,
-  },
-  "url_launcher_platform_interface": {
-    ExperimentalFlag.nonNullable,
-  },
-  "url_launcher_windows": {
-    ExperimentalFlag.nonNullable,
-  },
-  "vector_math": {
-    ExperimentalFlag.nonNullable,
-  },
-  "video_player": {
-    ExperimentalFlag.nonNullable,
-  },
-  "video_player_platform_interface": {
-    ExperimentalFlag.nonNullable,
-  },
-  "video_player_web": {
-    ExperimentalFlag.nonNullable,
-  },
-});
+    const AllowedExperimentalFlags(
+        sdkDefaultExperiments: {},
+        sdkLibraryExperiments: {},
+        packageExperiments: {
+      "async": {
+        ExperimentalFlag.nonNullable,
+      },
+      "boolean_selector": {
+        ExperimentalFlag.nonNullable,
+      },
+      "characters": {
+        ExperimentalFlag.nonNullable,
+      },
+      "charcode": {
+        ExperimentalFlag.nonNullable,
+      },
+      "clock": {
+        ExperimentalFlag.nonNullable,
+      },
+      "collection": {
+        ExperimentalFlag.nonNullable,
+      },
+      "connectivity": {
+        ExperimentalFlag.nonNullable,
+      },
+      "connectivity_platform_interface": {
+        ExperimentalFlag.nonNullable,
+      },
+      "convert": {
+        ExperimentalFlag.nonNullable,
+      },
+      "crypto": {
+        ExperimentalFlag.nonNullable,
+      },
+      "csslib": {
+        ExperimentalFlag.nonNullable,
+      },
+      "dart_internal": {
+        ExperimentalFlag.nonNullable,
+      },
+      "device_info": {
+        ExperimentalFlag.nonNullable,
+      },
+      "device_info_platform_interface": {
+        ExperimentalFlag.nonNullable,
+      },
+      "fake_async": {
+        ExperimentalFlag.nonNullable,
+      },
+      "file": {
+        ExperimentalFlag.nonNullable,
+      },
+      "fixnum": {
+        ExperimentalFlag.nonNullable,
+      },
+      "flutter": {
+        ExperimentalFlag.nonNullable,
+      },
+      "flutter_driver": {
+        ExperimentalFlag.nonNullable,
+      },
+      "flutter_test": {
+        ExperimentalFlag.nonNullable,
+      },
+      "flutter_goldens": {
+        ExperimentalFlag.nonNullable,
+      },
+      "flutter_goldens_client": {
+        ExperimentalFlag.nonNullable,
+      },
+      "http": {
+        ExperimentalFlag.nonNullable,
+      },
+      "http_parser": {
+        ExperimentalFlag.nonNullable,
+      },
+      "intl": {
+        ExperimentalFlag.nonNullable,
+      },
+      "js": {
+        ExperimentalFlag.nonNullable,
+      },
+      "logging": {
+        ExperimentalFlag.nonNullable,
+      },
+      "matcher": {
+        ExperimentalFlag.nonNullable,
+      },
+      "meta": {
+        ExperimentalFlag.nonNullable,
+      },
+      "native_stack_traces": {
+        ExperimentalFlag.nonNullable,
+      },
+      "observatory": {
+        ExperimentalFlag.nonNullable,
+      },
+      "observatory_test_package": {
+        ExperimentalFlag.nonNullable,
+      },
+      "path": {
+        ExperimentalFlag.nonNullable,
+      },
+      "pedantic": {
+        ExperimentalFlag.nonNullable,
+      },
+      "platform": {
+        ExperimentalFlag.nonNullable,
+      },
+      "plugin_platform_interface": {
+        ExperimentalFlag.nonNullable,
+      },
+      "pool": {
+        ExperimentalFlag.nonNullable,
+      },
+      "process": {
+        ExperimentalFlag.nonNullable,
+      },
+      "pub_semver": {
+        ExperimentalFlag.nonNullable,
+      },
+      "sky_engine": {
+        ExperimentalFlag.nonNullable,
+      },
+      "source_maps": {
+        ExperimentalFlag.nonNullable,
+      },
+      "source_map_stack_trace": {
+        ExperimentalFlag.nonNullable,
+      },
+      "source_span": {
+        ExperimentalFlag.nonNullable,
+      },
+      "stack_trace": {
+        ExperimentalFlag.nonNullable,
+      },
+      "stream_channel": {
+        ExperimentalFlag.nonNullable,
+      },
+      "string_scanner": {
+        ExperimentalFlag.nonNullable,
+      },
+      "term_glyph": {
+        ExperimentalFlag.nonNullable,
+      },
+      "test": {
+        ExperimentalFlag.nonNullable,
+      },
+      "test_api": {
+        ExperimentalFlag.nonNullable,
+      },
+      "test_core": {
+        ExperimentalFlag.nonNullable,
+      },
+      "typed_data": {
+        ExperimentalFlag.nonNullable,
+      },
+      "url_launcher": {
+        ExperimentalFlag.nonNullable,
+      },
+      "url_launcher_linux": {
+        ExperimentalFlag.nonNullable,
+      },
+      "url_launcher_macos": {
+        ExperimentalFlag.nonNullable,
+      },
+      "url_launcher_platform_interface": {
+        ExperimentalFlag.nonNullable,
+      },
+      "url_launcher_windows": {
+        ExperimentalFlag.nonNullable,
+      },
+      "vector_math": {
+        ExperimentalFlag.nonNullable,
+      },
+      "video_player": {
+        ExperimentalFlag.nonNullable,
+      },
+      "video_player_platform_interface": {
+        ExperimentalFlag.nonNullable,
+      },
+      "video_player_web": {
+        ExperimentalFlag.nonNullable,
+      },
+    });
diff --git a/pkg/front_end/testcases/dart2js/late_locals.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/late_locals.dart.strong.transformed.expect
index bac60ce..f7c1b79 100644
--- a/pkg/front_end/testcases/dart2js/late_locals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_locals.dart.strong.transformed.expect
@@ -14,49 +14,49 @@
   self::testNonNullableInitializedFinalLocal();
 }
 static method testNullableUninitializedNonFinalLocal() → void {
-  final _la::_Cell x = new _la::_Cell::•();
+  final _la::_Cell x = new _la::_Cell::named("x");
   x.{_la::_Cell::value} = 42;
   core::print(x.{_la::_Cell::readLocal}<core::int>(){() → core::int});
 }
 static method testNonNullableUninitializedNonFinalLocal() → void {
-  final _la::_Cell x = new _la::_Cell::•();
+  final _la::_Cell x = new _la::_Cell::named("x");
   x.{_la::_Cell::value} = 42;
   core::print(x.{_la::_Cell::readLocal}<core::int>(){() → core::int});
 }
 static method testNullableUninitializedFinalLocal() → void {
-  final _la::_Cell x = new _la::_Cell::•();
+  final _la::_Cell x = new _la::_Cell::named("x");
   x.{_la::_Cell::finalLocalValue} = 42;
   core::print(x.{_la::_Cell::readLocal}<core::int>(){() → core::int});
 }
 static method testNonNullableUninitializedFinalLocal() → void {
-  final _la::_Cell x = new _la::_Cell::•();
+  final _la::_Cell x = new _la::_Cell::named("x");
   x.{_la::_Cell::finalLocalValue} = 42;
   core::print(x.{_la::_Cell::readLocal}<core::int>(){() → core::int});
 }
 static method testNullableInitializedNonFinalLocal() → void {
-  final _la::_InitializedCell x = new _la::_InitializedCell::•(() → core::int? => 1.{core::int::unary-}(){() → core::int});
+  final _la::_InitializedCell x = new _la::_InitializedCell::named("x", () → core::int? => 1.{core::int::unary-}(){() → core::int});
   core::print(x.{_la::_InitializedCell::read}<core::int>(){() → core::int});
   x.{_la::_InitializedCell::value} = 42;
   core::print(x.{_la::_InitializedCell::read}<core::int>(){() → core::int});
-  final _la::_InitializedCell y = new _la::_InitializedCell::•(() → core::int? => null);
+  final _la::_InitializedCell y = new _la::_InitializedCell::named("y", () → core::int? => null);
   core::print(y.{_la::_InitializedCell::read}<core::int?>(){() → core::int?});
   y.{_la::_InitializedCell::value} = 42;
   core::print(y.{_la::_InitializedCell::read}<core::int>(){() → core::int});
 }
 static method testNonNullableInitializedNonFinalLocal() → void {
-  final _la::_InitializedCell x = new _la::_InitializedCell::•(() → core::int => 1.{core::int::unary-}(){() → core::int});
+  final _la::_InitializedCell x = new _la::_InitializedCell::named("x", () → core::int => 1.{core::int::unary-}(){() → core::int});
   core::print(x.{_la::_InitializedCell::read}<core::int>(){() → core::int});
   x.{_la::_InitializedCell::value} = 42;
   core::print(x.{_la::_InitializedCell::read}<core::int>(){() → core::int});
 }
 static method testNullableInitializedFinalLocal() → void {
-  final _la::_InitializedCell x = new _la::_InitializedCell::•(() → core::int? => 1.{core::int::unary-}(){() → core::int});
+  final _la::_InitializedCell x = new _la::_InitializedCell::named("x", () → core::int? => 1.{core::int::unary-}(){() → core::int});
   core::print(x.{_la::_InitializedCell::readFinal}<core::int?>(){() → core::int?});
-  final _la::_InitializedCell y = new _la::_InitializedCell::•(() → core::int? => null);
+  final _la::_InitializedCell y = new _la::_InitializedCell::named("y", () → core::int? => null);
   core::print(y.{_la::_InitializedCell::readFinal}<core::int?>(){() → core::int?});
 }
 static method testNonNullableInitializedFinalLocal() → void {
-  final _la::_InitializedCell x = new _la::_InitializedCell::•(() → core::int => 1.{core::int::unary-}(){() → core::int});
+  final _la::_InitializedCell x = new _la::_InitializedCell::named("x", () → core::int => 1.{core::int::unary-}(){() → core::int});
   core::print(x.{_la::_InitializedCell::readFinal}<core::int>(){() → core::int});
 }
 
diff --git a/pkg/front_end/testcases/dart2js/late_locals.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/late_locals.dart.weak.transformed.expect
index bac60ce..f7c1b79 100644
--- a/pkg/front_end/testcases/dart2js/late_locals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_locals.dart.weak.transformed.expect
@@ -14,49 +14,49 @@
   self::testNonNullableInitializedFinalLocal();
 }
 static method testNullableUninitializedNonFinalLocal() → void {
-  final _la::_Cell x = new _la::_Cell::•();
+  final _la::_Cell x = new _la::_Cell::named("x");
   x.{_la::_Cell::value} = 42;
   core::print(x.{_la::_Cell::readLocal}<core::int>(){() → core::int});
 }
 static method testNonNullableUninitializedNonFinalLocal() → void {
-  final _la::_Cell x = new _la::_Cell::•();
+  final _la::_Cell x = new _la::_Cell::named("x");
   x.{_la::_Cell::value} = 42;
   core::print(x.{_la::_Cell::readLocal}<core::int>(){() → core::int});
 }
 static method testNullableUninitializedFinalLocal() → void {
-  final _la::_Cell x = new _la::_Cell::•();
+  final _la::_Cell x = new _la::_Cell::named("x");
   x.{_la::_Cell::finalLocalValue} = 42;
   core::print(x.{_la::_Cell::readLocal}<core::int>(){() → core::int});
 }
 static method testNonNullableUninitializedFinalLocal() → void {
-  final _la::_Cell x = new _la::_Cell::•();
+  final _la::_Cell x = new _la::_Cell::named("x");
   x.{_la::_Cell::finalLocalValue} = 42;
   core::print(x.{_la::_Cell::readLocal}<core::int>(){() → core::int});
 }
 static method testNullableInitializedNonFinalLocal() → void {
-  final _la::_InitializedCell x = new _la::_InitializedCell::•(() → core::int? => 1.{core::int::unary-}(){() → core::int});
+  final _la::_InitializedCell x = new _la::_InitializedCell::named("x", () → core::int? => 1.{core::int::unary-}(){() → core::int});
   core::print(x.{_la::_InitializedCell::read}<core::int>(){() → core::int});
   x.{_la::_InitializedCell::value} = 42;
   core::print(x.{_la::_InitializedCell::read}<core::int>(){() → core::int});
-  final _la::_InitializedCell y = new _la::_InitializedCell::•(() → core::int? => null);
+  final _la::_InitializedCell y = new _la::_InitializedCell::named("y", () → core::int? => null);
   core::print(y.{_la::_InitializedCell::read}<core::int?>(){() → core::int?});
   y.{_la::_InitializedCell::value} = 42;
   core::print(y.{_la::_InitializedCell::read}<core::int>(){() → core::int});
 }
 static method testNonNullableInitializedNonFinalLocal() → void {
-  final _la::_InitializedCell x = new _la::_InitializedCell::•(() → core::int => 1.{core::int::unary-}(){() → core::int});
+  final _la::_InitializedCell x = new _la::_InitializedCell::named("x", () → core::int => 1.{core::int::unary-}(){() → core::int});
   core::print(x.{_la::_InitializedCell::read}<core::int>(){() → core::int});
   x.{_la::_InitializedCell::value} = 42;
   core::print(x.{_la::_InitializedCell::read}<core::int>(){() → core::int});
 }
 static method testNullableInitializedFinalLocal() → void {
-  final _la::_InitializedCell x = new _la::_InitializedCell::•(() → core::int? => 1.{core::int::unary-}(){() → core::int});
+  final _la::_InitializedCell x = new _la::_InitializedCell::named("x", () → core::int? => 1.{core::int::unary-}(){() → core::int});
   core::print(x.{_la::_InitializedCell::readFinal}<core::int?>(){() → core::int?});
-  final _la::_InitializedCell y = new _la::_InitializedCell::•(() → core::int? => null);
+  final _la::_InitializedCell y = new _la::_InitializedCell::named("y", () → core::int? => null);
   core::print(y.{_la::_InitializedCell::readFinal}<core::int?>(){() → core::int?});
 }
 static method testNonNullableInitializedFinalLocal() → void {
-  final _la::_InitializedCell x = new _la::_InitializedCell::•(() → core::int => 1.{core::int::unary-}(){() → core::int});
+  final _la::_InitializedCell x = new _la::_InitializedCell::named("x", () → core::int => 1.{core::int::unary-}(){() → core::int});
   core::print(x.{_la::_InitializedCell::readFinal}<core::int>(){() → core::int});
 }
 
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
index 30448db..39d75e1 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
@@ -13,8 +13,8 @@
 export "org-dartlang-testcase:///late_statics_lib.dart";
 
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::•();
-  static final field _la::_Cell b = new _la::_Cell::•();
+  static final field _la::_Cell a = new _la::_Cell::named("a");
+  static final field _la::_Cell b = new _la::_Cell::named("b");
   late static field core::int c = 1.{core::int::unary-}(){() → core::int};
   late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
   synthetic constructor •() → self::Statics
@@ -73,8 +73,8 @@
 import "dart:_late_helper" as _la;
 import "dart:core" as core;
 
-static final field _la::_Cell a = new _la::_Cell::•();
-static final field _la::_Cell b = new _la::_Cell::•();
+static final field _la::_Cell a = new _la::_Cell::named("a");
+static final field _la::_Cell b = new _la::_Cell::named("b");
 late static field core::int c = 1.{core::int::unary-}(){() → core::int};
 late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
 
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
index 30448db..39d75e1 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
@@ -13,8 +13,8 @@
 export "org-dartlang-testcase:///late_statics_lib.dart";
 
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::•();
-  static final field _la::_Cell b = new _la::_Cell::•();
+  static final field _la::_Cell a = new _la::_Cell::named("a");
+  static final field _la::_Cell b = new _la::_Cell::named("b");
   late static field core::int c = 1.{core::int::unary-}(){() → core::int};
   late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
   synthetic constructor •() → self::Statics
@@ -73,8 +73,8 @@
 import "dart:_late_helper" as _la;
 import "dart:core" as core;
 
-static final field _la::_Cell a = new _la::_Cell::•();
-static final field _la::_Cell b = new _la::_Cell::•();
+static final field _la::_Cell a = new _la::_Cell::named("a");
+static final field _la::_Cell b = new _la::_Cell::named("b");
 late static field core::int c = 1.{core::int::unary-}(){() → core::int};
 late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
 
diff --git a/pkg/front_end/testcases/general/constants/folder.options b/pkg/front_end/testcases/general/constants/folder.options
index 0cbe954..db4ac03 100644
--- a/pkg/front_end/testcases/general/constants/folder.options
+++ b/pkg/front_end/testcases/general/constants/folder.options
@@ -1,4 +1,3 @@
---enable-experiment=triple-shift
 -Dbaz=42
 -DbazTrue=true
 -DbazFalse=false
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/folder.options b/pkg/front_end/testcases/general/constants/js_semantics/folder.options
index 7a017fa..53ae728 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/folder.options
+++ b/pkg/front_end/testcases/general/constants/js_semantics/folder.options
@@ -1,2 +1 @@
---enable-experiment=triple-shift
 --target=dart2js
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/folder.options b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/folder.options
index 2913882..85995ca 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/folder.options
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/folder.options
@@ -1,5 +1,4 @@
 --no-defines
 --target=none
 --no-verify
---nnbd-agnostic
---enable-experiment=triple-shift
\ No newline at end of file
+--nnbd-agnostic
\ No newline at end of file
diff --git a/pkg/front_end/testcases/generic_metadata/folder.options b/pkg/front_end/testcases/generic_metadata/folder.options
index 2d13171..e69de29 100644
--- a/pkg/front_end/testcases/generic_metadata/folder.options
+++ b/pkg/front_end/testcases/generic_metadata/folder.options
@@ -1 +0,0 @@
---enable-experiment=generic-metadata
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
index 69312e6..7ecccb5 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
@@ -6,7 +6,6 @@
       : super #lib1::Object::•()
       ;
     method bMethod() → void {}
-    abstract member-signature operator ==(dynamic dynamic) → #lib1::bool*; -> #lib1::Object::==
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
diff --git a/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.1.expect b/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.1.expect
index efbafde..d186e96 100644
--- a/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.1.expect
@@ -11,5 +11,5 @@
 }
 library from "org-dartlang-test:///late_statics_lib.dart" as lat2 {
 
-  static final field _late_helper::_Cell a = new _late_helper::_Cell::•();
+  static final field _late_helper::_Cell a = new _late_helper::_Cell::named("a");
 }
diff --git a/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.2.expect b/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.2.expect
index 5398173..e6cc8ab 100644
--- a/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.2.expect
@@ -18,5 +18,5 @@
 }
 library from "org-dartlang-test:///late_statics_lib.dart" as lat2 {
 
-  static final field _late_helper::_Cell a = new _late_helper::_Cell::•();
+  static final field _late_helper::_Cell a = new _late_helper::_Cell::named("a");
 }
diff --git a/pkg/front_end/testcases/triple_shift/folder.options b/pkg/front_end/testcases/triple_shift/folder.options
index 55774c6..e69de29 100644
--- a/pkg/front_end/testcases/triple_shift/folder.options
+++ b/pkg/front_end/testcases/triple_shift/folder.options
@@ -1 +0,0 @@
---enable-experiment=triple-shift
diff --git a/pkg/kernel/lib/core_types.dart b/pkg/kernel/lib/core_types.dart
index 30c0329..d44801ec 100644
--- a/pkg/kernel/lib/core_types.dart
+++ b/pkg/kernel/lib/core_types.dart
@@ -332,12 +332,18 @@
   late final Constructor cellConstructor =
       index.getMember('dart:_late_helper', '_Cell', '') as Constructor;
 
+  late final Constructor cellNamedConstructor =
+      index.getMember('dart:_late_helper', '_Cell', 'named') as Constructor;
+
   late final Class initializedCellClass =
       index.getClass('dart:_late_helper', '_InitializedCell');
 
   late final Constructor initializedCellConstructor = index.getMember(
       'dart:_late_helper', '_InitializedCell', '') as Constructor;
 
+  late final Constructor initializedCellNamedConstructor = index.getMember(
+      'dart:_late_helper', '_InitializedCell', 'named') as Constructor;
+
   late final Procedure cellReadLocal =
       index.getMember('dart:_late_helper', '_Cell', 'readLocal') as Procedure;
 
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index f841be3..3ac5988 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -1271,8 +1271,7 @@
       unionAlignment = math.max(unionAlignment, alignment);
     }
     final int size = _alignOffset(unionSize, unionAlignment);
-    return CompoundLayout(
-        size, unionAlignment, List.filled(Abi.values.length, 0));
+    return CompoundLayout(size, unionAlignment, List.filled(types.length, 0));
   }
 }
 
diff --git a/pkg/vm_snapshot_analysis/test/instruction_sizes_test.dart b/pkg/vm_snapshot_analysis/test/instruction_sizes_test.dart
index 16b2504..faa3f50 100644
--- a/pkg/vm_snapshot_analysis/test/instruction_sizes_test.dart
+++ b/pkg/vm_snapshot_analysis/test/instruction_sizes_test.dart
@@ -821,9 +821,14 @@
                       '#type': 'class',
                       'makeSomeClosures': {
                         '#type': 'function',
+                        // Type of returned list is more precise, as closures
+                        // that returned non-K objects were removed, causing the
+                        // type K* to be attributed to makeSomeClosures instead
+                        // of just those inner closures that returned that type.
+                        '#size': greaterThan(0),
                         '<anonymous closure>': {
                           '#type': 'function',
-                          '#size': lessThan(0),
+                          '#size': lessThan(0), // Some inner closures removed.
                         },
                       },
                     },
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index 6935447..be5c249 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -281,10 +281,7 @@
   }
   DartUtils::ReadFile(buffer, size, script_file);
   DartUtils::CloseFile(script_file);
-  if (buffer == nullptr) {
-    return false;
-  }
-  return true;
+  return *buffer != nullptr;
 }
 
 class KernelIRNode {
diff --git a/runtime/tests/concurrency/run_stress_test_shards.dart b/runtime/tests/concurrency/run_stress_test_shards.dart
new file mode 100644
index 0000000..ee16cb2
--- /dev/null
+++ b/runtime/tests/concurrency/run_stress_test_shards.dart
@@ -0,0 +1,134 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+import 'dart:io' as io;
+import 'dart:isolate';
+import 'dart:math';
+
+import 'package:args/args.dart';
+import 'package:path/path.dart' as path;
+
+import '../vm/dart/snapshot_test_helper.dart';
+
+void forwardStream(Stream<List<int>> input, IOSink output) {
+  // Print the information line-by-line.
+  input
+      .transform(utf8.decoder)
+      .transform(const LineSplitter())
+      .listen((String line) {
+    output.writeln(line);
+  });
+}
+
+Future<bool> run(String executable, List<String> args) async {
+  print('Running "$executable ${args.join(' ')}"');
+  final Process process = await Process.start(executable, args);
+  forwardStream(process.stdout, stdout);
+  forwardStream(process.stderr, stderr);
+  final int exitCode = await process.exitCode;
+  if (exitCode != 0) {
+    print('=> Running "$executable ${args.join(' ')}" failed with $exitCode');
+    io.exitCode = 255; // Make this shard fail.
+    return false;
+  }
+  return true;
+}
+
+abstract class TestRunner {
+  Future runTest();
+}
+
+class JitTestRunner extends TestRunner {
+  final String buildDir;
+  final List<String> arguments;
+
+  JitTestRunner(this.buildDir, this.arguments);
+
+  Future runTest() async {
+    await run('$buildDir/dart', arguments);
+  }
+}
+
+class AotTestRunner extends TestRunner {
+  final String buildDir;
+  final List<String> arguments;
+  final List<String> aotArguments;
+
+  AotTestRunner(this.buildDir, this.arguments, this.aotArguments);
+
+  Future runTest() async {
+    await withTempDir((String dir) async {
+      final elfFile = path.join(dir, 'app.elf');
+
+      if (await run('$buildDir/gen_snapshot',
+          ['--snapshot-kind=app-aot-elf', '--elf=$elfFile', ...arguments])) {
+        await run(
+            '$buildDir/dart_precompiled_runtime', [...aotArguments, elfFile]);
+      }
+    });
+  }
+}
+
+final configurations = <TestRunner>[
+  JitTestRunner('out/DebugX64', [
+    '--disable-dart-dev',
+    '--no-sound-null-safety',
+    '--enable-isolate-groups',
+    '--experimental-enable-isolate-groups-jit',
+    'runtime/tests/concurrency/generated_stress_test.dart.jit.dill',
+  ]),
+  JitTestRunner('out/ReleaseX64', [
+    '--disable-dart-dev',
+    '--no-sound-null-safety',
+    '--enable-isolate-groups',
+    '--experimental-enable-isolate-groups-jit',
+    '--no-inline-alloc',
+    '--use-slow-path',
+    '--deoptimize-on-runtime-call-every=3',
+    'runtime/tests/concurrency/generated_stress_test.dart.jit.dill',
+  ]),
+  JitTestRunner('out/ReleaseTSANX64', [
+    '--disable-dart-dev',
+    '--no-sound-null-safety',
+    '--enable-isolate-groups',
+    '--experimental-enable-isolate-groups-jit',
+    'runtime/tests/concurrency/generated_stress_test.dart.jit.dill',
+  ]),
+  AotTestRunner('out/ReleaseX64', [
+    '--no-sound-null-safety',
+    'runtime/tests/concurrency/generated_stress_test.dart.aot.dill',
+  ], [
+    '--no-sound-null-safety',
+    '--enable-isolate-groups',
+  ]),
+  AotTestRunner('out/DebugX64', [
+    '--no-sound-null-safety',
+    'runtime/tests/concurrency/generated_stress_test.dart.aot.dill',
+  ], [
+    '--no-sound-null-safety',
+    '--enable-isolate-groups',
+  ]),
+];
+
+main(List<String> arguments) async {
+  final parser = ArgParser()
+    ..addOption('shards', help: 'number of shards used', defaultsTo: '1')
+    ..addOption('shard', help: 'shard id', defaultsTo: '1');
+
+  final options = parser.parse(arguments);
+  final shards = int.parse(options['shards']);
+  final shard = int.parse(options['shard']) - 1;
+
+  final thisShardsConfigurations = [];
+  for (int i = 0; i < configurations.length; i++) {
+    if ((i % shards) == shard) {
+      thisShardsConfigurations.add(configurations[i]);
+    }
+  }
+  for (final config in thisShardsConfigurations) {
+    await config.runTest();
+  }
+}
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index cfafa24..170afa2 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -1967,67 +1967,11 @@
     "../../../tests/language/null/null2_test.dart",
     "../../../tests/language/null/to_string2_test.dart",
     "../../../tests/language/null/to_string_test.dart",
-    "../../../tests/language/null_aware/access_runtime_1_test.dart",
-    "../../../tests/language/null_aware/access_runtime_2_test.dart",
-    "../../../tests/language/null_aware/access_runtime_3_test.dart",
-    "../../../tests/language/null_aware/access_runtime_4_test.dart",
-    "../../../tests/language/null_aware/access_runtime_5_test.dart",
-    "../../../tests/language/null_aware/access_runtime_6_test.dart",
-    "../../../tests/language/null_aware/access_runtime_7_test.dart",
     "../../../tests/language/null_aware/access_runtime_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_10_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_11_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_12_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_13_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_1_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_2_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_3_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_4_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_5_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_6_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_7_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_8_test.dart",
-    "../../../tests/language/null_aware/assignment_runtime_9_test.dart",
     "../../../tests/language/null_aware/assignment_runtime_test.dart",
     "../../../tests/language/null_aware/dynamic_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_10_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_11_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_12_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_13_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_14_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_15_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_16_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_17_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_18_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_19_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_1_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_20_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_21_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_22_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_23_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_24_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_25_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_26_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_27_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_28_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_2_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_3_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_4_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_5_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_6_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_7_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_8_test.dart",
-    "../../../tests/language/null_aware/increment_decrement_runtime_9_test.dart",
     "../../../tests/language/null_aware/increment_decrement_runtime_test.dart",
     "../../../tests/language/null_aware/index_this_null_aware_equals_test.dart",
-    "../../../tests/language/null_aware/invocation_runtime_1_test.dart",
-    "../../../tests/language/null_aware/invocation_runtime_2_test.dart",
-    "../../../tests/language/null_aware/invocation_runtime_3_test.dart",
-    "../../../tests/language/null_aware/invocation_runtime_4_test.dart",
-    "../../../tests/language/null_aware/invocation_runtime_5_test.dart",
-    "../../../tests/language/null_aware/invocation_runtime_6_test.dart",
-    "../../../tests/language/null_aware/invocation_runtime_7_test.dart",
-    "../../../tests/language/null_aware/invocation_runtime_8_test.dart",
     "../../../tests/language/null_aware/invocation_runtime_test.dart",
     "../../../tests/language/null_aware/null_shortening_test.dart",
     "../../../tests/language/null_aware/opt_test.dart",
diff --git a/runtime/tests/vm/dart/unsigned_shift_right_test.dart b/runtime/tests/vm/dart/unsigned_shift_right_test.dart
index 41c18f9..24195d6 100644
--- a/runtime/tests/vm/dart/unsigned_shift_right_test.dart
+++ b/runtime/tests/vm/dart/unsigned_shift_right_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=triple-shift
 // VMOptions=--deterministic --optimization_counter_threshold=50
 // VMOptions=--no-intrinsify
 
diff --git a/runtime/tests/vm/dart_2/unsigned_shift_right_test.dart b/runtime/tests/vm/dart_2/unsigned_shift_right_test.dart
index 41c18f9..24195d6 100644
--- a/runtime/tests/vm/dart_2/unsigned_shift_right_test.dart
+++ b/runtime/tests/vm/dart_2/unsigned_shift_right_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=triple-shift
 // VMOptions=--deterministic --optimization_counter_threshold=50
 // VMOptions=--no-intrinsify
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 7ef550b..9d61143 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -927,7 +927,7 @@
   ldr(dest, slot);
 #else
   ldr(dest, slot, kUnsignedFourBytes);  // Zero-extension.
-  add(dest, dest, Operand(HEAP_BASE));
+  add(dest, dest, Operand(HEAP_BITS, LSL, 32));
 #endif
 }
 
@@ -1054,7 +1054,7 @@
       kUnsignedByte);
   and_(TMP, TMP2,
        Operand(TMP, LSR, target::UntaggedObject::kBarrierOverlapShift));
-  tst(TMP, Operand(BARRIER_MASK));
+  tst(TMP, Operand(HEAP_BITS, LSR, 32));
   b(&done, ZERO);
 
   if (spill_lr) {
@@ -1122,7 +1122,7 @@
       kUnsignedByte);
   and_(TMP, TMP2,
        Operand(TMP, LSR, target::UntaggedObject::kBarrierOverlapShift));
-  tst(TMP, Operand(BARRIER_MASK));
+  tst(TMP, Operand(HEAP_BITS, LSR, 32));
   b(&done, ZERO);
   if (spill_lr) {
     SPILLS_LR_TO_FRAME(Push(LR));
@@ -1374,11 +1374,13 @@
 }
 
 void Assembler::RestorePinnedRegisters() {
-  ldr(BARRIER_MASK,
+  ldr(HEAP_BITS,
       compiler::Address(THR, target::Thread::write_barrier_mask_offset()));
+  LslImmediate(HEAP_BITS, HEAP_BITS, 32);
   ldr(NULL_REG, compiler::Address(THR, target::Thread::object_null_offset()));
 #if defined(DART_COMPRESSED_POINTERS)
-  ldr(HEAP_BASE, compiler::Address(THR, target::Thread::heap_base_offset()));
+  ldr(TMP, compiler::Address(THR, target::Thread::heap_base_offset()));
+  orr(HEAP_BITS, HEAP_BITS, Operand(TMP, LSR, 32));
 #endif
 }
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64_test.cc b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
index 4451d4f..53d2adf 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
@@ -2597,23 +2597,19 @@
   __ EnterFrame(0);
   __ Push(CODE_REG);
   __ Push(THR);
-  __ Push(BARRIER_MASK);
+  __ Push(HEAP_BITS);
   __ Push(NULL_REG);
-  __ Push(HEAP_BASE);
   __ TagAndPushPP();
   __ ldr(CODE_REG, Address(R0, VMHandles::kOffsetOfRawPtrInHandle));
   __ mov(THR, R1);
-  __ ldr(BARRIER_MASK, Address(THR, Thread::write_barrier_mask_offset()));
-  __ ldr(NULL_REG, Address(THR, Thread::object_null_offset()));
-  __ ldr(HEAP_BASE, Address(THR, Thread::heap_base_offset()));
+  __ RestorePinnedRegisters();
   __ LoadPoolPointer(PP);
 }
 
 static void LeaveTestFrame(Assembler* assembler) {
   __ PopAndUntagPP();
-  __ Pop(HEAP_BASE);
   __ Pop(NULL_REG);
-  __ Pop(BARRIER_MASK);
+  __ Pop(HEAP_BITS);
   __ Pop(THR);
   __ Pop(CODE_REG);
   __ LeaveFrame();
@@ -4736,14 +4732,15 @@
   __ SetupDartSP();
   __ Push(CODE_REG);
   __ Push(THR);
-  __ Push(BARRIER_MASK);
+  __ Push(HEAP_BITS);
   SPILLS_LR_TO_FRAME(__ Push(LR));
   __ mov(THR, R2);
-  __ ldr(BARRIER_MASK, Address(THR, Thread::write_barrier_mask_offset()));
+  __ ldr(HEAP_BITS, Address(THR, Thread::write_barrier_mask_offset()));
+  __ LslImmediate(HEAP_BITS, HEAP_BITS, 32);
   __ StoreIntoObject(R1, FieldAddress(R1, GrowableObjectArray::data_offset()),
                      R0);
   RESTORES_LR_FROM_FRAME(__ Pop(LR));
-  __ Pop(BARRIER_MASK);
+  __ Pop(HEAP_BITS);
   __ Pop(THR);
   __ Pop(CODE_REG);
   __ RestoreCSP();
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 4bc8495..81ed419 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -895,6 +895,12 @@
   void SmiTag(Register reg) { OBJ(add)(reg, reg); }
 
   void SmiUntag(Register reg) { OBJ(sar)(reg, Immediate(kSmiTagSize)); }
+  void SmiUntag(Register dst, Register src) {
+    if (dst != src) {
+      OBJ(mov)(dst, src);
+    }
+    OBJ(sar)(dst, Immediate(kSmiTagSize));
+  }
 
   void SmiUntagAndSignExtend(Register reg) {
 #if !defined(DART_COMPRESSED_POINTERS)
@@ -903,11 +909,23 @@
     // This is shorter than
     // shlq reg, 32
     // sraq reg, 33
-    sarl(reg, Immediate(1));
+    sarl(reg, Immediate(kSmiTagSize));
     movsxd(reg, reg);
 #endif
   }
 
+  void SmiUntagAndSignExtend(Register dst, Register src) {
+#if !defined(DART_COMPRESSED_POINTERS)
+    if (dst != src) {
+      movq(dst, src);
+    }
+    sarq(dst, Immediate(kSmiTagSize));
+#else
+    movsxd(dst, src);
+    sarq(dst, Immediate(kSmiTagSize));
+#endif
+  }
+
   void BranchIfNotSmi(Register reg,
                       Label* label,
                       JumpDistance distance = kFarJump) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index d209dc0..fd45478 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -632,12 +632,6 @@
                                       intptr_t sub_type_cache_index);
 #endif
 
-  void GenerateRuntimeCall(const InstructionSource& source,
-                           intptr_t deopt_id,
-                           const RuntimeEntry& entry,
-                           intptr_t argument_count,
-                           LocationSummary* locs);
-
   void GenerateStubCall(const InstructionSource& source,
                         const Code& stub,
                         UntaggedPcDescriptors::Kind kind,
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index ddcfc7a..ab13d29 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -465,15 +465,6 @@
   }
 }
 
-void FlowGraphCompiler::GenerateRuntimeCall(const InstructionSource& source,
-                                            intptr_t deopt_id,
-                                            const RuntimeEntry& entry,
-                                            intptr_t argument_count,
-                                            LocationSummary* locs) {
-  __ CallRuntime(entry, argument_count);
-  EmitCallsiteMetadata(source, deopt_id, UntaggedPcDescriptors::kOther, locs);
-}
-
 void FlowGraphCompiler::EmitEdgeCounter(intptr_t edge_id) {
   // We do not check for overflow when incrementing the edge counter.  The
   // function should normally be optimized long before the counter can
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index 888f4f1..71b11eb 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -458,15 +458,6 @@
   }
 }
 
-void FlowGraphCompiler::GenerateRuntimeCall(const InstructionSource& source,
-                                            intptr_t deopt_id,
-                                            const RuntimeEntry& entry,
-                                            intptr_t argument_count,
-                                            LocationSummary* locs) {
-  __ CallRuntime(entry, argument_count);
-  EmitCallsiteMetadata(source, deopt_id, UntaggedPcDescriptors::kOther, locs);
-}
-
 void FlowGraphCompiler::EmitEdgeCounter(intptr_t edge_id) {
   // We do not check for overflow when incrementing the edge counter.  The
   // function should normally be optimized long before the counter can
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index a506536..1a06f0a 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -500,15 +500,6 @@
   AddStaticCallTarget(target, entry_kind);
 }
 
-void FlowGraphCompiler::GenerateRuntimeCall(const InstructionSource& source,
-                                            intptr_t deopt_id,
-                                            const RuntimeEntry& entry,
-                                            intptr_t argument_count,
-                                            LocationSummary* locs) {
-  __ CallRuntime(entry, argument_count);
-  EmitCallsiteMetadata(source, deopt_id, UntaggedPcDescriptors::kOther, locs);
-}
-
 void FlowGraphCompiler::EmitUnoptimizedStaticCall(
     intptr_t size_with_type_args,
     intptr_t deopt_id,
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 11cfcb6..f334d5c 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -461,15 +461,6 @@
   }
 }
 
-void FlowGraphCompiler::GenerateRuntimeCall(const InstructionSource& source,
-                                            intptr_t deopt_id,
-                                            const RuntimeEntry& entry,
-                                            intptr_t argument_count,
-                                            LocationSummary* locs) {
-  __ CallRuntime(entry, argument_count);
-  EmitCallsiteMetadata(source, deopt_id, UntaggedPcDescriptors::kOther, locs);
-}
-
 void FlowGraphCompiler::EmitUnoptimizedStaticCall(
     intptr_t size_with_type_args,
     intptr_t deopt_id,
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 4b5c5fa..1f688e0 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -2401,7 +2401,6 @@
     }
 
     if (deopt == NULL) {
-      ASSERT(!compiler->is_optimizing());
       __ Bind(fail);
 
       __ ldrh(IP,
@@ -2412,6 +2411,7 @@
 
       __ Push(field_reg);
       __ Push(value_reg);
+      ASSERT(!compiler->is_optimizing());  // No deopt info needed.
       __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
       __ Drop(2);  // Drop the field and the value.
     } else {
@@ -2525,6 +2525,7 @@
 
       __ Push(field_reg);
       __ Push(value_reg);
+      ASSERT(!compiler->is_optimizing());  // No deopt info needed.
       __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
       __ Drop(2);  // Drop the field and the value.
     } else {
@@ -3586,9 +3587,10 @@
           instruction()->deopt_id(), instruction()->source(),
           compiler->CurrentTryIndex());
     } else {
-      compiler->GenerateRuntimeCall(
+      __ CallRuntime(kStackOverflowRuntimeEntry, kNumSlowPathArgs);
+      compiler->EmitCallsiteMetadata(
           instruction()->source(), instruction()->deopt_id(),
-          kStackOverflowRuntimeEntry, kNumSlowPathArgs, instruction()->locs());
+          UntaggedPcDescriptors::kOther, instruction()->locs());
     }
 
     if (compiler->isolate_group()->use_osr() && !compiler->is_optimizing() &&
@@ -5587,9 +5589,8 @@
 }
 
 void CaseInsensitiveCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(TargetFunction().is_leaf());
-
   // Call the function.
+  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
 }
 
@@ -6057,6 +6058,7 @@
   // Args must be in D0 and D1, so move arg from Q1(== D3:D2) to D1.
   __ vmovd(D1, D2);
   if (TargetCPUFeatures::hardfp_supported()) {
+    ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
     __ CallRuntime(instr->TargetFunction(), kInputCount);
   } else {
     // If the ABI is not "hardfp", then we have to move the double arguments
@@ -6064,6 +6066,7 @@
     // registers.
     __ vmovrrd(R0, R1, D0);
     __ vmovrrd(R2, R3, D1);
+    ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
     __ CallRuntime(instr->TargetFunction(), kInputCount);
     __ vmovdrr(D0, R0, R1);
     __ vmovdrr(D1, R2, R3);
@@ -6072,8 +6075,6 @@
 }
 
 void InvokeMathCFunctionInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(TargetFunction().is_leaf());
-
   if (recognized_kind() == MethodRecognizer::kMathDoublePow) {
     InvokeDoublePow(compiler, this);
     return;
@@ -6084,6 +6085,7 @@
     __ vmovd(D1, D2);
   }
   if (TargetCPUFeatures::hardfp_supported()) {
+    ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
     __ CallRuntime(TargetFunction(), InputCount());
   } else {
     // If the ABI is not "hardfp", then we have to move the double arguments
@@ -6091,6 +6093,7 @@
     // registers.
     __ vmovrrd(R0, R1, D0);
     __ vmovrrd(R2, R3, D1);
+    ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
     __ CallRuntime(TargetFunction(), InputCount());
     __ vmovdrr(D0, R0, R1);
     __ vmovdrr(D1, R2, R3);
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index e45eb95..d5a6df9 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -2172,7 +2172,6 @@
     }
 
     if (deopt == NULL) {
-      ASSERT(!compiler->is_optimizing());
       __ Bind(fail);
 
       __ LoadFieldFromOffset(TMP, field_reg, Field::guarded_cid_offset(),
@@ -2181,6 +2180,7 @@
       __ b(&ok, EQ);
 
       __ PushPair(value_reg, field_reg);
+      ASSERT(!compiler->is_optimizing());  // No deopt info needed.
       __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
       __ Drop(2);  // Drop the field and the value.
     } else {
@@ -2285,6 +2285,7 @@
       __ b(&ok, EQ);
 
       __ PushPair(value_reg, field_reg);
+      ASSERT(!compiler->is_optimizing());  // No deopt info needed.
       __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
       __ Drop(2);  // Drop the field and the value.
     } else {
@@ -3181,9 +3182,10 @@
           instruction()->deopt_id(), instruction()->source(),
           compiler->CurrentTryIndex());
     } else {
-      compiler->GenerateRuntimeCall(
+      __ CallRuntime(kStackOverflowRuntimeEntry, kNumSlowPathArgs);
+      compiler->EmitCallsiteMetadata(
           instruction()->source(), instruction()->deopt_id(),
-          kStackOverflowRuntimeEntry, kNumSlowPathArgs, locs);
+          UntaggedPcDescriptors::kOther, instruction()->locs());
     }
 
     if (compiler->isolate_group()->use_osr() && !compiler->is_optimizing() &&
@@ -4673,9 +4675,8 @@
 }
 
 void CaseInsensitiveCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(TargetFunction().is_leaf());
-
   // Call the function.
+  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
 }
 
@@ -5134,17 +5135,17 @@
   __ Bind(&do_pow);
   __ fmovdd(base, saved_base);  // Restore base.
 
+  ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(instr->TargetFunction(), kInputCount);
   __ Bind(&skip_call);
 }
 
 void InvokeMathCFunctionInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(TargetFunction().is_leaf());
-
   if (recognized_kind() == MethodRecognizer::kMathDoublePow) {
     InvokeDoublePow(compiler, this);
     return;
   }
+  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), InputCount());
 }
 
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index f1143d9..4ba570f 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -1903,7 +1903,6 @@
     }
 
     if (deopt == NULL) {
-      ASSERT(!compiler->is_optimizing());
       __ Bind(fail);
 
       __ cmpw(compiler::FieldAddress(field_reg, Field::guarded_cid_offset()),
@@ -1912,6 +1911,7 @@
 
       __ pushl(field_reg);
       __ pushl(value_reg);
+      ASSERT(!compiler->is_optimizing());  // No deopt info needed.
       __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
       __ Drop(2);  // Drop the field and the value.
     } else {
@@ -2021,6 +2021,7 @@
 
       __ pushl(field_reg);
       __ pushl(value_reg);
+      ASSERT(!compiler->is_optimizing());  // No deopt info needed.
       __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
       __ Drop(2);  // Drop the field and the value.
     } else {
@@ -2831,6 +2832,8 @@
 class CheckStackOverflowSlowPath
     : public TemplateSlowPathCode<CheckStackOverflowInstr> {
  public:
+  static constexpr intptr_t kNumSlowPathArgs = 0;
+
   explicit CheckStackOverflowSlowPath(CheckStackOverflowInstr* instruction)
       : TemplateSlowPathCode(instruction) {}
 
@@ -2850,9 +2853,11 @@
     Environment* env = compiler->SlowPathEnvironmentFor(
         instruction(), /*num_slow_path_args=*/0);
     compiler->pending_deoptimization_env_ = env;
-    compiler->GenerateRuntimeCall(
+
+    __ CallRuntime(kStackOverflowRuntimeEntry, kNumSlowPathArgs);
+    compiler->EmitCallsiteMetadata(
         instruction()->source(), instruction()->deopt_id(),
-        kStackOverflowRuntimeEntry, 0, instruction()->locs());
+        UntaggedPcDescriptors::kOther, instruction()->locs());
 
     if (compiler->isolate_group()->use_osr() && !compiler->is_optimizing() &&
         instruction()->in_loop()) {
@@ -4787,8 +4792,6 @@
 }
 
 void CaseInsensitiveCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(TargetFunction().is_leaf());
-
   // Save ESP. EDI is chosen because it is callee saved so we do not need to
   // back it up before calling into the runtime.
   static const Register kSavedSPReg = EDI;
@@ -4801,6 +4804,7 @@
   __ movl(compiler::Address(ESP, +3 * kWordSize), locs()->in(3).reg());
 
   // Call the function.
+  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
 
   // Restore ESP and pop the old value off the stack.
@@ -5287,6 +5291,7 @@
   for (intptr_t i = 0; i < kInputCount; i++) {
     __ movsd(compiler::Address(ESP, kDoubleSize * i), locs->in(i).fpu_reg());
   }
+  ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(instr->TargetFunction(), kInputCount);
   __ fstpl(compiler::Address(ESP, 0));
   __ movsd(locs->out(0).fpu_reg(), compiler::Address(ESP, 0));
@@ -5296,8 +5301,6 @@
 }
 
 void InvokeMathCFunctionInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(TargetFunction().is_leaf());
-
   if (recognized_kind() == MethodRecognizer::kMathDoublePow) {
     InvokeDoublePow(compiler, this);
     return;
@@ -5309,6 +5312,7 @@
     __ movsd(compiler::Address(ESP, kDoubleSize * i), locs()->in(i).fpu_reg());
   }
 
+  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), InputCount());
   __ fstpl(compiler::Address(ESP, 0));
   __ movsd(locs()->out(0).fpu_reg(), compiler::Address(ESP, 0));
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index 10fae2a..01e23d2 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -2159,7 +2159,6 @@
     }
 
     if (deopt == NULL) {
-      ASSERT(!compiler->is_optimizing());
       __ Bind(fail);
 
       __ cmpw(compiler::FieldAddress(field_reg, Field::guarded_cid_offset()),
@@ -2168,6 +2167,7 @@
 
       __ pushq(field_reg);
       __ pushq(value_reg);
+      ASSERT(!compiler->is_optimizing());  // No deopt info needed.
       __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
       __ Drop(2);  // Drop the field and the value.
     } else {
@@ -2273,6 +2273,7 @@
 
       __ pushq(field_reg);
       __ pushq(value_reg);
+      ASSERT(!compiler->is_optimizing());  // No deopt info needed.
       __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
       __ Drop(2);  // Drop the field and the value.
     } else {
@@ -2367,6 +2368,7 @@
     __ Bind(&call_runtime);
     __ PushObject(original);
     __ pushq(value_reg);
+    ASSERT(!compiler->is_optimizing());  // No deopt info needed.
     __ CallRuntime(kUpdateFieldCidRuntimeEntry, 2);
     __ Drop(2);
   }
@@ -3267,9 +3269,10 @@
           instruction()->deopt_id(), instruction()->source(),
           compiler->CurrentTryIndex());
     } else {
-      compiler->GenerateRuntimeCall(
+      __ CallRuntime(kStackOverflowRuntimeEntry, kNumSlowPathArgs);
+      compiler->EmitCallsiteMetadata(
           instruction()->source(), instruction()->deopt_id(),
-          kStackOverflowRuntimeEntry, kNumSlowPathArgs, instruction()->locs());
+          UntaggedPcDescriptors::kOther, instruction()->locs());
     }
 
     if (compiler->isolate_group()->use_osr() && !compiler->is_optimizing() &&
@@ -4071,7 +4074,11 @@
   summary->set_in(0, needs_writable_input ? Location::WritableRegister()
                                           : Location::RequiresRegister());
   if (RepresentationUtils::IsUnboxedInteger(representation())) {
+#if !defined(DART_COMPRESSED_POINTERS)
     summary->set_out(0, Location::SameAsFirstInput());
+#else
+    summary->set_out(0, Location::RequiresRegister());
+#endif
   } else {
     summary->set_out(0, Location::RequiresFpuRegister());
   }
@@ -4119,14 +4126,16 @@
   const Register box = locs()->in(0).reg();
 
   switch (representation()) {
-    case kUnboxedInt32:
-    case kUnboxedInt64: {
+    case kUnboxedInt32: {
       const Register result = locs()->out(0).reg();
-      ASSERT(result == box);
-      __ SmiUntagAndSignExtend(box);
+      __ SmiUntag(result, box);
       break;
     }
-
+    case kUnboxedInt64: {
+      const Register result = locs()->out(0).reg();
+      __ SmiUntagAndSignExtend(result, box);
+      break;
+    }
     case kUnboxedDouble: {
       const FpuRegister result = locs()->out(0).fpu_reg();
       __ SmiUntag(box);
@@ -4143,22 +4152,18 @@
 void UnboxInstr::EmitLoadInt32FromBoxOrSmi(FlowGraphCompiler* compiler) {
   const Register value = locs()->in(0).reg();
   const Register result = locs()->out(0).reg();
-  ASSERT(value == result);
   compiler::Label done;
 #if !defined(DART_COMPRESSED_POINTERS)
+  ASSERT(value == result);
   __ SmiUntag(value);
   __ j(NOT_CARRY, &done, compiler::Assembler::kNearJump);
   __ movsxw(result, compiler::Address(value, TIMES_2, Mint::value_offset()));
 #else
-  // Cannot speculatively untag because it erases the upper bits needed to
-  // dereference when it is a Mint.
-  // TODO(compressed-pointers): It would probably be cheaper to make
-  // result != value with compressed pointers.
-  compiler::Label not_smi;
-  __ BranchIfNotSmi(value, &not_smi, compiler::Assembler::kNearJump);
-  __ SmiUntagAndSignExtend(value);
-  __ jmp(&done, compiler::Assembler::kNearJump);
-  __ Bind(&not_smi);
+  ASSERT(value != result);
+  // Cannot speculatively untag with value == result because it erases the
+  // upper bits needed to dereference when it is a Mint.
+  __ SmiUntagAndSignExtend(result, value);
+  __ j(NOT_CARRY, &done, compiler::Assembler::kNearJump);
   __ movsxw(result, compiler::FieldAddress(value, Mint::value_offset()));
 #endif
   __ Bind(&done);
@@ -4167,24 +4172,21 @@
 void UnboxInstr::EmitLoadInt64FromBoxOrSmi(FlowGraphCompiler* compiler) {
   const Register value = locs()->in(0).reg();
   const Register result = locs()->out(0).reg();
-  ASSERT(value == result);
   compiler::Label done;
 #if !defined(DART_COMPRESSED_POINTERS)
+  ASSERT(value == result);
   __ SmiUntag(value);
   __ j(NOT_CARRY, &done, compiler::Assembler::kNearJump);
-  __ movq(value, compiler::Address(value, TIMES_2, Mint::value_offset()));
-  __ Bind(&done);
+  __ movq(result, compiler::Address(value, TIMES_2, Mint::value_offset()));
 #else
-  // Cannot speculatively untag because it erases the upper bits needed to
-  // dereference when it is a Mint.
-  compiler::Label not_smi;
-  __ BranchIfNotSmi(value, &not_smi, compiler::Assembler::kNearJump);
-  __ SmiUntagAndSignExtend(value);
-  __ jmp(&done, compiler::Assembler::kNearJump);
-  __ Bind(&not_smi);
-  __ movq(value, compiler::FieldAddress(value, Mint::value_offset()));
-  __ Bind(&done);
+  ASSERT(value != result);
+  // Cannot speculatively untag with value == result because it erases the
+  // upper bits needed to dereference when it is a Mint.
+  __ SmiUntagAndSignExtend(result, value);
+  __ j(NOT_CARRY, &done, compiler::Assembler::kNearJump);
+  __ movq(result, compiler::FieldAddress(value, Mint::value_offset()));
 #endif
+  __ Bind(&done);
 }
 
 LocationSummary* UnboxInteger32Instr::MakeLocationSummary(Zone* zone,
@@ -4989,8 +4991,6 @@
 }
 
 void CaseInsensitiveCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(TargetFunction().is_leaf());
-
   // Save RSP. R13 is chosen because it is callee saved so we do not need to
   // back it up before calling into the runtime.
   static const Register kSavedSPReg = R13;
@@ -4998,6 +4998,7 @@
   __ ReserveAlignedFrameSpace(0);
 
   // Call the function. Parameters are already in their correct spots.
+  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
 
   // Restore RSP.
@@ -5470,6 +5471,7 @@
   __ movaps(XMM0, locs->in(0).fpu_reg());
   ASSERT(locs->in(1).fpu_reg() == XMM1);
 
+  ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(instr->TargetFunction(), kInputCount);
   __ movaps(locs->out(0).fpu_reg(), XMM0);
   // Restore RSP.
@@ -5478,8 +5480,6 @@
 }
 
 void InvokeMathCFunctionInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  ASSERT(TargetFunction().is_leaf());
-
   if (recognized_kind() == MethodRecognizer::kMathDoublePow) {
     InvokeDoublePow(compiler, this);
     return;
@@ -5492,6 +5492,7 @@
     ASSERT(locs()->in(1).fpu_reg() == XMM1);
   }
 
+  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), InputCount());
   __ movaps(locs()->out(0).fpu_reg(), XMM0);
   // Restore RSP.
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.cc b/runtime/vm/compiler/backend/redundancy_elimination.cc
index 7b27daf..9114a2a 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination.cc
@@ -444,8 +444,8 @@
 
   static bool IsAllocation(Definition* defn) {
     return (defn != NULL) &&
-           (defn->IsAllocateObject() || defn->IsCreateArray() ||
-            defn->IsAllocateTypedData() ||
+           (defn->IsAllocateObject() || defn->IsAllocateClosure() ||
+            defn->IsCreateArray() || defn->IsAllocateTypedData() ||
             defn->IsAllocateUninitializedContext() ||
             (defn->IsStaticCall() &&
              defn->AsStaticCall()->IsRecognizedFactory()));
@@ -1554,7 +1554,9 @@
     for (ForwardInstructionIterator instr_it(block); !instr_it.Done();
          instr_it.Advance()) {
       Definition* def = instr_it.Current()->AsDefinition();
-      if (def != nullptr && (def->IsAllocateObject() || def->IsCreateArray()) &&
+      if (def != nullptr &&
+          (def->IsAllocateObject() || def->IsAllocateClosure() ||
+           def->IsCreateArray()) &&
           def->env() == nullptr && !moved.HasKey(def)) {
         Instruction* use = DominantUse(def);
         if (use != nullptr && !use->IsPhi() && IsOneTimeUse(use, def)) {
diff --git a/runtime/vm/compiler/backend/slot.cc b/runtime/vm/compiler/backend/slot.cc
index 670e1d6..e541010 100644
--- a/runtime/vm/compiler/backend/slot.cc
+++ b/runtime/vm/compiler/backend/slot.cc
@@ -122,18 +122,17 @@
 const Slot& Slot::GetNativeSlot(Kind kind) {
   if (native_fields_.load() == nullptr) {
     Slot* new_value = new Slot[kNativeSlotsCount]{
-#define NULLABLE_FIELD_FINAL                                                   \
-  (IsNullableBit::encode(true) | IsImmutableBit::encode(true))
-#define NULLABLE_FIELD_FINAL_COMPRESSED                                        \
+#define NULLABLE_FIELD_FINAL(ClassName)                                        \
   (IsNullableBit::encode(true) | IsImmutableBit::encode(true) |                \
-   IsCompressedBit::encode(true))
-#define NULLABLE_FIELD_VAR (IsNullableBit::encode(true))
-#define NULLABLE_FIELD_VAR_COMPRESSED                                          \
-  (IsNullableBit::encode(true) | IsCompressedBit::encode(true))
+   IsCompressedBit::encode(ClassName::ContainsCompressedPointers()))
+#define NULLABLE_FIELD_VAR(ClassName)                                          \
+  (IsNullableBit::encode(true) |                                               \
+   IsCompressedBit::encode(ClassName::ContainsCompressedPointers()))
 #define DEFINE_NULLABLE_BOXED_NATIVE_FIELD(ClassName, UnderlyingType,          \
                                            FieldName, cid, mutability)         \
-  Slot(Kind::k##ClassName##_##FieldName, NULLABLE_FIELD_##mutability,          \
-       k##cid##Cid, compiler::target::ClassName::FieldName##_offset(),         \
+  Slot(Kind::k##ClassName##_##FieldName,                                       \
+       NULLABLE_FIELD_##mutability(ClassName), k##cid##Cid,                    \
+       compiler::target::ClassName::FieldName##_offset(),                      \
        #ClassName "." #FieldName, nullptr, kTagged),
 
         NULLABLE_BOXED_NATIVE_SLOTS_LIST(DEFINE_NULLABLE_BOXED_NATIVE_FIELD)
@@ -142,24 +141,30 @@
 #undef NULLABLE_FIELD_FINAL
 #undef NULLABLE_FIELD_VAR
 
-#define NONNULLABLE_FIELD_FINAL (Slot::IsImmutableBit::encode(true))
-#define NONNULLABLE_FIELD_FINAL_COMPRESSED                                     \
-  (Slot::IsImmutableBit::encode(true) | Slot::IsCompressedBit::encode(true))
-#define NONNULLABLE_FIELD_VAR (0)
-#define NONNULLABLE_FIELD_VAR_COMPRESSED (Slot::IsCompressedBit::encode(true))
+#define NONNULLABLE_FIELD_FINAL(ClassName)                                     \
+  (Slot::IsImmutableBit::encode(true) |                                        \
+   IsCompressedBit::encode(ClassName::ContainsCompressedPointers()))
+#define NONNULLABLE_FIELD_VAR(ClassName)                                       \
+  (IsCompressedBit::encode(ClassName::ContainsCompressedPointers()))
 #define DEFINE_NONNULLABLE_BOXED_NATIVE_FIELD(ClassName, UnderlyingType,       \
                                               FieldName, cid, mutability)      \
-  Slot(Kind::k##ClassName##_##FieldName, NONNULLABLE_FIELD_##mutability,       \
-       k##cid##Cid, compiler::target::ClassName::FieldName##_offset(),         \
+  Slot(Kind::k##ClassName##_##FieldName,                                       \
+       NONNULLABLE_FIELD_##mutability(ClassName), k##cid##Cid,                 \
+       compiler::target::ClassName::FieldName##_offset(),                      \
        #ClassName "." #FieldName, nullptr, kTagged),
 
             NONNULLABLE_BOXED_NATIVE_SLOTS_LIST(
                 DEFINE_NONNULLABLE_BOXED_NATIVE_FIELD)
 
 #undef DEFINE_NONNULLABLE_BOXED_NATIVE_FIELD
+#undef NONNULLABLE_FIELD_VAR
+#undef NONNULLABLE_FIELD_FINAL
+
+#define UNBOXED_FIELD_FINAL (Slot::IsImmutableBit::encode(true))
+#define UNBOXED_FIELD_VAR (0)
 #define DEFINE_UNBOXED_NATIVE_FIELD(ClassName, UnderlyingType, FieldName,      \
                                     representation, mutability)                \
-  Slot(Kind::k##ClassName##_##FieldName, NONNULLABLE_FIELD_##mutability,       \
+  Slot(Kind::k##ClassName##_##FieldName, UNBOXED_FIELD_##mutability,           \
        GetUnboxedNativeSlotCid(kUnboxed##representation),                      \
        compiler::target::ClassName::FieldName##_offset(),                      \
        #ClassName "." #FieldName, nullptr, kUnboxed##representation),
@@ -167,8 +172,8 @@
                 UNBOXED_NATIVE_SLOTS_LIST(DEFINE_UNBOXED_NATIVE_FIELD)
 
 #undef DEFINE_UNBOXED_NATIVE_FIELD
-#undef NONNULLABLE_FIELD_VAR
-#undef NONNULLABLE_FIELD_FINAL
+#undef UNBOXED_FIELD_VAR
+#undef UNBOXED_FIELD_FINAL
     };
     Slot* old_value = nullptr;
     if (!native_fields_.compare_exchange_strong(old_value, new_value)) {
@@ -211,10 +216,12 @@
 
 const Slot& Slot::GetTypeArgumentsSlotAt(Thread* thread, intptr_t offset) {
   ASSERT(offset != Class::kNoTypeArguments);
-  return SlotCache::Instance(thread).Canonicalize(
-      Slot(Kind::kTypeArguments, IsImmutableBit::encode(true),
-           kTypeArgumentsCid, offset, ":type_arguments",
-           /*static_type=*/nullptr, kTagged));
+  return SlotCache::Instance(thread).Canonicalize(Slot(
+      Kind::kTypeArguments,
+      IsImmutableBit::encode(true) |
+          IsCompressedBit::encode(TypeArguments::ContainsCompressedPointers()),
+      kTypeArgumentsCid, offset, ":type_arguments",
+      /*static_type=*/nullptr, kTagged));
 }
 
 const Slot& Slot::GetTypeArgumentsSlotFor(Thread* thread, const Class& cls) {
@@ -228,7 +235,8 @@
   return SlotCache::Instance(thread).Canonicalize(
       Slot(Kind::kCapturedVariable,
            IsImmutableBit::encode(variable.is_final() && !variable.is_late()) |
-               IsNullableBit::encode(true),
+               IsNullableBit::encode(true) |
+               IsCompressedBit::encode(Context::ContainsCompressedPointers()),
            kDynamicCid,
            compiler::target::Context::variable_offset(variable.index().value()),
            &variable.name(), &variable.type(), kTagged));
@@ -237,18 +245,22 @@
 const Slot& Slot::GetTypeArgumentsIndexSlot(Thread* thread, intptr_t index) {
   const intptr_t offset =
       compiler::target::TypeArguments::type_at_offset(index);
-  const Slot& slot =
-      Slot(Kind::kTypeArgumentsIndex,
-           IsImmutableBit::encode(true) | IsCompressedBit::encode(true),
-           kDynamicCid, offset, ":argument", /*static_type=*/nullptr, kTagged);
+  const Slot& slot = Slot(
+      Kind::kTypeArgumentsIndex,
+      IsImmutableBit::encode(true) |
+          IsCompressedBit::encode(TypeArguments::ContainsCompressedPointers()),
+      kDynamicCid, offset, ":argument", /*static_type=*/nullptr, kTagged);
   return SlotCache::Instance(thread).Canonicalize(slot);
 }
 
 const Slot& Slot::GetArrayElementSlot(Thread* thread,
                                       intptr_t offset_in_bytes) {
   const Slot& slot =
-      Slot(Kind::kArrayElement, IsNullableBit::encode(true), kDynamicCid,
-           offset_in_bytes, ":array_element", /*static_type=*/nullptr, kTagged);
+      Slot(Kind::kArrayElement,
+           IsNullableBit::encode(true) |
+               IsCompressedBit::encode(Array::ContainsCompressedPointers()),
+           kDynamicCid, offset_in_bytes, ":array_element",
+           /*static_type=*/nullptr, kTagged);
   return SlotCache::Instance(thread).Canonicalize(slot);
 }
 
@@ -306,12 +318,15 @@
     }
   }
 
+  Class& owner = Class::Handle(zone, field.Owner());
   const Slot& slot = SlotCache::Instance(thread).Canonicalize(
       Slot(Kind::kDartField,
            IsImmutableBit::encode((field.is_final() && !field.is_late()) ||
                                   field.is_const()) |
                IsNullableBit::encode(is_nullable) |
-               IsGuardedBit::encode(used_guarded_state),
+               IsGuardedBit::encode(used_guarded_state) |
+               IsCompressedBit::encode(
+                   compiler::target::Class::HasCompressedPointers(owner)),
            nullable_cid, compiler::target::Field::OffsetOf(field), &field,
            &type, rep));
 
diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h
index a9ff524..bfcf561 100644
--- a/runtime/vm/compiler/backend/slot.h
+++ b/runtime/vm/compiler/backend/slot.h
@@ -52,20 +52,18 @@
 //   (i.e. initialized once at construction time and does not change after
 //   that) or like a non-final field.
 #define NULLABLE_BOXED_NATIVE_SLOTS_LIST(V)                                    \
-  V(Function, UntaggedFunction, signature, FunctionType, FINAL_COMPRESSED)     \
+  V(Function, UntaggedFunction, signature, FunctionType, FINAL)                \
   V(Context, UntaggedContext, parent, Context, FINAL)                          \
   V(Closure, UntaggedClosure, instantiator_type_arguments, TypeArguments,      \
     FINAL)                                                                     \
   V(Closure, UntaggedClosure, delayed_type_arguments, TypeArguments, FINAL)    \
   V(Closure, UntaggedClosure, function_type_arguments, TypeArguments, FINAL)   \
-  V(Type, UntaggedType, arguments, TypeArguments, FINAL_COMPRESSED)            \
+  V(Type, UntaggedType, arguments, TypeArguments, FINAL)                       \
   V(FunctionType, UntaggedFunctionType, type_parameters, TypeParameters,       \
-    FINAL_COMPRESSED)                                                          \
-  V(TypeParameters, UntaggedTypeParameters, flags, Array, FINAL_COMPRESSED)    \
-  V(TypeParameters, UntaggedTypeParameters, bounds, TypeArguments,             \
-    FINAL_COMPRESSED)                                                          \
-  V(TypeParameters, UntaggedTypeParameters, defaults, TypeArguments,           \
-    FINAL_COMPRESSED)                                                          \
+    FINAL)                                                                     \
+  V(TypeParameters, UntaggedTypeParameters, flags, Array, FINAL)               \
+  V(TypeParameters, UntaggedTypeParameters, bounds, TypeArguments, FINAL)      \
+  V(TypeParameters, UntaggedTypeParameters, defaults, TypeArguments, FINAL)    \
   V(WeakProperty, UntaggedWeakProperty, key, Dynamic, VAR)                     \
   V(WeakProperty, UntaggedWeakProperty, value, Dynamic, VAR)
 
@@ -87,18 +85,15 @@
   V(Closure, UntaggedClosure, function, Function, FINAL)                       \
   V(Closure, UntaggedClosure, context, Context, FINAL)                         \
   V(Closure, UntaggedClosure, hash, Context, VAR)                              \
-  V(Function, UntaggedFunction, data, Dynamic, FINAL_COMPRESSED)               \
-  V(FunctionType, UntaggedFunctionType, parameter_names, Array,                \
-    FINAL_COMPRESSED)                                                          \
-  V(FunctionType, UntaggedFunctionType, parameter_types, Array,                \
-    FINAL_COMPRESSED)                                                          \
+  V(Function, UntaggedFunction, data, Dynamic, FINAL)                          \
+  V(FunctionType, UntaggedFunctionType, parameter_names, Array, FINAL)         \
+  V(FunctionType, UntaggedFunctionType, parameter_types, Array, FINAL)         \
   V(GrowableObjectArray, UntaggedGrowableObjectArray, length, Smi, VAR)        \
   V(GrowableObjectArray, UntaggedGrowableObjectArray, data, Array, VAR)        \
-  V(TypedDataBase, UntaggedTypedDataBase, length, Smi, FINAL_COMPRESSED)       \
-  V(TypedDataView, UntaggedTypedDataView, offset_in_bytes, Smi,                \
-    FINAL_COMPRESSED)                                                          \
-  V(TypedDataView, UntaggedTypedDataView, data, Dynamic, FINAL_COMPRESSED)     \
-  V(String, UntaggedString, length, Smi, FINAL_COMPRESSED)                     \
+  V(TypedDataBase, UntaggedTypedDataBase, length, Smi, FINAL)                  \
+  V(TypedDataView, UntaggedTypedDataView, offset_in_bytes, Smi, FINAL)         \
+  V(TypedDataView, UntaggedTypedDataView, data, Dynamic, FINAL)                \
+  V(String, UntaggedString, length, Smi, FINAL)                                \
   V(LinkedHashMap, UntaggedLinkedHashMap, index, TypedDataUint32Array, VAR)    \
   V(LinkedHashMap, UntaggedLinkedHashMap, data, Array, VAR)                    \
   V(LinkedHashMap, UntaggedLinkedHashMap, hash_mask, Smi, VAR)                 \
@@ -109,13 +104,11 @@
   V(ArgumentsDescriptor, UntaggedArray, count, Smi, FINAL)                     \
   V(ArgumentsDescriptor, UntaggedArray, size, Smi, FINAL)                      \
   V(PointerBase, UntaggedPointerBase, data_field, Dynamic, FINAL)              \
-  V(TypeArguments, UntaggedTypeArguments, length, Smi, FINAL_COMPRESSED)       \
-  V(TypeParameters, UntaggedTypeParameters, names, Array, FINAL_COMPRESSED)    \
-  V(TypeParameter, UntaggedTypeParameter, bound, Dynamic, FINAL_COMPRESSED)    \
-  V(UnhandledException, UntaggedUnhandledException, exception, Dynamic,        \
-    FINAL_COMPRESSED)                                                          \
-  V(UnhandledException, UntaggedUnhandledException, stacktrace, Dynamic,       \
-    FINAL_COMPRESSED)
+  V(TypeArguments, UntaggedTypeArguments, length, Smi, FINAL)                  \
+  V(TypeParameters, UntaggedTypeParameters, names, Array, FINAL)               \
+  V(TypeParameter, UntaggedTypeParameter, bound, Dynamic, FINAL)               \
+  V(UnhandledException, UntaggedUnhandledException, exception, Dynamic, FINAL) \
+  V(UnhandledException, UntaggedUnhandledException, stacktrace, Dynamic, FINAL)
 
 // List of slots that correspond to unboxed fields of native objects in the
 // following format:
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index 7f52832..48b7da7 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -444,6 +444,16 @@
                         ObjectAlignment::kObjectAlignment);
 }
 
+// Currently, we only have compressed pointers on the target if we also have
+// compressed pointers on the host, since only 64-bit architectures can have
+// compressed pointers and there is no 32-bit host/64-bit target combination.
+// Thus, we cheat a little here and use the host information about compressed
+// pointers for the target, instead of storing this information in the extracted
+// offsets information.
+bool Class::HasCompressedPointers(const dart::Class& handle) {
+  return handle.HasCompressedPointers();
+}
+
 intptr_t Class::NumTypeArguments(const dart::Class& klass) {
   return klass.NumTypeArguments();
 }
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index 4dea5ad..e389c80 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -486,6 +486,10 @@
   // Return instance size for the given class on the target.
   static uword GetInstanceSize(const dart::Class& handle);
 
+  // Return whether objects of the class on the target contain compressed
+  // pointers.
+  static bool HasCompressedPointers(const dart::Class& handle);
+
   // Returns the number of type arguments.
   static intptr_t NumTypeArguments(const dart::Class& klass);
 
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index ff5bee2..bdd8b3c 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -2093,7 +2093,7 @@
     Thread_write_barrier_wrappers_thread_offset[] = {
         1376, 1384, 1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456,
         1464, 1472, 1480, 1488, -1,   -1,   -1,   -1,   1496, 1504, -1,
-        -1,   -1,   1512, 1520, -1,   -1,   -1,   -1,   -1,   -1};
+        -1,   1512, 1520, 1528, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -3182,7 +3182,7 @@
     Thread_write_barrier_wrappers_thread_offset[] = {
         1376, 1384, 1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456,
         1464, 1472, 1480, 1488, -1,   -1,   -1,   -1,   1496, 1504, -1,
-        -1,   -1,   1512, 1520, -1,   -1,   -1,   -1,   -1,   -1};
+        -1,   1512, 1520, 1528, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -5324,7 +5324,7 @@
     Thread_write_barrier_wrappers_thread_offset[] = {
         1376, 1384, 1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456,
         1464, 1472, 1480, 1488, -1,   -1,   -1,   -1,   1496, 1504, -1,
-        -1,   -1,   1512, 1520, -1,   -1,   -1,   -1,   -1,   -1};
+        -1,   1512, 1520, 1528, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -6401,7 +6401,7 @@
     Thread_write_barrier_wrappers_thread_offset[] = {
         1376, 1384, 1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456,
         1464, 1472, 1480, 1488, -1,   -1,   -1,   -1,   1496, 1504, -1,
-        -1,   -1,   1512, 1520, -1,   -1,   -1,   -1,   -1,   -1};
+        -1,   1512, 1520, 1528, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -8206,7 +8206,7 @@
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
         1376, 1384, 1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456,
         1464, 1472, 1480, 1488, -1,   -1,   -1,   -1,   1496, 1504, -1,
-        -1,   -1,   1512, 1520, -1,   -1,   -1,   -1,   -1,   -1};
+        -1,   1512, 1520, 1528, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9417,7 +9417,7 @@
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
         1376, 1384, 1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456,
         1464, 1472, 1480, 1488, -1,   -1,   -1,   -1,   1496, 1504, -1,
-        -1,   -1,   1512, 1520, -1,   -1,   -1,   -1,   -1,   -1};
+        -1,   1512, 1520, 1528, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11213,7 +11213,7 @@
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
         1376, 1384, 1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456,
         1464, 1472, 1480, 1488, -1,   -1,   -1,   -1,   1496, 1504, -1,
-        -1,   -1,   1512, 1520, -1,   -1,   -1,   -1,   -1,   -1};
+        -1,   1512, 1520, 1528, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12410,7 +12410,7 @@
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
         1376, 1384, 1392, 1400, 1408, 1416, 1424, 1432, 1440, 1448, 1456,
         1464, 1472, 1480, 1488, -1,   -1,   -1,   -1,   1496, 1504, -1,
-        -1,   -1,   1512, 1520, -1,   -1,   -1,   -1,   -1,   -1};
+        -1,   1512, 1520, 1528, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index d82871e..8abe440 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -54,12 +54,12 @@
   R20 = 20,
   R21 = 21,  // DISPATCH_TABLE_REG
   R22 = 22,  // NULL_REG
-  R23 = 23,  // HEAP_BASE
+  R23 = 23,
   R24 = 24,
   R25 = 25,
   R26 = 26,  // THR
   R27 = 27,  // PP
-  R28 = 28,  // BARRIER_MASK
+  R28 = 28,  // HEAP_BITS
   R29 = 29,  // FP
   R30 = 30,  // LR
   R31 = 31,  // ZR, CSP
@@ -141,9 +141,8 @@
 const Register THR = R26;           // Caches current thread in generated code.
 const Register CALLEE_SAVED_TEMP = R19;
 const Register CALLEE_SAVED_TEMP2 = R20;
-const Register BARRIER_MASK = R28;
+const Register HEAP_BITS = R28;  // write_barrier_mask << 32 | heap_base >> 32
 const Register NULL_REG = R22;  // Caches NullObject() value.
-const Register HEAP_BASE = R23;
 
 // ABI for catch-clause entry point.
 const Register kExceptionObjectReg = R0;
@@ -367,11 +366,11 @@
 const VRegister kAbiLastPreservedFpuReg = V15;
 const int kAbiPreservedFpuRegCount = 8;
 
-const intptr_t kReservedCpuRegisters =
-    R(SPREG) |  // Dart SP
-    R(FPREG) | R(TMP) | R(TMP2) | R(PP) | R(THR) | R(LR) | R(BARRIER_MASK) |
-    R(NULL_REG) | R(HEAP_BASE) | R(R31) |  // C++ SP
-    R(R18) | R(DISPATCH_TABLE_REG);
+const intptr_t kReservedCpuRegisters = R(SPREG) |  // Dart SP
+                                       R(FPREG) | R(TMP) | R(TMP2) | R(PP) |
+                                       R(THR) | R(LR) | R(HEAP_BITS) |
+                                       R(NULL_REG) | R(R31) |  // C++ SP
+                                       R(R18) | R(DISPATCH_TABLE_REG);
 constexpr intptr_t kNumberOfReservedCpuRegisters = 13;
 // CPU registers available to Dart allocator.
 const RegList kDartAvailableCpuRegs =
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 53250c5..cf63124 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -861,7 +861,9 @@
   }
 
   Object::VerifyBuiltinVtables();
-  DEBUG_ONLY(IG->heap()->Verify(kForbidMarked));
+  if (T->isolate()->origin_id() == 0) {
+    DEBUG_ONLY(IG->heap()->Verify(kForbidMarked));
+  }
 
 #if defined(DART_PRECOMPILED_RUNTIME)
   const bool kIsAotRuntime = true;
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 842bc8f..2e26b48 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1499,7 +1499,9 @@
     StackZone zone(T);
     HandleScope handle_scope(T);
 #if defined(DEBUG)
-    T->isolate_group()->ValidateConstants();
+    if (T->isolate()->origin_id() == 0) {
+      T->isolate_group()->ValidateConstants();
+    }
 #endif
     Dart::RunShutdownCallback();
   }
diff --git a/runtime/vm/dart_entry.h b/runtime/vm/dart_entry.h
index d91d838..13d10fa 100644
--- a/runtime/vm/dart_entry.h
+++ b/runtime/vm/dart_entry.h
@@ -122,6 +122,12 @@
 
   enum { kCachedDescriptorCount = 32 };
 
+  // For creating ArgumentDescriptor Slots.
+  static constexpr bool ContainsCompressedPointers() {
+    // Use the same state as the backing store.
+    return Array::ContainsCompressedPointers();
+  }
+
  private:
   // Absolute indices into the array.
   // Keep these in sync with the constants in invocation_mirror_patch.dart.
diff --git a/runtime/vm/experimental_features.cc b/runtime/vm/experimental_features.cc
index 18c32a0..c1467f5 100644
--- a/runtime/vm/experimental_features.cc
+++ b/runtime/vm/experimental_features.cc
@@ -18,7 +18,15 @@
 
 bool GetExperimentalFeatureDefault(ExperimentalFeature feature) {
   constexpr bool kFeatureValues[] = {
-      true, true, true, true, true, true, true, true, true,
+    true,
+    true,
+    true,
+    true,
+    true,
+    true,
+    true,
+    true,
+    true,
   };
   ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureValues));
   return kFeatureValues[static_cast<int>(feature)];
@@ -26,15 +34,15 @@
 
 const char* GetExperimentalFeatureName(ExperimentalFeature feature) {
   constexpr const char* kFeatureNames[] = {
-      "nonfunction-type-aliases",
-      "non-nullable",
-      "extension-methods",
-      "constant-update-2018",
-      "control-flow-collections",
-      "generic-metadata",
-      "set-literals",
-      "spread-collections",
-      "triple-shift",
+    "nonfunction-type-aliases",
+    "non-nullable",
+    "extension-methods",
+    "constant-update-2018",
+    "control-flow-collections",
+    "generic-metadata",
+    "set-literals",
+    "spread-collections",
+    "triple-shift",
   };
   ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureNames));
   return kFeatureNames[static_cast<int>(feature)];
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 7842aa3..6a402e1 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -15255,8 +15255,8 @@
   if (num_entries() == 0) {
     return "empty ExceptionHandlers\n";
   }
-  Array& handled_types = Array::Handle();
-  Type& type = Type::Handle();
+  auto& handled_types = Array::Handle();
+  auto& type = AbstractType::Handle();
   ExceptionHandlerInfo info;
   // First compute the buffer size required.
   intptr_t len = 1;  // Trailing '\0'.
diff --git a/runtime/vm/runtime_entry_arm64.cc b/runtime/vm/runtime_entry_arm64.cc
index 9e48050..465c0fd9 100644
--- a/runtime/vm/runtime_entry_arm64.cc
+++ b/runtime/vm/runtime_entry_arm64.cc
@@ -76,8 +76,7 @@
     COMPILE_ASSERT(IsAbiPreservedRegister(THR));
     COMPILE_ASSERT(IsAbiPreservedRegister(PP));
     COMPILE_ASSERT(IsAbiPreservedRegister(NULL_REG));
-    COMPILE_ASSERT(IsAbiPreservedRegister(BARRIER_MASK));
-    COMPILE_ASSERT(IsAbiPreservedRegister(HEAP_BASE));
+    COMPILE_ASSERT(IsAbiPreservedRegister(HEAP_BITS));
     COMPILE_ASSERT(IsAbiPreservedRegister(DISPATCH_TABLE_REG));
     // These registers must be preserved by the runtime functions, otherwise
     // we'd need to restore them here.
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index 11cf428..3b5182d 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -3735,11 +3735,10 @@
   pp -= kHeapObjectTag;  // In the PP register, the pool pointer is untagged.
   set_register(NULL, CODE_REG, code);
   set_register(NULL, PP, pp);
-  set_register(NULL, BARRIER_MASK, thread->write_barrier_mask());
+  set_register(
+      NULL, HEAP_BITS,
+      (thread->write_barrier_mask() << 32) | (thread->heap_base() >> 32));
   set_register(NULL, NULL_REG, static_cast<int64_t>(Object::null()));
-#if defined(DART_COMPRESSED_POINTERS)
-  set_register(NULL, HEAP_BASE, thread->heap_base());
-#endif
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
     set_register(NULL, DISPATCH_TABLE_REG,
                  reinterpret_cast<int64_t>(thread->dispatch_table_array()));
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 1390092..3734869 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -280,19 +280,6 @@
   ]
 }
 
-if (is_win) {
-  copy_tree_specs += [
-    {
-      target = "copy_7zip"
-      visibility = [ ":create_common_sdk" ]
-      deps = [ ":copy_libraries" ]
-      source = "../third_party/7zip"
-      dest = "$root_out_dir/dart-sdk/lib/_internal/pub/asset/7zip"
-      ignore_patterns = ".svn"
-    },
-  ]
-}
-
 # This generates targets for everything in copy_tree_specs. The targets have the
 # same name as the "target" fields in the scopes of copy_tree_specs.
 copy_trees("copy_trees") {
@@ -836,10 +823,6 @@
   if (dart_target_arch != "ia32") {
     public_deps += [ ":copy_dart2native" ]
   }
-
-  if (is_win) {
-    public_deps += [ ":copy_7zip" ]
-  }
 }
 
 # Parts specific to the platform SDK.
diff --git a/sdk/lib/_internal/allowed_experiments.json b/sdk/lib/_internal/allowed_experiments.json
index 66da861..1f16232 100644
--- a/sdk/lib/_internal/allowed_experiments.json
+++ b/sdk/lib/_internal/allowed_experiments.json
@@ -2,8 +2,6 @@
   "version": 1,
   "experimentSets": {
     "sdkExperiments": [
-      "non-nullable",
-      "triple-shift"
     ],
     "nullSafety": [
       "non-nullable"
diff --git a/sdk/lib/_internal/js_runtime/lib/late_helper.dart b/sdk/lib/_internal/js_runtime/lib/late_helper.dart
index a7adcb8..14f9b454 100644
--- a/sdk/lib/_internal/js_runtime/lib/late_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/late_helper.dart
@@ -10,13 +10,18 @@
 
 /// A boxed variable used for lowering uninitialized `late` variables when they
 /// are locals or statics.
-///
-/// The [LateError]s produced have empty variable names.
-// TODO(fishythefish): Support variable names depending on flags/compiler.
 class _Cell {
+  final String _name;
   Object? _value;
 
-  _Cell() {
+  @pragma('dart2js:noInline')
+  _Cell() : _name = '' {
+    // `this` is a unique sentinel.
+    _value = this;
+  }
+
+  @pragma('dart2js:noInline')
+  _Cell.named(this._name) {
     // `this` is a unique sentinel.
     _value = this;
   }
@@ -30,12 +35,12 @@
   T readField<T>() => _readField() as T;
 
   Object? _readLocal() {
-    if (identical(_value, this)) throw LateError.localNI('');
+    if (identical(_value, this)) throw LateError.localNI(_name);
     return _value;
   }
 
   Object? _readField() {
-    if (identical(_value, this)) throw LateError.fieldNI('');
+    if (identical(_value, this)) throw LateError.fieldNI(_name);
     return _value;
   }
 
@@ -44,26 +49,31 @@
   }
 
   void set finalLocalValue(Object? v) {
-    if (!identical(_value, this)) throw LateError.localAI('');
+    if (!identical(_value, this)) throw LateError.localAI(_name);
     _value = v;
   }
 
   void set finalFieldValue(Object? v) {
-    if (!identical(_value, this)) throw LateError.fieldAI('');
+    if (!identical(_value, this)) throw LateError.fieldAI(_name);
     _value = v;
   }
 }
 
 /// A boxed variable used for lowering `late` variables when they are
 /// initialized locals.
-///
-/// The [LateError]s produced have empty variable names.
-// TODO(fishythefish): Support variable names depending on flags/compiler.
 class _InitializedCell {
+  final String _name;
   Object? _value;
   Object? Function() _initializer;
 
-  _InitializedCell(this._initializer) {
+  @pragma('dart2js:noInline')
+  _InitializedCell(this._initializer) : _name = '' {
+    // `this` is a unique sentinel.
+    _value = this;
+  }
+
+  @pragma('dart2js:noInline')
+  _InitializedCell.named(this._name, this._initializer) {
     // `this` is a unique sentinel.
     _value = this;
   }
@@ -84,7 +94,7 @@
   Object? _readFinal() {
     if (identical(_value, this)) {
       final result = _initializer();
-      if (!identical(_value, this)) throw LateError.localADI('');
+      if (!identical(_value, this)) throw LateError.localADI(_name);
       _value = result;
     }
     return _value;
@@ -95,7 +105,7 @@
   }
 
   void set finalValue(Object? v) {
-    if (!identical(_value, this)) throw LateError.localAI('');
+    if (!identical(_value, this)) throw LateError.localAI(_name);
     _value = v;
   }
 }
diff --git a/tests/corelib/unsigned_shift_test.dart b/tests/corelib/unsigned_shift_test.dart
index ab3220f..6a3af9c 100644
--- a/tests/corelib/unsigned_shift_test.dart
+++ b/tests/corelib/unsigned_shift_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=triple-shift
 
 import "package:expect/expect.dart";
 
diff --git a/tests/ffi/regress_45988_test.dart b/tests/ffi/regress_45988_test.dart
new file mode 100644
index 0000000..ce58efb
--- /dev/null
+++ b/tests/ffi/regress_45988_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+class DartValueFields extends Union {
+  external Pointer p1;
+  external Pointer p2;
+  external Pointer p3;
+  external Pointer p4;
+}
+
+void main() {
+  final p = calloc<DartValueFields>();
+  Expect.equals(0, p.ref.p4.address);
+  calloc.free(p);
+}
diff --git a/tests/ffi_2/regress_45988_test.dart b/tests/ffi_2/regress_45988_test.dart
new file mode 100644
index 0000000..8677840
--- /dev/null
+++ b/tests/ffi_2/regress_45988_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+class DartValueFields extends Union {
+  Pointer p1;
+  Pointer p2;
+  Pointer p3;
+  Pointer p4;
+}
+
+void main() {
+  final p = calloc<DartValueFields>();
+  Expect.equals(0, p.ref.p4.address);
+  calloc.free(p);
+}
diff --git a/tests/language/const/double_in_int_op_test.dart b/tests/language/const/double_in_int_op_test.dart
index ed12305..9ff3279 100644
--- a/tests/language/const/double_in_int_op_test.dart
+++ b/tests/language/const/double_in_int_op_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=triple-shift
 
 main() {
   const dynamic i1 = 3;
diff --git a/tests/language/extension_methods/static_extension_constant_lib.dart b/tests/language/extension_methods/static_extension_constant_lib.dart
index 23d6de9..8fdb7b4 100644
--- a/tests/language/extension_methods/static_extension_constant_lib.dart
+++ b/tests/language/extension_methods/static_extension_constant_lib.dart
@@ -9,7 +9,7 @@
   bool operator ^(Object other) => true;
   int operator ~/(Object other) => 0;
   int operator >>(Object other) => 1;
-  // int operator >>>(Object other) => 2; // Requires triple-shift.
+  int operator >>>(Object other) => 2;
   int operator <<(Object other) => 0;
   int operator +(Object other) => 0;
   double operator -() => 1.0;
@@ -39,7 +39,7 @@
   b ^ b,
   i ~/ i,
   i >> i,
-  // i >>> i, // Requries triple-shift.
+  i >>> i,
   i << i,
   i + i,
   -i,
diff --git a/tests/language/extension_methods/static_extension_constant_test.dart b/tests/language/extension_methods/static_extension_constant_test.dart
index 18fdad15..751b7d8 100644
--- a/tests/language/extension_methods/static_extension_constant_test.dart
+++ b/tests/language/extension_methods/static_extension_constant_test.dart
@@ -24,7 +24,7 @@
   b ^ b,
   i ~/ i,
   i >> i,
-  // i >>> i, // Requries triple-shift.
+  i >>> i,
   i << i,
   i + i,
   -i,
diff --git a/tests/language/generic/generic_function_type_argument_test.dart b/tests/language/generic/generic_function_type_argument_test.dart
index c54516f..999125b 100644
--- a/tests/language/generic/generic_function_type_argument_test.dart
+++ b/tests/language/generic/generic_function_type_argument_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=generic-metadata
 
 import "package:expect/expect.dart";
 import "../static_type_helper.dart";
diff --git a/tests/language/generic/generic_metadata_test.dart b/tests/language/generic/generic_metadata_test.dart
index ce15283..4ff135b 100644
--- a/tests/language/generic/generic_metadata_test.dart
+++ b/tests/language/generic/generic_metadata_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=generic-metadata
 
 // Check that metadata constructor invocations can have type arguments.
 
diff --git a/tests/language/null_aware/access_runtime_1_test.dart b/tests/language/null_aware/access_runtime_1_test.dart
deleted file mode 100644
index ba92ba5..0000000
--- a/tests/language/null_aware/access_runtime_1_test.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it does not appear on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class B {}
-
-class C extends B {
-  int? v;
-  C(this.v);
-  static int? staticInt;
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if property access using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.v;
-
-  // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1).
-  Expect.equals(null, nullC()?.v);
-
-
-  // C?.id is equivalent to C.id.
-
-
-
-  // The static type of e1?.d is the static type of e1.id.
-
-
-
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.id are also
-  // generated in the case of e1?.id.
-
-
-
-  // '?.' cannot be used to access toplevel properties in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the hashCode getter on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/access_runtime_2_test.dart b/tests/language/null_aware/access_runtime_2_test.dart
deleted file mode 100644
index a1ade72..0000000
--- a/tests/language/null_aware/access_runtime_2_test.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it does not appear on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class B {}
-
-class C extends B {
-  int? v;
-  C(this.v);
-  static int? staticInt;
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if property access using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.v;
-
-  // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1).
-
-  var c = new C(1) as C?;
-  Expect.equals(1, c?.v);
-
-  // C?.id is equivalent to C.id.
-
-
-
-  // The static type of e1?.d is the static type of e1.id.
-
-
-
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.id are also
-  // generated in the case of e1?.id.
-
-
-
-  // '?.' cannot be used to access toplevel properties in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the hashCode getter on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/access_runtime_3_test.dart b/tests/language/null_aware/access_runtime_3_test.dart
deleted file mode 100644
index 633aa36..0000000
--- a/tests/language/null_aware/access_runtime_3_test.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it does not appear on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class B {}
-
-class C extends B {
-  int? v;
-  C(this.v);
-  static int? staticInt;
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if property access using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.v;
-
-  // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1).
-
-
-
-  // C?.id is equivalent to C.id.
-  { C.staticInt = 1; Expect.equals(1, C?.staticInt); }
-
-
-  // The static type of e1?.d is the static type of e1.id.
-
-
-
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.id are also
-  // generated in the case of e1?.id.
-
-
-
-  // '?.' cannot be used to access toplevel properties in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the hashCode getter on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/access_runtime_4_test.dart b/tests/language/null_aware/access_runtime_4_test.dart
deleted file mode 100644
index 96462c6..0000000
--- a/tests/language/null_aware/access_runtime_4_test.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it does not appear on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class B {}
-
-class C extends B {
-  int? v;
-  C(this.v);
-  static int? staticInt;
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if property access using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.v;
-
-  // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1).
-
-
-
-  // C?.id is equivalent to C.id.
-
-  { h.C.staticInt = 1; Expect.equals(1, h.C?.staticInt); }
-
-  // The static type of e1?.d is the static type of e1.id.
-
-
-
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.id are also
-  // generated in the case of e1?.id.
-
-
-
-  // '?.' cannot be used to access toplevel properties in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the hashCode getter on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/access_runtime_5_test.dart b/tests/language/null_aware/access_runtime_5_test.dart
deleted file mode 100644
index 6db60ce3..0000000
--- a/tests/language/null_aware/access_runtime_5_test.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it does not appear on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class B {}
-
-class C extends B {
-  int? v;
-  C(this.v);
-  static int? staticInt;
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if property access using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.v;
-
-  // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1).
-
-
-
-  // C?.id is equivalent to C.id.
-
-
-
-  // The static type of e1?.d is the static type of e1.id.
-  var c = new C(1) as C?;
-  { int? i = c?.v; Expect.equals(1, i); }
-
-
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.id are also
-  // generated in the case of e1?.id.
-
-
-
-  // '?.' cannot be used to access toplevel properties in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the hashCode getter on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/access_runtime_6_test.dart b/tests/language/null_aware/access_runtime_6_test.dart
deleted file mode 100644
index 5b4a999..0000000
--- a/tests/language/null_aware/access_runtime_6_test.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it does not appear on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class B {}
-
-class C extends B {
-  int? v;
-  C(this.v);
-  static int? staticInt;
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if property access using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.v;
-
-  // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1).
-
-
-
-  // C?.id is equivalent to C.id.
-
-
-
-  // The static type of e1?.d is the static type of e1.id.
-
-
-  { C.staticInt = 1; int? i = C?.staticInt; Expect.equals(1, i); }
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.id are also
-  // generated in the case of e1?.id.
-
-
-
-  // '?.' cannot be used to access toplevel properties in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the hashCode getter on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/access_runtime_7_test.dart b/tests/language/null_aware/access_runtime_7_test.dart
deleted file mode 100644
index 7f53dc1..0000000
--- a/tests/language/null_aware/access_runtime_7_test.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it does not appear on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class B {}
-
-class C extends B {
-  int? v;
-  C(this.v);
-  static int? staticInt;
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if property access using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.v;
-
-  // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1).
-
-
-
-  // C?.id is equivalent to C.id.
-
-
-
-  // The static type of e1?.d is the static type of e1.id.
-
-
-
-  { h.C.staticInt = 1; int? i = h.C?.staticInt; Expect.equals(1, i); }
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.id are also
-  // generated in the case of e1?.id.
-
-
-
-  // '?.' cannot be used to access toplevel properties in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the hashCode getter on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/access_runtime_test.dart b/tests/language/null_aware/access_runtime_test.dart
index 5d8a2c8..9495fef 100644
--- a/tests/language/null_aware/access_runtime_test.dart
+++ b/tests/language/null_aware/access_runtime_test.dart
@@ -1,6 +1,3 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
 // Copyright (c) 2015, 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.
@@ -22,37 +19,34 @@
 C? nullC() => null;
 
 main() {
-  // Make sure the "none" test fails if property access using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.v;
-
   // e1?.id is equivalent to ((x) => x == null ? null : x.id)(e1).
+  Expect.equals(null, nullC()?.v);
 
-
+  C? c = new C(1) as dynamic;
+  Expect.equals(1, c?.v);
 
   // C?.id is equivalent to C.id.
+  C.staticInt = 1;
+  Expect.equals(1, C?.staticInt);
 
+  h.C.staticInt = 1;
+  Expect.equals(1, h.C?.staticInt);
 
+  // The static type of e1?.id is the static type of e1.id.
+  {
+    int? i = c?.v;
+    Expect.equals(1, i);
+  }
 
-  // The static type of e1?.d is the static type of e1.id.
+  {
+    C.staticInt = 1;
+    int? i = C?.staticInt;
+    Expect.equals(1, i);
+  }
 
-
-
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.id are also
-  // generated in the case of e1?.id.
-
-
-
-  // '?.' cannot be used to access toplevel properties in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the hashCode getter on the class Type.
-
-
+  {
+    h.C.staticInt = 1;
+    int? i = h.C?.staticInt;
+    Expect.equals(1, i);
+  }
 }
diff --git a/tests/language/null_aware/access_test.dart b/tests/language/null_aware/access_test.dart
index 488a0df..b5e4b17 100644
--- a/tests/language/null_aware/access_test.dart
+++ b/tests/language/null_aware/access_test.dart
@@ -110,7 +110,7 @@
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
   // [cfe] The getter 'bad' isn't defined for the class 'C'.
   {
-    var b = new C(1) as B?;
+    B? b = new C(1) as dynamic;
     Expect.equals(1, b?.v);
     //                  ^
     // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
diff --git a/tests/language/null_aware/assignment_runtime_10_test.dart b/tests/language/null_aware/assignment_runtime_10_test.dart
deleted file mode 100644
index 91abae7..0000000
--- a/tests/language/null_aware/assignment_runtime_10_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-  { C.staticInt = 1; Expect.equals(3, C?.staticInt += 2); Expect.equals(3, C?.staticInt); }
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_11_test.dart b/tests/language/null_aware/assignment_runtime_11_test.dart
deleted file mode 100644
index ca60103..0000000
--- a/tests/language/null_aware/assignment_runtime_11_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-  { var d = new D(new E()) as D?; F? f = (d?.v += 1); Expect.identical(d!.v, f); }
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_12_test.dart b/tests/language/null_aware/assignment_runtime_12_test.dart
deleted file mode 100644
index c17f848..0000000
--- a/tests/language/null_aware/assignment_runtime_12_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-  { D.staticE = new E(); F? f = (D?.staticE += 1); Expect.identical(D.staticE, f); }
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_13_test.dart b/tests/language/null_aware/assignment_runtime_13_test.dart
deleted file mode 100644
index 961aff3..0000000
--- a/tests/language/null_aware/assignment_runtime_13_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-  { h.D.staticE = new h.E(); h.F? f = (h.D?.staticE += 1); Expect.identical(h.D.staticE, f); }
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_1_test.dart b/tests/language/null_aware/assignment_runtime_1_test.dart
deleted file mode 100644
index 121302d..0000000
--- a/tests/language/null_aware/assignment_runtime_1_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-  Expect.equals(null, nullC()?.v = bad());
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_2_test.dart b/tests/language/null_aware/assignment_runtime_2_test.dart
deleted file mode 100644
index bc0cdb6..0000000
--- a/tests/language/null_aware/assignment_runtime_2_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-  { var c = new C(1) as C?; Expect.equals(2, c?.v = 2); Expect.equals(2, c!.v); }
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_3_test.dart b/tests/language/null_aware/assignment_runtime_3_test.dart
deleted file mode 100644
index bc50d98..0000000
--- a/tests/language/null_aware/assignment_runtime_3_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-  { C.staticInt = 1; Expect.equals(2, C?.staticInt = 2); Expect.equals(2, C.staticInt); }
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_4_test.dart b/tests/language/null_aware/assignment_runtime_4_test.dart
deleted file mode 100644
index dcf3ab0..0000000
--- a/tests/language/null_aware/assignment_runtime_4_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-  { h.C.staticInt = 1; Expect.equals(2, h.C?.staticInt = 2); Expect.equals(2, h.C.staticInt); }
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_5_test.dart b/tests/language/null_aware/assignment_runtime_5_test.dart
deleted file mode 100644
index 9507557..0000000
--- a/tests/language/null_aware/assignment_runtime_5_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-  { var d = new D(new E()) as D?; G g = new G(); F? f = (d?.v = g); Expect.identical(f, g); }
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_6_test.dart b/tests/language/null_aware/assignment_runtime_6_test.dart
deleted file mode 100644
index e1a732b..0000000
--- a/tests/language/null_aware/assignment_runtime_6_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-  { D.staticE = new E(); G g = new G(); F? f = (D?.staticE = g); Expect.identical(f, g); }
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_7_test.dart b/tests/language/null_aware/assignment_runtime_7_test.dart
deleted file mode 100644
index 8a5ba98..0000000
--- a/tests/language/null_aware/assignment_runtime_7_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-  { h.D.staticE = new h.E(); h.G g = new h.G(); h.F? f = (h.D?.staticE = g); Expect.identical(f, g); }
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_8_test.dart b/tests/language/null_aware/assignment_runtime_8_test.dart
deleted file mode 100644
index 34f7359..0000000
--- a/tests/language/null_aware/assignment_runtime_8_test.dart
+++ /dev/null
@@ -1,102 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-int bad() {
-  Expect.fail('Should not be executed');
-  return -1;
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-  Expect.equals(null, nullC()?.v += bad());
-
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_9_test.dart b/tests/language/null_aware/assignment_runtime_9_test.dart
deleted file mode 100644
index 0a16c52..0000000
--- a/tests/language/null_aware/assignment_runtime_9_test.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears on the LHS of an
-// assignment.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
-
-  // C?.v = e2 is equivalent to C.v = e2.
-
-
-
-  // The static type of e1?.v = e2 is the static type of e2.
-
-
-
-
-
-
-
-  // Exactly the same errors that would be caused by e1.v = e2 are
-  // also generated in the case of e1?.v = e2.
-
-
-
-  // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-  { var c = new C(1) as C?; Expect.equals(3, c?.v += 2); Expect.equals(3, c!.v); }
-
-  // C?.v op= e2 is equivalent to C.v op= e2.
-
-
-  // The static type of e1?.v op= e2 is the static type of e1.v op e2.
-
-
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
-}
diff --git a/tests/language/null_aware/assignment_runtime_test.dart b/tests/language/null_aware/assignment_runtime_test.dart
index af673ef..6e73e75 100644
--- a/tests/language/null_aware/assignment_runtime_test.dart
+++ b/tests/language/null_aware/assignment_runtime_test.dart
@@ -1,6 +1,3 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
 // Copyright (c) 2015, 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.
@@ -18,7 +15,7 @@
 class B {}
 
 class C extends B {
-  int v;
+  num v;
   C(this.v);
   static late int staticInt;
 }
@@ -44,58 +41,75 @@
 C? nullC() => null;
 
 main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
   // e1?.v = e2 is equivalent to ((x) => x == null ? null : x.v = e2)(e1).
-
-
+  Expect.equals(null, nullC()?.v = bad());
+  {
+    C? c = new C(1) as dynamic;
+    Expect.equals(2, c?.v = 2);
+    Expect.equals(2, c!.v);
+  }
 
   // C?.v = e2 is equivalent to C.v = e2.
+  C.staticInt = 1;
+  Expect.equals(2, C?.staticInt = 2);
+  Expect.equals(2, C.staticInt);
 
-
+  h.C.staticInt = 1;
+  Expect.equals(2, h.C?.staticInt = 2);
+  Expect.equals(2, h.C.staticInt);
 
   // The static type of e1?.v = e2 is the static type of e2.
+  {
+    D? d = new D(new E()) as dynamic;
+    G g = new G();
+    F? f = (d?.v = g);
+    Expect.identical(f, g);
+  }
 
+  {
+    D.staticE = new E();
+    G g = new G();
+    F? f = (D?.staticE = g);
+    Expect.identical(f, g);
+  }
 
-
-
-
-
+  h.D.staticE = new h.E();
+  h.G g = new h.G();
+  h.F? f = (h.D?.staticE = g);
+  Expect.identical(f, g);
 
   // Exactly the same errors that would be caused by e1.v = e2 are
   // also generated in the case of e1?.v = e2.
 
-
-
   // e1?.v op= e2 is equivalent to ((x) => x?.v = x.v op e2)(e1).
-
-
+  Expect.equals(null, nullC()?.v += bad());
+  {
+    C? c = new C(1) as dynamic;
+    Expect.equals(3, c?.v += 2);
+    Expect.equals(3, c!.v);
+  }
 
   // C?.v op= e2 is equivalent to C.v op= e2.
-
+  C.staticInt = 1;
+  Expect.equals(3, C?.staticInt += 2);
+  Expect.equals(3, C?.staticInt);
 
   // The static type of e1?.v op= e2 is the static type of e1.v op e2.
+  {
+    D? d = new D(new E()) as dynamic;
+    F? f = (d?.v += 1);
+    Expect.identical(d!.v, f);
+  }
 
+  {
+    D.staticE = new E();
+    F? f = (D?.staticE += 1);
+    Expect.identical(D.staticE, f);
+  }
 
-
-
-  // Let T be the static type of e1 and let y be a fresh variable of type T.
-  // Exactly the same errors that would be caused by y.v op e2 are
-  // also generated in the case of e1?.v op= e2.
-
-
-
-
-
-
-
-
-
-  // '?.' cannot be used to assign to toplevel properties in libraries imported
-  // via prefix.
-
-
-
+  {
+    h.D.staticE = new h.E();
+    h.F? f = (h.D?.staticE += 1);
+    Expect.identical(h.D.staticE, f);
+  }
 }
diff --git a/tests/language/null_aware/assignment_test.dart b/tests/language/null_aware/assignment_test.dart
index 1d7f71a..02c3506 100644
--- a/tests/language/null_aware/assignment_test.dart
+++ b/tests/language/null_aware/assignment_test.dart
@@ -76,13 +76,13 @@
 
   // The static type of e1?.v = e2 is the static type of e2.
   {
-    var d = new D(new E()) as D?;
+    D? d = new D(new E()) as dynamic;
     G g = new G();
     F? f = (d?.v = g);
     Expect.identical(f, g);
   }
   {
-    var d = new D(new E()) as D?;
+    D? d = new D(new E()) as dynamic;
     E e = new G();
     F? f = (d?.v = e);
     //      ^^^^^^^^
@@ -201,17 +201,16 @@
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_SETTER
   // [cfe] The setter 'bad' isn't defined for the class 'C'.
   {
-    B b = new C(1);
-    b?.v += 2;
+    B bname = new C(1);
+    bname?.v += 2;
 //  ^
 // [cfe] Operand of null-aware operation '?.' has type 'B' which excludes null.
-//   ^^
-// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
-    // ^
+    //   ^^
+    // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
+    //     ^
     // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
-    // [cfe] The getter 'v' isn't defined for the class 'B'.
-    // ^
     // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_SETTER
+    // [cfe] The getter 'v' isn't defined for the class 'B'.
     // [cfe] The setter 'v' isn't defined for the class 'B'.
   }
   {
@@ -231,7 +230,6 @@
     //      ^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
     // [cfe] A value of type 'G?' can't be assigned to a variable of type 'H?'.
-    //      ^
     // [cfe] Operand of null-aware operation '?.' has type 'D' which excludes null.
     //       ^^
     // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
diff --git a/tests/language/null_aware/increment_decrement_runtime_10_test.dart b/tests/language/null_aware/increment_decrement_runtime_10_test.dart
deleted file mode 100644
index 1ee42a7..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_10_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-  { C.staticInt = 1; Expect.equals(1, C?.staticInt--); Expect.equals(0, C.staticInt); }
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_11_test.dart b/tests/language/null_aware/increment_decrement_runtime_11_test.dart
deleted file mode 100644
index 2a96102..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_11_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-  { h.C.staticInt = 1; Expect.equals(1, h.C?.staticInt--); Expect.equals(0, h.C.staticInt); }
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_12_test.dart b/tests/language/null_aware/increment_decrement_runtime_12_test.dart
deleted file mode 100644
index 4e9c166..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_12_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-  { E e1 = new E(); var d = new D(e1) as D?; E? e2 = d?.v--; Expect.identical(e1, e2); }
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_13_test.dart b/tests/language/null_aware/increment_decrement_runtime_13_test.dart
deleted file mode 100644
index 54a60b5..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_13_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-  { E e1 = new E(); D.staticE = e1; E? e2 = D?.staticE--; Expect.identical(e1, e2); }
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_14_test.dart b/tests/language/null_aware/increment_decrement_runtime_14_test.dart
deleted file mode 100644
index aedf157..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_14_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-  { h.E e1 = new h.E(); h.D.staticE = e1; h.E? e2 = h.D?.staticE--; Expect.identical(e1, e2); }
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_15_test.dart b/tests/language/null_aware/increment_decrement_runtime_15_test.dart
deleted file mode 100644
index 674833c..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_15_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-  Expect.equals(null, ++nullC()?.v);
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_16_test.dart b/tests/language/null_aware/increment_decrement_runtime_16_test.dart
deleted file mode 100644
index cfd1b8b..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_16_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-  { var c = new C(1) as C?; Expect.equals(2, ++c?.v); Expect.equals(2, c!.v); }
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_17_test.dart b/tests/language/null_aware/increment_decrement_runtime_17_test.dart
deleted file mode 100644
index 4997a21..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_17_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-  { C.staticInt = 1; Expect.equals(2, ++C?.staticInt); Expect.equals(2, C.staticInt); }
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_18_test.dart b/tests/language/null_aware/increment_decrement_runtime_18_test.dart
deleted file mode 100644
index c42e93a..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_18_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-  { h.C.staticInt = 1; Expect.equals(2, ++h.C?.staticInt); Expect.equals(2, h.C.staticInt); }
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_19_test.dart b/tests/language/null_aware/increment_decrement_runtime_19_test.dart
deleted file mode 100644
index 0677ac7..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_19_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-  { var d = new D(new E()) as D?; F? f = ++d?.v; Expect.identical(d!.v, f); }
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_1_test.dart b/tests/language/null_aware/increment_decrement_runtime_1_test.dart
deleted file mode 100644
index d23da62..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_1_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-  Expect.equals(null, nullC()?.v++);
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_20_test.dart b/tests/language/null_aware/increment_decrement_runtime_20_test.dart
deleted file mode 100644
index d3dc17e..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_20_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-  { D.staticE = new E(); F? f = ++D?.staticE; Expect.identical(D.staticE, f); }
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_21_test.dart b/tests/language/null_aware/increment_decrement_runtime_21_test.dart
deleted file mode 100644
index b12232c..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_21_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-  { h.D.staticE = new h.E(); h.F? f = ++h.D?.staticE; Expect.identical(h.D.staticE, f); }
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_22_test.dart b/tests/language/null_aware/increment_decrement_runtime_22_test.dart
deleted file mode 100644
index 59b625c..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_22_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-  Expect.equals(null, --nullC()?.v);
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_23_test.dart b/tests/language/null_aware/increment_decrement_runtime_23_test.dart
deleted file mode 100644
index 2927351..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_23_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-  { var c = new C(1) as C?; Expect.equals(0, --c?.v); Expect.equals(0, c!.v); }
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_24_test.dart b/tests/language/null_aware/increment_decrement_runtime_24_test.dart
deleted file mode 100644
index f80ef6e..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_24_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-  { C.staticInt = 1; Expect.equals(0, --C?.staticInt); Expect.equals(0, C.staticInt); }
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_25_test.dart b/tests/language/null_aware/increment_decrement_runtime_25_test.dart
deleted file mode 100644
index 83ef846..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_25_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-  { h.C.staticInt = 1; Expect.equals(0, --h.C?.staticInt); Expect.equals(0, h.C.staticInt); }
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_26_test.dart b/tests/language/null_aware/increment_decrement_runtime_26_test.dart
deleted file mode 100644
index 903c33a..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_26_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-  { var d = new D(new E()) as D?; F? f = --d?.v; Expect.identical(d!.v, f); }
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_27_test.dart b/tests/language/null_aware/increment_decrement_runtime_27_test.dart
deleted file mode 100644
index c753b8a..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_27_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-  { D.staticE = new E(); F? f = --D?.staticE; Expect.identical(D.staticE, f); }
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_28_test.dart b/tests/language/null_aware/increment_decrement_runtime_28_test.dart
deleted file mode 100644
index fbec38a..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_28_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-  { h.D.staticE = new h.E(); h.F? f = --h.D?.staticE; Expect.identical(h.D.staticE, f); }
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_2_test.dart b/tests/language/null_aware/increment_decrement_runtime_2_test.dart
deleted file mode 100644
index 3a29ccc..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_2_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-  { var c = new C(1) as C?; Expect.equals(1, c?.v++); Expect.equals(2, c!.v); }
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_3_test.dart b/tests/language/null_aware/increment_decrement_runtime_3_test.dart
deleted file mode 100644
index d28f21e..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_3_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-  { C.staticInt = 1; Expect.equals(1, C?.staticInt++); Expect.equals(2, C.staticInt); }
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_4_test.dart b/tests/language/null_aware/increment_decrement_runtime_4_test.dart
deleted file mode 100644
index d5a21b7..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_4_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-  { h.C.staticInt = 1; Expect.equals(1, h.C?.staticInt++); Expect.equals(2, h.C.staticInt); }
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_5_test.dart b/tests/language/null_aware/increment_decrement_runtime_5_test.dart
deleted file mode 100644
index 0cc85fb..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_5_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-  { E e1 = new E(); var d = new D(e1) as D?; E? e2 = d?.v++; Expect.identical(e1, e2); }
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_6_test.dart b/tests/language/null_aware/increment_decrement_runtime_6_test.dart
deleted file mode 100644
index 3d4f812..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_6_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-  { E e1 = new E(); D.staticE = e1; E? e2 = D?.staticE++; Expect.identical(e1, e2); }
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_7_test.dart b/tests/language/null_aware/increment_decrement_runtime_7_test.dart
deleted file mode 100644
index b9ae91d..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_7_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-  { h.E e1 = new h.E(); h.D.staticE = e1; h.E? e2 = h.D?.staticE++; Expect.identical(e1, e2); }
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_8_test.dart b/tests/language/null_aware/increment_decrement_runtime_8_test.dart
deleted file mode 100644
index 669b7ed..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_8_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-  Expect.equals(null, nullC()?.v--);
-
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_9_test.dart b/tests/language/null_aware/increment_decrement_runtime_9_test.dart
deleted file mode 100644
index 7b42679..0000000
--- a/tests/language/null_aware/increment_decrement_runtime_9_test.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it appears in a postincrement or
-// preincrement expression (or a postdecrement or predecrement expression).
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-class C {
-  int v;
-  C(this.v);
-  static late int staticInt;
-}
-
-class D {
-  E v;
-  D(this.v);
-  static late E staticE;
-}
-
-class E {
-  G operator +(int i) => new I();
-  G operator -(int i) => new I();
-}
-
-class F {}
-
-class G extends E implements F {}
-
-class H {}
-
-class I extends G implements H {}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if assignment to "?." is not implemented.
-  // This makes status files easier to maintain.
-  nullC()?.v = 1;
-
-  // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
-
-  // C?.v++ is equivalent to C.v++.
-
-
-
-  // The static type of e1?.v++ is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-  { var c = new C(1) as C?; Expect.equals(1, c?.v--); Expect.equals(0, c!.v); }
-
-  // C?.v-- is equivalent to C.v--.
-
-
-
-  // The static type of e1?.v-- is the same as the static type of e1.v.
-
-
-
-
-
-
-
-  // ++e1?.v is equivalent to e1?.v += 1.
-
-
-
-  // ++C?.v is equivalent to C?.v += 1.
-
-
-
-  // The static type of ++e1?.v is the same as the static type of e1.v + 1.
-
-
-
-
-
-
-
-  // --e1?.v is equivalent to e1?.v -= 1.
-
-
-
-  // --C?.v is equivalent to C?.v -= 1.
-
-
-
-  // The static type of --e1?.v is the same as the static type of e1.v - 1.
-
-
-
-
-
-
-}
diff --git a/tests/language/null_aware/increment_decrement_runtime_test.dart b/tests/language/null_aware/increment_decrement_runtime_test.dart
index 0ccc804..0229341 100644
--- a/tests/language/null_aware/increment_decrement_runtime_test.dart
+++ b/tests/language/null_aware/increment_decrement_runtime_test.dart
@@ -44,66 +44,161 @@
   nullC()?.v = 1;
 
   // e1?.v++ is equivalent to ((x) => x == null ? null : x.v++)(e1).
-
-
+  Expect.equals(null, nullC()?.v++);
+  {
+    C? c = new C(1) as dynamic;
+    Expect.equals(1, c?.v++);
+    Expect.equals(2, c!.v);
+  }
 
   // C?.v++ is equivalent to C.v++.
-
-
+  {
+    C.staticInt = 1;
+    Expect.equals(1, C?.staticInt++);
+    Expect.equals(2, C.staticInt);
+  }
+  {
+    h.C.staticInt = 1;
+    Expect.equals(1, h.C?.staticInt++);
+    Expect.equals(2, h.C.staticInt);
+  }
 
   // The static type of e1?.v++ is the same as the static type of e1.v.
+  {
+    E e1 = new E();
+    D? d = new D(e1) as dynamic;
+    E? e2 = d?.v++;
+    Expect.identical(e1, e2);
+  }
 
-
-
-
-
-
+  {
+    E e1 = new E();
+    D.staticE = e1;
+    E? e2 = D?.staticE++;
+    Expect.identical(e1, e2);
+  }
+  {
+    h.E e1 = new h.E();
+    h.D.staticE = e1;
+    h.E? e2 = h.D?.staticE++;
+    Expect.identical(e1, e2);
+  }
 
   // e1?.v-- is equivalent to ((x) => x == null ? null : x.v--)(e1).
-
-
+  Expect.equals(null, nullC()?.v--);
+  {
+    C? c = new C(1) as dynamic;
+    Expect.equals(1, c?.v--);
+    Expect.equals(0, c!.v);
+  }
 
   // C?.v-- is equivalent to C.v--.
-
-
+  {
+    C.staticInt = 1;
+    Expect.equals(1, C?.staticInt--);
+    Expect.equals(0, C.staticInt);
+  }
+  {
+    h.C.staticInt = 1;
+    Expect.equals(1, h.C?.staticInt--);
+    Expect.equals(0, h.C.staticInt);
+  }
 
   // The static type of e1?.v-- is the same as the static type of e1.v.
+  {
+    E e1 = new E();
+    D? d = new D(e1) as dynamic;
+    E? e2 = d?.v--;
+    Expect.identical(e1, e2);
+  }
 
-
-
-
-
-
+  {
+    E e1 = new E();
+    D.staticE = e1;
+    E? e2 = D?.staticE--;
+    Expect.identical(e1, e2);
+  }
+  {
+    h.E e1 = new h.E();
+    h.D.staticE = e1;
+    h.E? e2 = h.D?.staticE--;
+    Expect.identical(e1, e2);
+  }
 
   // ++e1?.v is equivalent to e1?.v += 1.
-
-
+  Expect.equals(null, ++nullC()?.v);
+  {
+    C? c = new C(1) as dynamic;
+    Expect.equals(2, ++c?.v);
+    Expect.equals(2, c!.v);
+  }
 
   // ++C?.v is equivalent to C?.v += 1.
-
-
+  {
+    C.staticInt = 1;
+    Expect.equals(2, ++C?.staticInt);
+    Expect.equals(2, C.staticInt);
+  }
+  {
+    h.C.staticInt = 1;
+    Expect.equals(2, ++h.C?.staticInt);
+    Expect.equals(2, h.C.staticInt);
+  }
 
   // The static type of ++e1?.v is the same as the static type of e1.v + 1.
+  {
+    D? d = new D(new E()) as dynamic;
+    F? f = ++d?.v;
+    Expect.identical(d!.v, f);
+  }
 
-
-
-
-
-
+  {
+    D? d = new D(new E()) as dynamic;
+    F? f = ++d?.v;
+    Expect.identical(d!.v, f);
+  }
+  {
+    h.D.staticE = new h.E();
+    h.F? f = ++h.D?.staticE;
+    Expect.identical(h.D.staticE, f);
+  }
 
   // --e1?.v is equivalent to e1?.v -= 1.
-
-
+  Expect.equals(null, --nullC()?.v);
+  {
+    C? c = new C(1) as dynamic;
+    Expect.equals(0, --c?.v);
+    Expect.equals(0, c!.v);
+  }
 
   // --C?.v is equivalent to C?.v -= 1.
-
-
+  {
+    C.staticInt = 1;
+    Expect.equals(0, --C?.staticInt);
+    Expect.equals(0, C.staticInt);
+  }
+  {
+    h.C.staticInt = 1;
+    Expect.equals(0, --h.C?.staticInt);
+    Expect.equals(0, h.C.staticInt);
+  }
 
   // The static type of --e1?.v is the same as the static type of e1.v - 1.
+  {
+    D? d = new D(new E()) as dynamic;
+    F? f = --d?.v;
+    Expect.identical(d!.v, f);
+  }
 
+  {
+    D.staticE = new E();
+    F? f = --D?.staticE;
+    Expect.identical(D.staticE, f);
+  }
 
-
-
-
-
+  {
+    h.D.staticE = new h.E();
+    h.F? f = --h.D?.staticE;
+    Expect.identical(h.D.staticE, f);
+  }
 }
diff --git a/tests/language/null_aware/invocation_runtime_1_test.dart b/tests/language/null_aware/invocation_runtime_1_test.dart
deleted file mode 100644
index e5e1ed7..0000000
--- a/tests/language/null_aware/invocation_runtime_1_test.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it is used to invoke a method.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  f(callback()?) => callback!();
-  int g(int callback()) => callback();
-  static staticF(callback()) => callback();
-  static int staticG(int callback()) => callback();
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
-  // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-  Expect.equals(null, nullC()?.f(bad()));
-
-
-  // C?.m(...) is equivalent to C.m(...).
-
-
-
-  // The static type of o?.m(...) is the same as the static type of
-  // o.m(...).
-
-
-
-
-
-
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/invocation_runtime_2_test.dart b/tests/language/null_aware/invocation_runtime_2_test.dart
deleted file mode 100644
index 8c11b27..0000000
--- a/tests/language/null_aware/invocation_runtime_2_test.dart
+++ /dev/null
@@ -1,66 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it is used to invoke a method.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  f(callback()?) => callback!();
-  int g(int callback()) => callback();
-  static staticF(callback()) => callback();
-  static int staticG(int callback()) => callback();
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
-  // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-
-  var c = C() as C?;
-  Expect.equals(1, c?.f(() => 1));
-
-  // C?.m(...) is equivalent to C.m(...).
-
-
-
-  // The static type of o?.m(...) is the same as the static type of
-  // o.m(...).
-
-
-
-
-
-
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/invocation_runtime_3_test.dart b/tests/language/null_aware/invocation_runtime_3_test.dart
deleted file mode 100644
index 13f50a1..0000000
--- a/tests/language/null_aware/invocation_runtime_3_test.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it is used to invoke a method.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  f(callback()?) => callback!();
-  int g(int callback()) => callback();
-  static staticF(callback()) => callback();
-  static int staticG(int callback()) => callback();
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
-  // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-
-
-
-  // C?.m(...) is equivalent to C.m(...).
-  Expect.equals(1, C?.staticF(() => 1));
-
-
-  // The static type of o?.m(...) is the same as the static type of
-  // o.m(...).
-
-
-
-
-
-
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/invocation_runtime_4_test.dart b/tests/language/null_aware/invocation_runtime_4_test.dart
deleted file mode 100644
index ea6b6b1..0000000
--- a/tests/language/null_aware/invocation_runtime_4_test.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it is used to invoke a method.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  f(callback()?) => callback!();
-  int g(int callback()) => callback();
-  static staticF(callback()) => callback();
-  static int staticG(int callback()) => callback();
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
-  // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-
-
-
-  // C?.m(...) is equivalent to C.m(...).
-
-  Expect.equals(1, h.C?.staticF(() => 1));
-
-  // The static type of o?.m(...) is the same as the static type of
-  // o.m(...).
-
-
-
-
-
-
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/invocation_runtime_5_test.dart b/tests/language/null_aware/invocation_runtime_5_test.dart
deleted file mode 100644
index b95b1e5..0000000
--- a/tests/language/null_aware/invocation_runtime_5_test.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it is used to invoke a method.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  f(callback()?) => callback!();
-  int g(int callback()) => callback();
-  static staticF(callback()) => callback();
-  static int staticG(int callback()) => callback();
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
-  // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-
-
-
-  // C?.m(...) is equivalent to C.m(...).
-
-
-
-  // The static type of o?.m(...) is the same as the static type of
-  // o.m(...).
-  { int? i = nullC()?.g(bad()); Expect.equals(null, i); }
-
-
-
-
-
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/invocation_runtime_6_test.dart b/tests/language/null_aware/invocation_runtime_6_test.dart
deleted file mode 100644
index bbabd59..0000000
--- a/tests/language/null_aware/invocation_runtime_6_test.dart
+++ /dev/null
@@ -1,66 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it is used to invoke a method.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  f(callback()?) => callback!();
-  int g(int callback()) => callback();
-  static staticF(callback()) => callback();
-  static int staticG(int callback()) => callback();
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
-  // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-
-
-
-  // C?.m(...) is equivalent to C.m(...).
-
-
-
-  // The static type of o?.m(...) is the same as the static type of
-  // o.m(...).
-
-  var c = new C() as C?;
-  { int? i = c?.g(() => 1); Expect.equals(1, i); }
-
-
-
-
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/invocation_runtime_7_test.dart b/tests/language/null_aware/invocation_runtime_7_test.dart
deleted file mode 100644
index 8bed5f0..0000000
--- a/tests/language/null_aware/invocation_runtime_7_test.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it is used to invoke a method.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  f(callback()?) => callback!();
-  int g(int callback()) => callback();
-  static staticF(callback()) => callback();
-  static int staticG(int callback()) => callback();
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
-  // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-
-
-
-  // C?.m(...) is equivalent to C.m(...).
-
-
-
-  // The static type of o?.m(...) is the same as the static type of
-  // o.m(...).
-
-
-
-
-  { int? i = C?.staticG(() => 1); Expect.equals(1, i); }
-
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/invocation_runtime_8_test.dart b/tests/language/null_aware/invocation_runtime_8_test.dart
deleted file mode 100644
index 62f8c4a..0000000
--- a/tests/language/null_aware/invocation_runtime_8_test.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// TODO(multitest): This was automatically migrated from a multitest and may
-// contain strange or dead code.
-
-// Copyright (c) 2015, 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.
-
-// Verify semantics of the ?. operator when it is used to invoke a method.
-
-import "package:expect/expect.dart";
-import "conditional_access_helper.dart" as h;
-
-bad() {
-  Expect.fail('Should not be executed');
-}
-
-class B {}
-
-class C extends B {
-  f(callback()?) => callback!();
-  int g(int callback()) => callback();
-  static staticF(callback()) => callback();
-  static int staticG(int callback()) => callback();
-}
-
-C? nullC() => null;
-
-main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
-  // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-
-
-
-  // C?.m(...) is equivalent to C.m(...).
-
-
-
-  // The static type of o?.m(...) is the same as the static type of
-  // o.m(...).
-
-
-
-
-
-  { int? i = h.C?.staticG(() => 1); Expect.equals(1, i); }
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
-}
diff --git a/tests/language/null_aware/invocation_runtime_test.dart b/tests/language/null_aware/invocation_runtime_test.dart
index 8956053..a4bd1d5 100644
--- a/tests/language/null_aware/invocation_runtime_test.dart
+++ b/tests/language/null_aware/invocation_runtime_test.dart
@@ -26,40 +26,30 @@
 C? nullC() => null;
 
 main() {
-  // Make sure the "none" test fails if method invocation using "?." is not
-  // implemented.  This makes status files easier to maintain.
-  nullC()?.f(null);
-
   // o?.m(...) is equivalent to ((x) => x == null ? null : x.m(...))(o).
-
-
-
+  Expect.equals(null, nullC()?.f(bad()));
+  C? c = C() as dynamic;
+  Expect.equals(1, c?.f(() => 1));
   // C?.m(...) is equivalent to C.m(...).
-
-
+  Expect.equals(1, C?.staticF(() => 1));
+  Expect.equals(1, h.C?.staticF(() => 1));
 
   // The static type of o?.m(...) is the same as the static type of
   // o.m(...).
-
-
-
-
-
-
-
-
-
-  // Let T be the static type of o and let y be a fresh variable of type T.
-  // Exactly the same static warnings that would be caused by y.m(...) are also
-  // generated in the case of o?.m(...).
-
-
-
-  // '?.' can't be used to access toplevel functions in libraries imported via
-  // prefix.
-
-
-  // Nor can it be used to access the toString method on the class Type.
-
-
+  {
+    int? i = nullC()?.g(bad());
+    Expect.equals(null, i);
+  }
+  {
+    int? i = c?.g(() => 1);
+    Expect.equals(1, i);
+  }
+  {
+    int? i = C?.staticG(() => 1);
+    Expect.equals(1, i);
+  }
+  {
+    int? i = h.C?.staticG(() => 1);
+    Expect.equals(1, i);
+  }
 }
diff --git a/tests/language/operator/operator_triple_shift_error_test.dart b/tests/language/operator/operator_triple_shift_error_test.dart
index 1b2bf5bb..5f0ad8a 100644
--- a/tests/language/operator/operator_triple_shift_error_test.dart
+++ b/tests/language/operator/operator_triple_shift_error_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=triple-shift
 
 // Can only be declared with exactly one required positional parameter.
 class C2 {
diff --git a/tests/language/operator/operator_triple_shift_test.dart b/tests/language/operator/operator_triple_shift_test.dart
index 2bbb811..5e58859 100644
--- a/tests/language/operator/operator_triple_shift_test.dart
+++ b/tests/language/operator/operator_triple_shift_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=triple-shift
 
 import "package:expect/expect.dart";
 
diff --git a/tests/language/operator/unsigned_right_shift_test.dart b/tests/language/operator/unsigned_right_shift_test.dart
index ddbaf51..feabddd 100644
--- a/tests/language/operator/unsigned_right_shift_test.dart
+++ b/tests/language/operator/unsigned_right_shift_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=triple-shift
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
diff --git a/tests/language/regress/regress45313_test.dart b/tests/language/regress/regress45313_test.dart
index 0c6a5a1..840e809 100644
--- a/tests/language/regress/regress45313_test.dart
+++ b/tests/language/regress/regress45313_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=generic-metadata
 
 import "package:expect/expect.dart";
 
diff --git a/tests/language/regress/regress45443_test.dart b/tests/language/regress/regress45443_test.dart
index a979342..d7f6aa6 100644
--- a/tests/language/regress/regress45443_test.dart
+++ b/tests/language/regress/regress45443_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=generic-metadata
 
 class C1<T extends void Function<TT extends T>()> {}
 
diff --git a/tests/language/regress/regress45763_test.dart b/tests/language/regress/regress45763_test.dart
index 1efd68d..df83793 100644
--- a/tests/language/regress/regress45763_test.dart
+++ b/tests/language/regress/regress45763_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=generic-metadata
 
 import "package:expect/expect.dart";
 
diff --git a/tests/language/vm/checked_smi_op_test.dart b/tests/language/vm/checked_smi_op_test.dart
index f1ae4a6..af75f6d 100644
--- a/tests/language/vm/checked_smi_op_test.dart
+++ b/tests/language/vm/checked_smi_op_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-// SharedOptions=--enable-experiment=triple-shift
 // VMOptions=
 // VMOptions=--use_slow_path
 
diff --git a/tests/language_2/extension_methods/static_extension_constant_lib.dart b/tests/language_2/extension_methods/static_extension_constant_lib.dart
index be388d1..96355f1 100644
--- a/tests/language_2/extension_methods/static_extension_constant_lib.dart
+++ b/tests/language_2/extension_methods/static_extension_constant_lib.dart
@@ -11,7 +11,6 @@
   bool operator ^(Object other) => true;
   int operator ~/(Object other) => 0;
   int operator >>(Object other) => 1;
-  // int operator >>>(Object other) => 2; // Requires triple-shift.
   int operator <<(Object other) => 0;
   int operator +(Object other) => 0;
   double operator -() => 1.0;
@@ -41,7 +40,6 @@
   b ^ b,
   i ~/ i,
   i >> i,
-  // i >>> i, // Requries triple-shift.
   i << i,
   i + i,
   -i,
diff --git a/tests/language_2/extension_methods/static_extension_constant_test.dart b/tests/language_2/extension_methods/static_extension_constant_test.dart
index b5fadbd..0d28ef6 100644
--- a/tests/language_2/extension_methods/static_extension_constant_test.dart
+++ b/tests/language_2/extension_methods/static_extension_constant_test.dart
@@ -26,7 +26,6 @@
   b ^ b,
   i ~/ i,
   i >> i,
-  // i >>> i, // Requries triple-shift.
   i << i,
   i + i,
   -i,
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index bc31c1d..3c981bc 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -81,7 +81,6 @@
 [ $system == macos && ($runtime == dart_precompiled || $runtime == vm) ]
 io/raw_secure_server_socket_test: Crash
 io/raw_server_socket_cancel_test: Skip # Issue 28182 # This test sometimes hangs on Mac.
-io/secure_server_client_certificate_test: Skip # Re-enable once the bots have been updated. Issue #26057
 io/socket_many_connections_test: Skip # This test fails with "Too many open files" on the Mac OS buildbot. This is expected as MacOS by default runs with a very low number of allowed open files ('ulimit -n' says something like 256).
 
 [ $arch == arm || $arch == arm64 || $runtime != vm || $system == android ]
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 53879fd..df81919 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -88,7 +88,6 @@
 [ $system == macos && ($runtime == dart_precompiled || $runtime == vm) ]
 io/raw_secure_server_socket_test: Crash
 io/raw_server_socket_cancel_test: Skip # Issue 28182 # This test sometimes hangs on Mac.
-io/secure_server_client_certificate_test: Skip # Re-enable once the bots have been updated. Issue #26057
 io/socket_many_connections_test: Skip # This test fails with "Too many open files" on the Mac OS buildbot. This is expected as MacOS by default runs with a very low number of allowed open files ('ulimit -n' says something like 256).
 
 [ $arch == arm || $arch == arm64 || $runtime != vm || $system == android ]
diff --git a/third_party/.gitignore b/third_party/.gitignore
index 0bd8a83..779e818c 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -7,7 +7,6 @@
 !pkg_tested
 !/tcmalloc
 !d8
-!7zip.tar.gz.sha1
 !firefox_jsshell
 !clang.tar.gz.sha1
 !unittest.tar.gz.sha1
diff --git a/third_party/7zip.tar.gz.sha1 b/third_party/7zip.tar.gz.sha1
deleted file mode 100644
index 83e790b..0000000
--- a/third_party/7zip.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-22fe352b3c39c4281a599cf8576abef80ec44cc9
\ No newline at end of file
diff --git a/tools/VERSION b/tools/VERSION
index f7875ea..4af193d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 111
+PRERELEASE 112
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/dart_sdk.py b/tools/bots/dart_sdk.py
index 0193969..d876320 100755
--- a/tools/bots/dart_sdk.py
+++ b/tools/bots/dart_sdk.py
@@ -74,7 +74,6 @@
     DartArchiveUploadSDKs(BUILD_OS, arch, sdk_zip)
 
 
-
 def DartArchiveUploadSDKs(system, arch, sdk_zip):
     namer = bot_utils.GCSNamer(CHANNEL, bot_utils.ReleaseType.RAW)
     git_number = utils.GetArchiveVersion()
@@ -171,26 +170,12 @@
 
 
 def CreateZip(directory, target_file):
-    if 'win' in BUILD_OS:
-        CreateZipWindows(directory, target_file)
-    else:
-        CreateZipPosix(directory, target_file)
-
-
-def CreateZipPosix(directory, target_file):
-    with utils.ChangedWorkingDirectory(os.path.dirname(directory)):
-        command = ['zip', '-yrq9', target_file, os.path.basename(directory)]
-        Run(command)
-
-
-def CreateZipWindows(directory, target_file):
-    with utils.ChangedWorkingDirectory(os.path.dirname(directory)):
-        zip_win = os.path.join(bot_utils.DART_DIR, 'third_party', '7zip', '7za')
-        command = [
-            zip_win, 'a', '-tzip', target_file,
-            os.path.basename(directory)
-        ]
-        Run(command)
+    root = os.path.dirname(directory)
+    base = os.path.basename(directory)
+    f = shutil.make_archive(target_file, 'zip', root, base)
+    # make_archive will appened '.zip' to the filename, so we have to rename
+    # to avoid having it being '.zip.zip'
+    shutil.move(f, target_file)
 
 
 def FileDelete(f):
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 39d7272..bc961e1 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -3097,6 +3097,14 @@
           ]
         },
         {
+          "name": "analyze runtime/tests/concurrency/generate_stress_test.dart",
+          "script": "out/ReleaseX64/dart-sdk/bin/dart",
+          "arguments": [
+            "analyze",
+            "runtime/tests/concurrency/generate_stress_test.dart"
+          ]
+        },
+        {
           "name": "analyze pkg/analysis_server",
           "script": "out/ReleaseX64/dart-sdk/bin/dart",
           "arguments": [
@@ -3707,6 +3715,99 @@
     },
     {
       "builders": [
+        "iso-stress-linux"
+      ],
+      "meta": {
+        "description": "This configuration is used for isolate stress testing."
+      },
+      "steps": [
+        {
+          "name": "Build Dart VM - JIT and AOT",
+          "script": "tools/build.py",
+          "arguments": [
+            "--mode=debug,release",
+            "--arch=x64",
+            "runtime_kernel",
+            "dart_precompiled_runtime"
+          ]
+        },
+        {
+          "name": "Build Dart VM - JIT and AOT (Release TSAN)",
+          "script": "tools/build.py",
+          "arguments": [
+            "--mode=release",
+            "--arch=x64",
+            "--sanitizer=tsan",
+            "runtime_kernel",
+            "dart_precompiled_runtime"
+          ]
+        },
+        {
+          "name": "Generate Isolate Stress Test",
+          "script": "out/ReleaseX64/dart",
+          "arguments": [
+            "runtime/tests/concurrency/generate_stress_test.dart"
+          ]
+        },
+        {
+          "name": "Generate Isolate Stress Test - JIT Dill",
+          "script": "out/ReleaseX64/dart",
+          "arguments": [
+            "pkg/vm/bin/gen_kernel.dart",
+            "--platform=out/ReleaseX64/vm_platform_strong.dill",
+            "--no-aot",
+            "--no-sound-null-safety",
+            "-o", "runtime/tests/concurrency/generated_stress_test.dart.jit.dill",
+            "runtime/tests/concurrency/generated_stress_test.dart"
+          ]
+        },
+        {
+          "name": "Generate Isolate Stress Test - JIT Dill NNBD",
+          "script": "out/ReleaseX64/dart",
+          "arguments": [
+            "pkg/vm/bin/gen_kernel.dart",
+            "--platform=out/ReleaseX64/vm_platform_strong.dill",
+            "--no-aot",
+            "-o", "runtime/tests/concurrency/generated_stress_test_nnbd.dart.jit.dill",
+            "runtime/tests/concurrency/generated_stress_test_nnbd.dart"
+          ]
+        },
+        {
+          "name": "Generate Isolate Stress Test - AOT Dill",
+          "script": "out/ReleaseX64/dart",
+          "arguments": [
+            "pkg/vm/bin/gen_kernel.dart",
+            "--platform=out/ReleaseX64/vm_platform_strong.dill",
+            "--aot",
+            "--no-sound-null-safety",
+            "-o", "runtime/tests/concurrency/generated_stress_test.dart.aot.dill",
+            "runtime/tests/concurrency/generated_stress_test.dart"
+          ]
+        },
+        {
+          "name": "Generate Isolate Stress Test - AOT Dill NNBD",
+          "script": "out/ReleaseX64/dart",
+          "arguments": [
+            "pkg/vm/bin/gen_kernel.dart",
+            "--platform=out/ReleaseX64/vm_platform_strong.dill",
+            "--aot",
+            "-o", "runtime/tests/concurrency/generated_stress_test_nnbd.dart.aot.dill",
+            "runtime/tests/concurrency/generated_stress_test_nnbd.dart"
+          ]
+        },
+        {
+          "name": "Run Isolate Stress Tests",
+          "script": "out/ReleaseX64/dart",
+          "arguments": [
+            "runtime/tests/concurrency/run_stress_test_shards.dart"
+          ],
+          "shards": 10,
+          "fileset": "vm-kernel"
+        }
+      ]
+    },
+    {
+      "builders": [
         "vm-kernel-precomp-linux-debug-simarm_x64",
         "vm-kernel-precomp-linux-release-simarm_x64"
       ],
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index d527d2a..c171b62 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -110,7 +110,7 @@
     help: "Sound variance"
 
   alternative-invalidation-strategy:
-    help: "Alternative invalidation strategy for incremental compilation"
+    help: "Alternative invalidation strategy for incremental compilation."
     category: "CFE"
 
   value-class:
@@ -125,6 +125,12 @@
   constructor-tearoffs:
     help: "Allow constructor tear-offs and explicit generic instantiations."
 
+# Experiment flag only used for testing.
+  test-experiment:
+    help: >-
+      Has no effect. Can be used for testing the --enable-experiment
+      command line functionality.
+
 #
 # Flags below this line are shipped, retired, or rejected, cannot be specified
 # on the command line, and will eventually be removed.
