diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index d40b3a4..8ede85a 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -250,7 +250,7 @@
       "name": "dds",
       "rootUri": "../pkg/dds",
       "packageUri": "lib/",
-      "languageVersion": "2.14"
+      "languageVersion": "2.12"
     },
     {
       "name": "dev_compiler",
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 7313659..8155799 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -22,8 +22,8 @@
 import 'package:analyzer/instrumentation/service.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/utilities_general.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -338,14 +338,7 @@
       }
     }
 
-    int computeChangeHash() {
-      var hash = 0;
-      var edits = builder.sourceChange.edits;
-      for (var i = 0; i < edits.length; ++i) {
-        hash = JenkinsSmiHash.combine(hash, edits[i].hashCode);
-      }
-      return JenkinsSmiHash.finish(hash);
-    }
+    int computeChangeHash() => (builder as ChangeBuilderImpl).changeHash;
 
     Future<void> generate(CorrectionProducer producer, String code) async {
       var oldHash = computeChangeHash();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
index 4022696..cb280c7 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
@@ -574,6 +574,58 @@
 }
 ''');
   }
+
+  Future<void> test_addParameter_withImport() async {
+    newFile('$workspaceRootPath/p/lib/d.dart', content: '''
+class D {}
+''');
+    setPackageContent('''
+import 'd.dart';
+
+class C {
+  void m(D x) {}
+}
+''');
+    addPackageDataFile('''
+version: 1
+transforms:
+- title: 'Add parameter'
+  date: 2021-08-03
+  element:
+    uris: ['$importUri']
+    method: 'm'
+    inClass: 'C'
+  changes:
+    - kind: 'addParameter'
+      index: 0
+      name: 'x'
+      style: required_positional
+      argumentValue:
+        expression: '{% d %}()'
+        variables:
+          d:
+            kind: 'import'
+            uris: ['d.dart']
+            name: 'D'
+''');
+    await resolveTestCode('''
+import '$importUri';
+
+void f(C c) {
+  c.m();
+  c.m();
+}
+''');
+    await assertHasFix('''
+import 'package:p/d.dart';
+import '$importUri';
+
+void f(C c) {
+  c.m(D());
+  c.m(D());
+}
+''');
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 7d50e7e..a8fcbf3 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -95,7 +95,9 @@
   CompileTimeErrorCode.CAST_TO_NON_TYPE,
   CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD,
+  CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER,
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD,
+  CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER,
   CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD,
   CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES,
   CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD,
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index af4dab4..c8caff3 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -352,10 +352,14 @@
     }
 
     // Run lints that handle specific node types.
-    unit.accept(LinterVisitor(
+    unit.accept(
+      LinterVisitor(
         nodeRegistry,
-        LinterExceptionHandler(_analysisOptions.propagateLinterExceptions)
-            .logException));
+        LinterExceptionHandler(
+          propagateExceptions: _analysisOptions.propagateLinterExceptions,
+        ).logException,
+      ),
+    );
   }
 
   void _computeVerifyErrors(FileState file, CompilationUnit unit) {
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 4387e37..a40e33a 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -1308,9 +1308,11 @@
 class LinterExceptionHandler {
   /// Indicates whether linter exceptions should be propagated to the caller (by
   /// re-throwing them)
-  final bool propagateLinterExceptions;
+  final bool propagateExceptions;
 
-  LinterExceptionHandler(this.propagateLinterExceptions);
+  LinterExceptionHandler({
+    required this.propagateExceptions,
+  });
 
   /// A method that can be passed to the `LinterVisitor` constructor to handle
   /// exceptions that occur during linting.
@@ -1332,7 +1334,7 @@
     // TODO(39284): should this exception be silent?
     AnalysisEngine.instance.instrumentationService.logException(
         SilentException(buffer.toString(), exception, stackTrace));
-    if (propagateLinterExceptions) {
+    if (propagateExceptions) {
       throw exception;
     }
   }
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 327af6e..930340a 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -348,10 +348,14 @@
     }
 
     // Run lints that handle specific node types.
-    unit.accept(LinterVisitor(
+    unit.accept(
+      LinterVisitor(
         nodeRegistry,
-        LinterExceptionHandler(_analysisOptions.propagateLinterExceptions)
-            .logException));
+        LinterExceptionHandler(
+          propagateExceptions: _analysisOptions.propagateLinterExceptions,
+        ).logException,
+      ),
+    );
   }
 
   void _computeVerifyErrors(FileState file, CompilationUnit unit) {
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index fb2881f..29f4fe2 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -1565,7 +1565,7 @@
 
   /**
    * Parameters:
-   * 0: the name of the field
+   * 0: the name of the constructor and field
    */
   // #### Description
   //
@@ -1610,6 +1610,19 @@
 
   /**
    * Parameters:
+   * 0: the name of the constructor and getter
+   */
+  static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER =
+      CompileTimeErrorCode(
+          'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
+          "'{0}' can't be used to name both a constructor and a static getter "
+              "in this class.",
+          correction: "Try renaming either the constructor or the getter.",
+          hasPublishedDocs: true,
+          uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER');
+
+  /**
+   * Parameters:
    * 0: the name of the constructor
    */
   static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD =
@@ -1622,6 +1635,19 @@
           uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD');
 
   /**
+   * Parameters:
+   * 0: the name of the constructor and setter
+   */
+  static const CompileTimeErrorCode CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER =
+      CompileTimeErrorCode(
+          'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
+          "'{0}' can't be used to name both a constructor and a static setter "
+              "in this class.",
+          correction: "Try renaming either the constructor or the setter.",
+          hasPublishedDocs: true,
+          uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER');
+
+  /**
    * 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
    * error if `C` declares a getter or a setter with basename `n`, and has a
    * method named `n`.
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index 0947fbe..7ad7ac9 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -302,11 +302,18 @@
           var staticMember = staticGetters[name] ?? staticSetters[name];
           if (staticMember != null) {
             if (staticMember is PropertyAccessorElement) {
-              _errorReporter.reportErrorForNode(
-                CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD,
-                nameNode,
-                [name],
-              );
+              CompileTimeErrorCode errorCode;
+              if (staticMember.isSynthetic) {
+                errorCode = CompileTimeErrorCode
+                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD;
+              } else if (staticMember.isGetter) {
+                errorCode = CompileTimeErrorCode
+                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER;
+              } else {
+                errorCode = CompileTimeErrorCode
+                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER;
+              }
+              _errorReporter.reportErrorForNode(errorCode, nameNode, [name]);
             } else {
               _errorReporter.reportErrorForNode(
                 CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD,
diff --git a/pkg/analyzer/lib/src/lint/linter_visitor.dart b/pkg/analyzer/lib/src/lint/linter_visitor.dart
index 0794a4c..424d04a 100644
--- a/pkg/analyzer/lib/src/lint/linter_visitor.dart
+++ b/pkg/analyzer/lib/src/lint/linter_visitor.dart
@@ -18,8 +18,8 @@
   final LintRuleExceptionHandler exceptionHandler;
 
   LinterVisitor(this.registry, [LintRuleExceptionHandler? exceptionHandler])
-      : exceptionHandler =
-            exceptionHandler ?? LinterExceptionHandler(true).logException;
+      : exceptionHandler = exceptionHandler ??
+            LinterExceptionHandler(propagateExceptions: true).logException;
 
   @override
   void visitAdjacentStrings(AdjacentStrings node) {
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index d5bb61e..c59ee4f 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -180,8 +180,8 @@
   static int get foo => 0;
 }
 ''', [
-      error(
-          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD, 14, 3),
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER, 14,
+          3),
     ]);
   }
 
@@ -212,8 +212,8 @@
   static void set foo(_) {}
 }
 ''', [
-      error(
-          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD, 14, 3),
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER, 14,
+          3),
     ]);
   }
 
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index f6857fc..0cdb816 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -1845,9 +1845,15 @@
 _'{0}' can't be used to name both a constructor and a static field in this
 class._
 
+_'{0}' can't be used to name both a constructor and a static getter in this
+class._
+
 _'{0}' can't be used to name both a constructor and a static method in this
 class._
 
+_'{0}' can't be used to name both a constructor and a static setter in this
+class._
+
 #### Description
 
 The analyzer produces this diagnostic when a named constructor and either a
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
index 0e6ea1a..f7e9777 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_general.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.dart';
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_yaml.dart';
@@ -60,6 +61,35 @@
       : assert(session == null || workspace == null),
         workspace = workspace ?? _SingleSessionWorkspace(session!);
 
+  /// Return a hash value that will change when new edits have been added to
+  /// this builder.
+  int get changeHash {
+    // The hash value currently ignores edits to import directives because
+    // finalizing the builders needs to happen exactly once and this getter
+    // needs to be invoked repeatedly.
+    //
+    // In addition, we should consider implementing our own hash function for
+    // file edits because the `hashCode` defined for them might not be
+    // sufficient to detect all changes to the list of edits.
+    var hash = 0;
+    for (var builder in _genericFileEditBuilders.values) {
+      if (builder.hasEdits) {
+        hash = JenkinsSmiHash.combine(hash, builder.fileEdit.hashCode);
+      }
+    }
+    for (var builder in _dartFileEditBuilders.values) {
+      if (builder.hasEdits) {
+        hash = JenkinsSmiHash.combine(hash, builder.fileEdit.hashCode);
+      }
+    }
+    for (var builder in _yamlFileEditBuilders.values) {
+      if (builder.hasEdits) {
+        hash = JenkinsSmiHash.combine(hash, builder.fileEdit.hashCode);
+      }
+    }
+    return JenkinsSmiHash.finish(hash);
+  }
+
   @override
   SourceRange? get selectionRange => _selectionRange;
 
diff --git a/pkg/dds/dds_protocol.md b/pkg/dds/dds_protocol.md
index 9224302..b690c1a 100644
--- a/pkg/dds/dds_protocol.md
+++ b/pkg/dds/dds_protocol.md
@@ -1,6 +1,6 @@
-# Dart Development Service Protocol 1.3
+# Dart Development Service Protocol 1.2
 
-This document describes _version 1.3_ of the Dart Development Service Protocol.
+This document describes _version 1.2_ of the Dart Development Service Protocol.
 This protocol is an extension of the Dart VM Service Protocol and implements it
 in it's entirety. For details on the VM Service Protocol, see the [Dart VM Service Protocol Specification][service-protocol].
 
@@ -67,29 +67,6 @@
 
 The DDS Protocol supports all [public RPCs defined in the VM Service protocol][service-protocol-public-rpcs].
 
-### getAvailableCachedCpuSamples
-
-```
-AvailableCachedCpuSamples getAvailableCachedCpuSamples();
-```
-
-The _getAvailableCachedCpuSamples_ RPC is used to determine which caches of CPU samples
-are available. Caches are associated with individual _UserTag_ names and are specified
-when DDS is started via the _cachedUserTags_ parameter.
-
-See [AvailableCachedCpuSamples](#availablecachedcpusamples).
-
-### getCachedCpuSamples
-
-```
-CachedCpuSamples getCachedCpuSamples(string isolateId, string userTag);
-```
-
-The _getCachedCpuSamples_ RPC is used to retrieve a cache of CPU samples collected
-under a _UserTag_ with name _userTag_.
-
-See [CachedCpuSamples](#cachedcpusamples).
-
 ### getClientName
 
 ```
@@ -204,37 +181,6 @@
 
 The DDS Protocol supports all [public types defined in the VM Service protocol][service-protocol-public-types].
 
-### AvailableCachedCpuSamples
-
-```
-class AvailableCachedCpuSamples extends Response {
-  // A list of UserTag names associated with CPU sample caches.
-  string[] cacheNames;
-}
-```
-
-A collection of [UserTag] names associated with caches of CPU samples.
-
-See [getAvailableCachedCpuSamples](#getavailablecachedcpusamples).
-
-### CachedCpuSamples
-
-```
-class CachedCpuSamples extends CpuSamples {
-  // The name of the UserTag associated with this cache of samples.
-  string userTag;
-
-  // Provided if the CPU sample cache has filled and older samples have been
-  // dropped.
-  bool truncated [optional];
-}
-```
-
-An extension of [CpuSamples](#cpu-samples) which represents a set of cached
-samples, associated with a particular [UserTag] name.
-
-See [getCachedCpuSamples](#getcachedcpusamples).
-
 ### ClientName
 
 ```
@@ -274,12 +220,10 @@
 1.0 | Initial revision
 1.1 | Added `getDartDevelopmentServiceVersion` RPC.
 1.2 | Added `getStreamHistory` RPC.
-1.3 | Added `getAvailableCachedCpuSamples` and `getCachedCpuSamples` RPCs.
 
 [resume]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#resume
 [success]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#success
 [version]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#version
-[cpu-samples]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#cpusamples
 
 [service-protocol]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md
 [service-protocol-rpcs-requests-and-responses]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#rpcs-requests-and-responses
diff --git a/pkg/dds/lib/dds.dart b/pkg/dds/lib/dds.dart
index f31e447..e8f05bb 100644
--- a/pkg/dds/lib/dds.dart
+++ b/pkg/dds/lib/dds.dart
@@ -42,7 +42,6 @@
     Uri? serviceUri,
     bool enableAuthCodes = true,
     bool ipv6 = false,
-    List<String> cachedUserTags = const [],
     DevToolsConfiguration? devToolsConfiguration,
     bool logRequests = false,
   }) async {
@@ -80,7 +79,6 @@
       remoteVmServiceUri,
       serviceUri,
       enableAuthCodes,
-      cachedUserTags,
       ipv6,
       devToolsConfiguration,
       logRequests,
@@ -138,13 +136,9 @@
   /// requests.
   bool get isRunning;
 
-  /// The list of [UserTag]s used to determine which CPU samples are cached by
-  /// DDS.
-  List<String> get cachedUserTags;
-
   /// The version of the DDS protocol supported by this [DartDevelopmentService]
   /// instance.
-  static const String protocolVersion = '1.3';
+  static const String protocolVersion = '1.2';
 }
 
 class DartDevelopmentServiceException implements Exception {
diff --git a/pkg/dds/lib/src/client.dart b/pkg/dds/lib/src/client.dart
index 771ccee..1df3a3a 100644
--- a/pkg/dds/lib/src/client.dart
+++ b/pkg/dds/lib/src/client.dart
@@ -206,19 +206,6 @@
       return supportedProtocols;
     });
 
-    _clientPeer.registerMethod(
-      'getAvailableCachedCpuSamples',
-      (_) => {
-        'type': 'AvailableCachedCpuSamples',
-        'cacheNames': dds.cachedUserTags,
-      },
-    );
-
-    _clientPeer.registerMethod(
-      'getCachedCpuSamples',
-      dds.isolateManager.getCachedCpuSamples,
-    );
-
     // `evaluate` and `evaluateInFrame` actually consist of multiple RPC
     // invocations, including a call to `compileExpression` which can be
     // overridden by clients which provide their own implementation (e.g.,
diff --git a/pkg/dds/lib/src/common/ring_buffer.dart b/pkg/dds/lib/src/common/ring_buffer.dart
deleted file mode 100644
index 9ae802d..0000000
--- a/pkg/dds/lib/src/common/ring_buffer.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-// 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:math';
-
-class RingBuffer<T> {
-  RingBuffer(this._bufferSize) {
-    _buffer = List<T?>.filled(
-      _bufferSize,
-      null,
-    );
-  }
-
-  Iterable<T> call() sync* {
-    for (int i = _size - 1; i >= 0; --i) {
-      yield _buffer[(_count - i - 1) % _bufferSize]!;
-    }
-  }
-
-  /// Inserts a new element into the [RingBuffer].
-  /// 
-  /// Returns the element evicted as a result of adding the new element if the
-  /// buffer is as max capacity, null otherwise.
-  T? add(T e) {
-    if (_buffer.isEmpty) {
-      return null;
-    }
-    T? evicted;
-    final index = _count % _bufferSize;
-    if (isTruncated) {
-      evicted = _buffer[index];
-    }
-    _buffer[index] = e;
-    _count++;
-    return evicted;
-  }
-
-  void resize(int size) {
-    assert(size >= 0);
-    if (size == _bufferSize) {
-      return;
-    }
-    final resized = List<T?>.filled(
-      size,
-      null,
-    );
-    int count = 0;
-    if (size > 0) {
-      for (final e in this()) {
-        resized[count++ % size] = e;
-      }
-    }
-    _count = count;
-    _bufferSize = size;
-    _buffer = resized;
-  }
-
-  bool get isTruncated => _count % bufferSize < _count;
-
-  int get bufferSize => _bufferSize;
-
-  int get _size => min(_count, _bufferSize);
-
-  int _bufferSize;
-  int _count = 0;
-  late List<T?> _buffer;
-}
diff --git a/pkg/dds/lib/src/cpu_samples_manager.dart b/pkg/dds/lib/src/cpu_samples_manager.dart
deleted file mode 100644
index 1fe5084..0000000
--- a/pkg/dds/lib/src/cpu_samples_manager.dart
+++ /dev/null
@@ -1,201 +0,0 @@
-// 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 'package:dds/src/common/ring_buffer.dart';
-import 'package:vm_service/vm_service.dart';
-
-import 'dds_impl.dart';
-
-/// Manages CPU sample caches for an individual [Isolate].
-class CpuSamplesManager {
-  CpuSamplesManager(this.dds, this.isolateId) {
-    for (final userTag in dds.cachedUserTags) {
-      cpuSamplesCaches[userTag] = CpuSamplesRepository(userTag);
-    }
-  }
-
-  void handleUserTagEvent(Event event) {
-    assert(event.kind! == EventKind.kUserTagChanged);
-    _currentTag = event.updatedTag!;
-    final previousTag = event.previousTag!;
-    if (cpuSamplesCaches.containsKey(previousTag)) {
-      _lastCachedTag = previousTag;
-    }
-  }
-
-  void handleCpuSamplesEvent(Event event) {
-    assert(event.kind! == EventKind.kCpuSamples);
-    // There might be some samples left in the buffer for the previously set
-    // user tag. We'll check for them here and then close out the cache.
-    if (_lastCachedTag != null) {
-      cpuSamplesCaches[_lastCachedTag]!.cacheSamples(
-        event.cpuSamples!,
-      );
-      _lastCachedTag = null;
-    }
-    cpuSamplesCaches[_currentTag]?.cacheSamples(event.cpuSamples!);
-  }
-
-  final DartDevelopmentServiceImpl dds;
-  final String isolateId;
-  final cpuSamplesCaches = <String, CpuSamplesRepository>{};
-
-  String _currentTag = '';
-  String? _lastCachedTag;
-}
-
-class CpuSamplesRepository extends RingBuffer<CpuSample> {
-  // TODO: math to figure out proper buffer sizes.
-  CpuSamplesRepository(
-    this.tag, [
-    int bufferSize = 1000000,
-  ]) : super(bufferSize);
-
-  void cacheSamples(CpuSamples samples) {
-    String getFunctionId(ProfileFunction function) {
-      final functionObject = function.function;
-      if (functionObject is NativeFunction) {
-        return 'native/${functionObject.name}';
-      }
-      return functionObject.id!;
-    }
-
-    // Initialize upon seeing our first samples.
-    if (functions.isEmpty) {
-      samplePeriod = samples.samplePeriod!;
-      maxStackDepth = samples.maxStackDepth!;
-      pid = samples.pid!;
-      functions.addAll(samples.functions!);
-
-      // Build the initial id to function index mapping. This allows for us to
-      // lookup a ProfileFunction in the global function list stored in this
-      // cache. This works since most ProfileFunction objects will have an
-      // associated function with a *typically* stable service ID that we can
-      // use as a key.
-      //
-      // TODO(bkonyi): investigate creating some form of stable ID for
-      // Functions tied to closures.
-      for (int i = 0; i < functions.length; ++i) {
-        idToFunctionIndex[getFunctionId(functions[i])] = i;
-      }
-
-      // Clear tick information as we'll need to recalculate these values later
-      // when a request for samples from this repository is received.
-      for (final f in functions) {
-        f.inclusiveTicks = 0;
-        f.exclusiveTicks = 0;
-      }
-
-      _firstSampleTimestamp = samples.timeOriginMicros!;
-    } else {
-      final newFunctions = samples.functions!;
-      final indexMapping = <int, int>{};
-
-      // Check to see if we've got a function object we've never seen before.
-      for (int i = 0; i < newFunctions.length; ++i) {
-        final key = getFunctionId(newFunctions[i]);
-        if (!idToFunctionIndex.containsKey(key)) {
-          idToFunctionIndex[key] = functions.length;
-          // Keep track of the original index and the location of the function
-          // in the master function list so we can update the function indicies
-          // for each sample in this batch.
-          indexMapping[i] = functions.length;
-          functions.add(newFunctions[i]);
-
-          // Reset tick state as we'll recalculate later.
-          functions.last.inclusiveTicks = 0;
-          functions.last.exclusiveTicks = 0;
-        }
-      }
-
-      // Update the indicies into the function table for functions that were
-      // newly processed in the most recent event.
-      for (final sample in samples.samples!) {
-        final stack = sample.stack!;
-        for (int i = 0; i < stack.length; ++i) {
-          if (indexMapping.containsKey(stack[i])) {
-            stack[i] = indexMapping[stack[i]]!;
-          }
-        }
-      }
-    }
-
-    final relevantSamples = samples.samples!.where((s) => s.userTag == tag);
-    for (final sample in relevantSamples) {
-      add(sample);
-    }
-  }
-
-  @override
-  CpuSample? add(CpuSample sample) {
-    final evicted = super.add(sample);
-
-    void updateTicksForSample(CpuSample sample, int increment) {
-      final stack = sample.stack!;
-      for (int i = 0; i < stack.length; ++i) {
-        final function = functions[stack[i]];
-        function.inclusiveTicks = function.inclusiveTicks! + increment;
-        if (i + 1 == stack.length) {
-          function.exclusiveTicks = function.exclusiveTicks! + increment;
-        }
-      }
-    }
-
-    if (evicted != null) {
-      // If a sample is evicted from the cache, we need to decrement the tick
-      // counters for each function in the sample's stack.
-      updateTicksForSample(sample, -1);
-
-      // We also need to change the first timestamp to that of the next oldest
-      // sample.
-      _firstSampleTimestamp = call().first.timestamp!;
-    }
-    _lastSampleTimestamp = sample.timestamp!;
-
-    // Update function ticks to include the new sample.
-    updateTicksForSample(sample, 1);
-
-    return evicted;
-  }
-
-  Map<String, dynamic> toJson() {
-    return {
-      'type': 'CachedCpuSamples',
-      'userTag': tag,
-      'truncated': isTruncated,
-      if (functions.isNotEmpty) ...{
-        'samplePeriod': samplePeriod,
-        'maxStackDepth': maxStackDepth,
-      },
-      'timeOriginMicros': _firstSampleTimestamp,
-      'timeExtentMicros': _lastSampleTimestamp - _firstSampleTimestamp,
-      'functions': [
-        // TODO(bkonyi): remove functions with no ticks and update sample stacks.
-        for (final f in functions) f.toJson(),
-      ],
-      'sampleCount': call().length,
-      'samples': [
-        for (final s in call()) s.toJson(),
-      ]
-    };
-  }
-
-  /// The UserTag associated with all samples stored in this repository.
-  final String tag;
-
-  /// The list of function references with corresponding profiler tick data.
-  /// ** NOTE **: The tick values here need to be updated as new CpuSamples
-  /// events are delivered.
-  final functions = <ProfileFunction>[];
-  final idToFunctionIndex = <String, int>{};
-
-  /// Assume sample period and max stack depth won't change.
-  late final int samplePeriod;
-  late final int maxStackDepth;
-
-  late final int pid;
-
-  int _firstSampleTimestamp = 0;
-  int _lastSampleTimestamp = 0;
-}
diff --git a/pkg/dds/lib/src/dds_impl.dart b/pkg/dds/lib/src/dds_impl.dart
index 87ed83d..4360bcc 100644
--- a/pkg/dds/lib/src/dds_impl.dart
+++ b/pkg/dds/lib/src/dds_impl.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:collection';
 import 'dart:convert';
 import 'dart:io';
 import 'dart:math';
@@ -55,7 +54,6 @@
     this._remoteVmServiceUri,
     this._uri,
     this._authCodesEnabled,
-    this._cachedUserTags,
     this._ipv6,
     this._devToolsConfiguration,
     this.shouldLogRequests,
@@ -383,9 +381,6 @@
 
   final DevToolsConfiguration? _devToolsConfiguration;
 
-  List<String> get cachedUserTags => UnmodifiableListView(_cachedUserTags);
-  final List<String> _cachedUserTags;
-
   Future<void> get done => _done.future;
   Completer _done = Completer<void>();
   bool _shuttingDown = false;
diff --git a/pkg/dds/lib/src/isolate_manager.dart b/pkg/dds/lib/src/isolate_manager.dart
index 3a7a067..e9e14df 100644
--- a/pkg/dds/lib/src/isolate_manager.dart
+++ b/pkg/dds/lib/src/isolate_manager.dart
@@ -2,9 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:dds/src/cpu_samples_manager.dart';
 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
-import 'package:vm_service/vm_service.dart';
 
 import 'client.dart';
 import 'constants.dart';
@@ -37,11 +35,7 @@
 }
 
 class _RunningIsolate {
-  _RunningIsolate(this.isolateManager, this.id, this.name)
-      : cpuSamplesManager = CpuSamplesManager(
-          isolateManager.dds,
-          id,
-        );
+  _RunningIsolate(this.isolateManager, this.id, this.name);
 
   // State setters.
   void pausedOnExit() => _state = _IsolateState.pauseExit;
@@ -109,29 +103,6 @@
   /// Should always be called after an isolate is resumed.
   void clearResumeApprovals() => _resumeApprovalsByName.clear();
 
-  Map<String, dynamic> getCachedCpuSamples(String userTag) {
-    final repo = cpuSamplesManager.cpuSamplesCaches[userTag];
-    if (repo == null) {
-      throw json_rpc.RpcException.invalidParams(
-        'CPU sample caching is not enabled for tag: "$userTag"',
-      );
-    }
-    return repo.toJson();
-  }
-
-  void handleEvent(Event event) {
-    switch (event.kind) {
-      case EventKind.kUserTagChanged:
-        cpuSamplesManager.handleUserTagEvent(event);
-        return;
-      case EventKind.kCpuSamples:
-        cpuSamplesManager.handleCpuSamplesEvent(event);
-        return;
-      default:
-        return;
-    }
-  }
-
   int get _isolateStateMask => isolateStateToMaskMapping[_state] ?? 0;
 
   static const isolateStateToMaskMapping = {
@@ -141,7 +112,6 @@
   };
 
   final IsolateManager isolateManager;
-  final CpuSamplesManager cpuSamplesManager;
   final String name;
   final String id;
   final Set<String?> _resumeApprovalsByName = {};
@@ -152,25 +122,20 @@
   IsolateManager(this.dds);
 
   /// Handles state changes for isolates.
-  void handleIsolateEvent(Event event) {
+  void handleIsolateEvent(json_rpc.Parameters parameters) {
+    final event = parameters['event'];
+    final eventKind = event['kind'].asString;
+
     // There's no interesting information about isolate state associated with
     // and IsolateSpawn event.
-    // TODO(bkonyi): why isn't IsolateSpawn in package:vm_service
-    if (event.kind! == ServiceEvents.isolateSpawn) {
+    if (eventKind == ServiceEvents.isolateSpawn) {
       return;
     }
 
-    final isolateData = event.isolate!;
-    final id = isolateData.id!;
-    final name = isolateData.name!;
-    _updateIsolateState(id, name, event.kind!);
-  }
-
-  void routeEventToIsolate(Event event) {
-    final isolateId = event.isolate!.id!;
-    if (isolates.containsKey(isolateId)) {
-      isolates[isolateId]!.handleEvent(event);
-    }
+    final isolateData = event['isolate'];
+    final id = isolateData['id'].asString;
+    final name = isolateData['name'].asString;
+    _updateIsolateState(id, name, eventKind);
   }
 
   void _updateIsolateState(String id, String name, String eventKind) {
@@ -265,16 +230,6 @@
     return RPCResponses.success;
   }
 
-  Map<String, dynamic> getCachedCpuSamples(json_rpc.Parameters parameters) {
-    final isolateId = parameters['isolateId'].asString;
-    if (!isolates.containsKey(isolateId)) {
-      return RPCResponses.collectedSentinel;
-    }
-    final isolate = isolates[isolateId]!;
-    final userTag = parameters['userTag'].asString;
-    return isolate.getCachedCpuSamples(userTag);
-  }
-
   /// Forwards a `resume` request to the VM service.
   Future<Map<String, dynamic>> _sendResumeRequest(
     String isolateId,
diff --git a/pkg/dds/lib/src/logging_repository.dart b/pkg/dds/lib/src/logging_repository.dart
index 062529a..4537d7e 100644
--- a/pkg/dds/lib/src/logging_repository.dart
+++ b/pkg/dds/lib/src/logging_repository.dart
@@ -2,16 +2,17 @@
 // 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:math';
+
 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
 
 import 'client.dart';
-import 'common/ring_buffer.dart';
 
 /// [LoggingRepository] is used to store historical log messages from the
 /// target VM service. Clients which connect to DDS and subscribe to the
 /// `Logging` stream will be sent all messages contained within this repository
 /// upon initial subscription.
-class LoggingRepository extends RingBuffer<Map<String, dynamic>> {
+class LoggingRepository extends _RingBuffer<Map<String, dynamic>> {
   LoggingRepository([int logHistoryLength = 10000]) : super(logHistoryLength) {
     // TODO(bkonyi): enforce log history limit when DartDevelopmentService
     // allows for this to be set via Dart code.
@@ -45,3 +46,53 @@
   static const int _kMaxLogBufferSize = 100000;
 }
 
+// TODO(bkonyi): move to standalone file if we decide to use this elsewhere.
+class _RingBuffer<T> {
+  _RingBuffer(this._bufferSize) {
+    _buffer = List<T?>.filled(
+      _bufferSize,
+      null,
+    );
+  }
+
+  Iterable<T> call() sync* {
+    for (int i = _size - 1; i >= 0; --i) {
+      yield _buffer[(_count - i - 1) % _bufferSize]!;
+    }
+  }
+
+  void add(T e) {
+    if (_buffer.isEmpty) {
+      return;
+    }
+    _buffer[_count++ % _bufferSize] = e;
+  }
+
+  void resize(int size) {
+    assert(size >= 0);
+    if (size == _bufferSize) {
+      return;
+    }
+    final resized = List<T?>.filled(
+      size,
+      null,
+    );
+    int count = 0;
+    if (size > 0) {
+      for (final e in this()) {
+        resized[count++ % size] = e;
+      }
+    }
+    _count = count;
+    _bufferSize = size;
+    _buffer = resized;
+  }
+
+  int get bufferSize => _bufferSize;
+
+  int get _size => min(_count, _bufferSize);
+
+  int _bufferSize;
+  int _count = 0;
+  late List<T?> _buffer;
+}
diff --git a/pkg/dds/lib/src/stream_manager.dart b/pkg/dds/lib/src/stream_manager.dart
index f396c04..94f791a 100644
--- a/pkg/dds/lib/src/stream_manager.dart
+++ b/pkg/dds/lib/src/stream_manager.dart
@@ -5,7 +5,6 @@
 import 'dart:typed_data';
 
 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
-import 'package:vm_service/vm_service.dart';
 
 import 'client.dart';
 import 'dds_impl.dart';
@@ -108,31 +107,18 @@
         // Stdout and Stderr streams may not exist.
       }
     }
-    if (dds.cachedUserTags.isNotEmpty) {
-      await streamListen(null, EventStreams.kProfiler);
-    }
     dds.vmServiceClient.registerMethod(
       'streamNotify',
-      (json_rpc.Parameters parameters) {
+      (parameters) {
         final streamId = parameters['streamId'].asString;
-        final event =
-            Event.parse(parameters['event'].asMap.cast<String, dynamic>())!;
-
         // Forward events from the streams IsolateManager subscribes to.
         if (isolateManagerStreams.contains(streamId)) {
-          dds.isolateManager.handleIsolateEvent(event);
+          dds.isolateManager.handleIsolateEvent(parameters);
         }
         // Keep a history of messages to send to clients when they first
         // subscribe to a stream with an event history.
         if (loggingRepositories.containsKey(streamId)) {
-          loggingRepositories[streamId]!.add(
-            parameters.asMap.cast<String, dynamic>(),
-          );
-        }
-        // If the event contains an isolate, forward the event to the
-        // corresponding isolate to be handled.
-        if (event.isolate != null) {
-          dds.isolateManager.routeEventToIsolate(event);
+          loggingRepositories[streamId]!.add(parameters.asMap);
         }
         streamNotify(streamId, parameters.value);
       },
@@ -265,7 +251,6 @@
   static const kExtensionStream = 'Extension';
   static const kIsolateStream = 'Isolate';
   static const kLoggingStream = 'Logging';
-  static const kProfilerStream = 'Profiler';
   static const kStderrStream = 'Stderr';
   static const kStdoutStream = 'Stdout';
 
@@ -287,17 +272,10 @@
     kStdoutStream,
   };
 
-  // Never cancel the profiler stream as `CpuSampleRepository` requires
-  // `UserTagChanged` events to enable/disable sample caching.
-  static const cpuSampleRepositoryStreams = <String>{
-    kProfilerStream,
-  };
-
   // The set of streams that DDS requires to function.
   static final ddsCoreStreams = <String>{
     ...isolateManagerStreams,
     ...loggingRepositoryStreams,
-    ...cpuSampleRepositoryStreams,
   };
 
   final DartDevelopmentServiceImpl dds;
diff --git a/pkg/dds/lib/vm_service_extensions.dart b/pkg/dds/lib/vm_service_extensions.dart
index 09bda25..903c14a 100644
--- a/pkg/dds/lib/vm_service_extensions.dart
+++ b/pkg/dds/lib/vm_service_extensions.dart
@@ -13,46 +13,18 @@
   static bool _factoriesRegistered = false;
   static Version? _ddsVersion;
 
-  /// The [getDartDevelopmentServiceVersion] RPC is used to determine what version of
+  /// The _getDartDevelopmentServiceVersion_ RPC is used to determine what version of
   /// the Dart Development Service Protocol is served by a DDS instance.
   ///
   /// The result of this call is cached for subsequent invocations.
   Future<Version> getDartDevelopmentServiceVersion() async {
     if (_ddsVersion == null) {
-      _ddsVersion = await _callHelper<Version>(
-        'getDartDevelopmentServiceVersion',
-      );
+      _ddsVersion =
+          await _callHelper<Version>('getDartDevelopmentServiceVersion');
     }
     return _ddsVersion!;
   }
 
-  /// The [getCachedCpuSamples] RPC is used to retrieve a cache of CPU samples
-  /// collected under a [UserTag] with name `userTag`.
-  Future<CachedCpuSamples> getCachedCpuSamples(
-      String isolateId, String userTag) async {
-    if (!(await _versionCheck(1, 3))) {
-      throw UnimplementedError('getCachedCpuSamples requires DDS version 1.3');
-    }
-    return _callHelper<CachedCpuSamples>('getCachedCpuSamples', args: {
-      'isolateId': isolateId,
-      'userTag': userTag,
-    });
-  }
-
-  /// The [getAvailableCachedCpuSamples] RPC is used to determine which caches of CPU samples
-  /// are available. Caches are associated with individual [UserTag] names and are specified
-  /// when DDS is started via the `cachedUserTags` parameter.
-  Future<AvailableCachedCpuSamples> getAvailableCachedCpuSamples() async {
-    if (!(await _versionCheck(1, 3))) {
-      throw UnimplementedError(
-        'getAvailableCachedCpuSamples requires DDS version 1.3',
-      );
-    }
-    return _callHelper<AvailableCachedCpuSamples>(
-      'getAvailableCachedCpuSamples',
-    );
-  }
-
   /// Retrieve the event history for `stream`.
   ///
   /// If `stream` does not have event history collected, a parameter error is
@@ -154,11 +126,6 @@
 
   static void _registerFactories() {
     addTypeFactory('StreamHistory', StreamHistory.parse);
-    addTypeFactory(
-      'AvailableCachedCpuSamples',
-      AvailableCachedCpuSamples.parse,
-    );
-    addTypeFactory('CachedCpuSamples', CachedCpuSamples.parse);
     _factoriesRegistered = true;
   }
 }
@@ -187,86 +154,3 @@
   List<Event> get history => UnmodifiableListView(_history);
   final List<Event> _history;
 }
-
-/// An extension of [CpuSamples] which represents a set of cached samples,
-/// associated with a particular [UserTag] name.
-class CachedCpuSamples extends CpuSamples {
-  static CachedCpuSamples? parse(Map<String, dynamic>? json) =>
-      json == null ? null : CachedCpuSamples._fromJson(json);
-
-  CachedCpuSamples({
-    required this.userTag,
-    this.truncated,
-    required int? samplePeriod,
-    required int? maxStackDepth,
-    required int? sampleCount,
-    required int? timeSpan,
-    required int? timeOriginMicros,
-    required int? timeExtentMicros,
-    required int? pid,
-    required List<ProfileFunction>? functions,
-    required List<CpuSample>? samples,
-  }) : super(
-          samplePeriod: samplePeriod,
-          maxStackDepth: maxStackDepth,
-          sampleCount: sampleCount,
-          timeSpan: timeSpan,
-          timeOriginMicros: timeOriginMicros,
-          timeExtentMicros: timeExtentMicros,
-          pid: pid,
-          functions: functions,
-          samples: samples,
-        );
-
-  CachedCpuSamples._fromJson(Map<String, dynamic> json)
-      : userTag = json['userTag']!,
-        truncated = json['truncated'],
-        super(
-          samplePeriod: json['samplePeriod'] ?? -1,
-          maxStackDepth: json['maxStackDepth'] ?? -1,
-          sampleCount: json['sampleCount'] ?? -1,
-          timeSpan: json['timeSpan'] ?? -1,
-          timeOriginMicros: json['timeOriginMicros'] ?? -1,
-          timeExtentMicros: json['timeExtentMicros'] ?? -1,
-          pid: json['pid'] ?? -1,
-          functions: List<ProfileFunction>.from(
-            createServiceObject(json['functions'], const ['ProfileFunction'])
-                    as List? ??
-                [],
-          ),
-          samples: List<CpuSample>.from(
-            createServiceObject(json['samples'], const ['CpuSample'])
-                    as List? ??
-                [],
-          ),
-        );
-
-  @override
-  String get type => 'CachedCpuSamples';
-
-  /// The name of the [UserTag] associated with this cache of [CpuSamples].
-  final String userTag;
-
-  /// Provided if the CPU sample cache has filled and older samples have been
-  /// dropped.
-  final bool? truncated;
-}
-
-/// A collection of [UserTag] names associated with caches of CPU samples.
-class AvailableCachedCpuSamples extends Response {
-  static AvailableCachedCpuSamples? parse(Map<String, dynamic>? json) =>
-      json == null ? null : AvailableCachedCpuSamples._fromJson(json);
-
-  AvailableCachedCpuSamples({
-    required this.cacheNames,
-  });
-
-  AvailableCachedCpuSamples._fromJson(Map<String, dynamic> json)
-      : cacheNames = List<String>.from(json['cacheNames']);
-
-  @override
-  String get type => 'AvailableCachedUserTagCpuSamples';
-
-  /// A [List] of [UserTag] names associated with CPU sample caches.
-  final List<String> cacheNames;
-}
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
index 5468e58..cfbf779 100644
--- a/pkg/dds/pubspec.yaml
+++ b/pkg/dds/pubspec.yaml
@@ -3,12 +3,12 @@
   A library used to spawn the Dart Developer Service, used to communicate with
   a Dart VM Service instance.
 
-version: 2.1.0
+version: 2.0.2
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds
 
 environment:
-  sdk: '>=2.14.0-0 <3.0.0'
+  sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
   async: ^2.4.1
@@ -26,7 +26,7 @@
   sse: ^4.0.0
   stream_channel: ^2.0.0
   usage: ^4.0.0
-  vm_service: ^7.2.0
+  vm_service: ^7.0.0
   web_socket_channel: ^2.0.0
 
 dev_dependencies:
diff --git a/pkg/dds/test/common/test_helper.dart b/pkg/dds/test/common/test_helper.dart
index 077e75a..9fc441b 100644
--- a/pkg/dds/test/common/test_helper.dart
+++ b/pkg/dds/test/common/test_helper.dart
@@ -24,7 +24,6 @@
     '--observe=0',
     if (pauseOnStart) '--pause-isolates-on-start',
     '--write-service-info=$serviceInfoUri',
-    '--sample-buffer-duration=1',
     ...Platform.executableArguments,
     Platform.script.resolve(script).toString(),
   ];
diff --git a/pkg/dds/test/get_cached_cpu_samples_script.dart b/pkg/dds/test/get_cached_cpu_samples_script.dart
deleted file mode 100644
index 5949574..0000000
--- a/pkg/dds/test/get_cached_cpu_samples_script.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// 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:developer';
-
-fib(int n) {
-  if (n <= 1) {
-    return n;
-  }
-  return fib(n - 1) + fib(n - 2);
-}
-
-void main() {
-  UserTag('Testing').makeCurrent();
-  int i = 5;
-  while (true) {
-    ++i;
-    fib(i);
-  }
-}
diff --git a/pkg/dds/test/get_cached_cpu_samples_test.dart b/pkg/dds/test/get_cached_cpu_samples_test.dart
deleted file mode 100644
index fe8a223..0000000
--- a/pkg/dds/test/get_cached_cpu_samples_test.dart
+++ /dev/null
@@ -1,112 +0,0 @@
-// 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:async';
-import 'dart:io';
-
-import 'package:dds/dds.dart';
-import 'package:dds/vm_service_extensions.dart';
-import 'package:test/test.dart';
-import 'package:vm_service/vm_service.dart';
-import 'package:vm_service/vm_service_io.dart';
-import 'common/test_helper.dart';
-
-void main() {
-  late Process process;
-  late DartDevelopmentService dds;
-
-  setUp(() async {
-    process = await spawnDartProcess(
-      'get_cached_cpu_samples_script.dart',
-    );
-  });
-
-  tearDown(() async {
-    await dds.shutdown();
-    process.kill();
-  });
-
-  test(
-    'No UserTags to cache',
-    () async {
-      dds = await DartDevelopmentService.startDartDevelopmentService(
-        remoteVmServiceUri,
-      );
-      expect(dds.isRunning, true);
-      final service = await vmServiceConnectUri(dds.wsUri.toString());
-
-      // We didn't provide `cachedUserTags` when starting DDS, so we shouldn't
-      // be caching anything.
-      final availableCaches = await service.getAvailableCachedCpuSamples();
-      expect(availableCaches.cacheNames.length, 0);
-
-      final isolate = (await service.getVM()).isolates!.first;
-
-      try {
-        await service.getCachedCpuSamples(isolate.id!, 'Fake');
-        fail('Invalid userTag did not cause an exception');
-      } on RPCError catch (e) {
-        expect(
-          e.message,
-          'CPU sample caching is not enabled for tag: "Fake"',
-        );
-      }
-    },
-    timeout: Timeout.none,
-  );
-
-  test(
-    'Cache CPU samples for provided UserTag name',
-    () async {
-      const kUserTag = 'Testing';
-      dds = await DartDevelopmentService.startDartDevelopmentService(
-        remoteVmServiceUri,
-        cachedUserTags: [kUserTag],
-      );
-      expect(dds.isRunning, true);
-      final service = await vmServiceConnectUri(dds.wsUri.toString());
-
-      // Ensure we're caching results for samples under the 'Testing' UserTag.
-      final availableCaches = await service.getAvailableCachedCpuSamples();
-      expect(availableCaches.cacheNames.length, 1);
-      expect(availableCaches.cacheNames.first, kUserTag);
-
-      final isolate = (await service.getVM()).isolates!.first;
-
-      final completer = Completer<void>();
-      int i = 0;
-      int count = 0;
-      service.onProfilerEvent.listen((event) async {
-        if (event.kind == EventKind.kCpuSamples &&
-            event.isolate!.id! == isolate.id!) {
-          // Pause so we don't evict another block of samples before we've
-          // retrieved the cached samples after this event.
-          await service.pause(isolate.id!);
-
-          // Ensure the number of CPU samples in the CpuSample event is
-          // is consistent with the number of samples in the cache.
-          expect(event.cpuSamples, isNotNull);
-          count += event.cpuSamples!.samples!
-              .where((e) => e.userTag == kUserTag)
-              .length;
-          final cache = await service.getCachedCpuSamples(
-            isolate.id!,
-            availableCaches.cacheNames.first,
-          );
-          expect(cache.sampleCount, count);
-
-          await service.resume(isolate.id!);
-          i++;
-          if (i == 3) {
-            completer.complete();
-          }
-        }
-      });
-      await service.streamListen(EventStreams.kProfiler);
-      await service.resume(isolate.id!);
-      await completer.future;
-    },
-    timeout: Timeout.none,
-  );
-}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_sound_test.dart
similarity index 76%
copy from pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart
copy to pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_sound_test.dart
index 9db3279..9b56991 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_sound_test.dart
@@ -15,8 +15,8 @@
   var driver = await TestDriver.init();
 
   group('(Sound null safety)', () {
-    tearDownAll(() {
-      driver.finish();
+    tearDownAll(() async {
+      await driver.finish();
     });
 
     group('(AMD module system)', () {
@@ -24,11 +24,5 @@
           soundNullSafety: true, moduleFormat: ModuleFormat.amd);
       runSharedTests(setup, driver);
     });
-
-    group('(DDC module system)', () {
-      var setup = SetupCompilerOptions(
-          soundNullSafety: true, moduleFormat: ModuleFormat.ddc);
-      runSharedTests(setup, driver);
-    });
   });
 }
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_unsound_test.dart
similarity index 76%
copy from pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart
copy to pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_unsound_test.dart
index 72df6f5..92a7c96 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_amd_unsound_test.dart
@@ -15,8 +15,8 @@
   var driver = await TestDriver.init();
 
   group('(Unsound null safety)', () {
-    tearDownAll(() {
-      driver.finish();
+    tearDownAll(() async {
+      await driver.finish();
     });
 
     group('(AMD module system)', () {
@@ -24,11 +24,5 @@
           soundNullSafety: false, moduleFormat: ModuleFormat.amd);
       runSharedTests(setup, driver);
     });
-
-    group('(DDC module system)', () {
-      var setup = SetupCompilerOptions(
-          soundNullSafety: false, moduleFormat: ModuleFormat.ddc);
-      runSharedTests(setup, driver);
-    });
   });
 }
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_sound_test.dart
similarity index 76%
rename from pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart
rename to pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_sound_test.dart
index 9db3279..682327e 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_sound_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_sound_test.dart
@@ -15,14 +15,8 @@
   var driver = await TestDriver.init();
 
   group('(Sound null safety)', () {
-    tearDownAll(() {
-      driver.finish();
-    });
-
-    group('(AMD module system)', () {
-      var setup = SetupCompilerOptions(
-          soundNullSafety: true, moduleFormat: ModuleFormat.amd);
-      runSharedTests(setup, driver);
+    tearDownAll(() async {
+      await driver.finish();
     });
 
     group('(DDC module system)', () {
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_unsound_test.dart
similarity index 76%
rename from pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart
rename to pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_unsound_test.dart
index 72df6f5..21bc460 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_unsound_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_ddc_unsound_test.dart
@@ -15,14 +15,8 @@
   var driver = await TestDriver.init();
 
   group('(Unsound null safety)', () {
-    tearDownAll(() {
-      driver.finish();
-    });
-
-    group('(AMD module system)', () {
-      var setup = SetupCompilerOptions(
-          soundNullSafety: false, moduleFormat: ModuleFormat.amd);
-      runSharedTests(setup, driver);
+    tearDownAll(() async {
+      await driver.finish();
     });
 
     group('(DDC module system)', () {
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
index 40f3f36..18526d1 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
@@ -173,8 +173,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -215,8 +215,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -257,8 +257,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -366,8 +366,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -501,8 +501,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -649,8 +649,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -712,8 +712,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('compilation error', () async {
@@ -780,8 +780,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('call function not using type', () async {
@@ -840,8 +840,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('expression using local', () async {
@@ -881,8 +881,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('(then) expression using local', () async {
@@ -948,8 +948,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('expression loop variable', () async {
@@ -975,8 +975,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('evaluate formals', () async {
@@ -1020,8 +1020,8 @@
       await driver.initSource(setup, source);
     });
 
-    tearDownAll(() {
-      driver.cleanupTest();
+    tearDownAll(() async {
+      await driver.cleanupTest();
     });
 
     test('evaluation that non-destructively appends to the type container',
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
index 7300029..a20eb79 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
@@ -107,22 +107,23 @@
 
 class TestCompiler {
   final SetupCompilerOptions setup;
-  Component component;
-  ExpressionCompiler evaluator;
-  ModuleMetadata metadata;
-  source_maps.SingleMapping sourceMap;
+  final Component component;
+  final ExpressionCompiler evaluator;
+  final ModuleMetadata metadata;
+  final source_maps.SingleMapping sourceMap;
 
-  TestCompiler(this.setup);
+  TestCompiler._(this.setup, this.component, this.evaluator, this.metadata,
+      this.sourceMap);
 
-  Future<TestCompiler> init({Uri input, Uri output, Uri packages}) async {
+  static Future<TestCompiler> init(SetupCompilerOptions setup,
+      {Uri input, Uri output, Uri packages}) async {
     // Initialize the incremental compiler and module component.
     // TODO: extend this for multi-module compilations by storing separate
     // compilers/components/names per module.
     setup.options.packagesFileUri = packages;
     var compiler = DevelopmentIncrementalCompiler(setup.options, input);
-    component = await compiler.computeDelta();
+    var component = await compiler.computeDelta();
     component.computeCanonicalNames();
-
     // Initialize DDC.
     var moduleName = '${p.basenameWithoutExtension(output.toFilePath())}';
 
@@ -158,8 +159,6 @@
       compiler: kernel2jsCompiler,
       component: component,
     );
-    metadata = code.metadata;
-    sourceMap = source_maps.SingleMapping.fromJson(code.sourceMap);
     var codeBytes = utf8.encode(code.code);
     var sourceMapBytes = utf8.encode(json.encode(code.sourceMap));
 
@@ -167,7 +166,7 @@
     File('${output.toFilePath()}.map').writeAsBytesSync(sourceMapBytes);
 
     // Save the expression evaluator for future evaluations.
-    evaluator = ExpressionCompiler(
+    var evaluator = ExpressionCompiler(
       setup.options,
       setup.moduleFormat,
       setup.errors,
@@ -181,7 +180,9 @@
     }
     setup.diagnosticMessages.clear();
 
-    return this;
+    var sourceMap = source_maps.SingleMapping.fromJson(code.sourceMap);
+    return TestCompiler._(
+        setup, component, evaluator, code.metadata, sourceMap);
   }
 
   Future<TestCompilationResult> compileExpression(
@@ -212,45 +213,61 @@
 }
 
 class TestDriver {
-  SetupCompilerOptions setup;
-  String source;
-  Directory chromeDir;
-  Directory testDir;
-  String moduleFormatString;
+  final browser.Chrome chrome;
+  final Directory chromeDir;
+  final wip.WipConnection connection;
+  final wip.WipDebugger debugger;
+  TestCompiler compiler;
   Uri htmlBootstrapper;
   Uri input;
+  String moduleFormatString;
   Uri output;
   Uri packagesFile;
-  browser.Chrome chrome;
-  wip.WipDebugger debugger;
-  wip.WipConnection connection;
-  TestCompiler compiler;
+  String preemptiveBp;
+  SetupCompilerOptions setup;
+  String source;
+  Directory testDir;
 
-  TestDriver._();
-
-  static Future<TestDriver> init() async {
-    var driver = TestDriver._();
-    await driver.initChrome();
-    return driver;
-  }
+  TestDriver._(this.chrome, this.chromeDir, this.connection, this.debugger);
 
   /// Initializes a Chrome browser instance, tab connection, and debugger.
-  ///
-  /// Should be called once after creating TestDriver.
-  Future<void> initChrome() async {
+  static Future<TestDriver> init() async {
     // Create a temporary directory for holding Chrome tests.
-    var systemTempDir = Directory.systemTemp;
-    chromeDir = await systemTempDir.createTemp('ddc_eval_test_anchor');
+    var chromeDir = Directory.systemTemp.createTempSync('ddc_eval_test_anchor');
 
-    // Start Chrome on an empty page with a single empty tab.
-    chrome = await browser.Chrome.startWithDebugPort(['about:blank'],
-        userDataDir: chromeDir.uri.toFilePath(), headless: true);
+    // Try to start Chrome on an empty page with a single empty tab.
+    // TODO(#45713): Headless Chrome crashes the Windows bots, so run in
+    // standard mode until it's fixed.
+    browser.Chrome chrome;
+    var retries = 3;
+    while (chrome == null && retries-- > 0) {
+      try {
+        chrome = await browser.Chrome.startWithDebugPort(['about:blank'],
+            userDataDir: chromeDir.uri.toFilePath(),
+            headless: !Platform.isWindows);
+      } catch (e) {
+        if (retries == 0) rethrow;
+        await Future.delayed(Duration(seconds: 5));
+      }
+    }
 
     // Connect to the first 'normal' tab.
     var tab = await chrome.chromeConnection
         .getTab((tab) => !tab.isBackgroundPage && !tab.isChromeExtension);
-    connection = await tab.connect();
-    debugger = connection.debugger;
+    if (tab == null) {
+      throw Exception('Unable to connect to Chrome tab');
+    }
+
+    var connection = await tab.connect().timeout(Duration(seconds: 5),
+        onTimeout: () => throw Exception('Unable to connect to WIP tab'));
+
+    await connection.page.enable().timeout(Duration(seconds: 5),
+        onTimeout: () => throw Exception('Unable to enable WIP tab page'));
+
+    var debugger = connection.debugger;
+    await debugger.enable().timeout(Duration(seconds: 5),
+        onTimeout: () => throw Exception('Unable to enable WIP debugger'));
+    return TestDriver._(chrome, chromeDir, connection, debugger);
   }
 
   /// Must be called when testing a new Dart program.
@@ -268,7 +285,7 @@
     source = '${setup.dartLangComment}\n\n$source';
     this.setup = setup;
     this.source = source;
-    testDir = await chromeDir.createTemp('ddc_eval_test');
+    testDir = chromeDir.createTempSync('ddc_eval_test');
     var buildDir = p.dirname(p.dirname(p.dirname(Platform.resolvedExecutable)));
     var scriptPath = Platform.script.normalizePath().toFilePath();
     var ddcPath = p.dirname(p.dirname(p.dirname(scriptPath)));
@@ -295,8 +312,8 @@
       ''');
 
     // Initialize DDC and the incremental compiler, then perform a full compile.
-    compiler = await TestCompiler(setup)
-        .init(input: input, output: output, packages: packagesFile);
+    compiler = await TestCompiler.init(setup,
+        input: input, output: output, packages: packagesFile);
 
     htmlBootstrapper = testDir.uri.resolve('bootstrapper.html');
     var bootstrapFile = File(htmlBootstrapper.toFilePath())..createSync();
@@ -314,6 +331,9 @@
             setup.soundNullSafety ? 'sound' : 'kernel',
             'legacy',
             'dart_sdk.js'));
+        if (!File(dartSdkPath).existsSync()) {
+          throw Exception('Unable to find Dart SDK at $dartSdkPath');
+        }
         var dartLibraryPath =
             escaped(p.join(ddcPath, 'lib', 'js', 'legacy', 'dart_library.js'));
         var outputPath = output.toFilePath();
@@ -341,6 +361,9 @@
         moduleFormatString = 'amd';
         var dartSdkPath = escaped(p.join(buildDir, 'gen', 'utils', 'dartdevc',
             setup.soundNullSafety ? 'sound' : 'kernel', 'amd', 'dart_sdk'));
+        if (!File('$dartSdkPath.js').existsSync()) {
+          throw Exception('Unable to find Dart SDK at $dartSdkPath.js');
+        }
         var requirePath = escaped(p.join(buildDir, 'dart-sdk', 'lib',
             'dev_compiler', 'kernel', 'amd', 'require.js'));
         var outputPath = escaped(p.withoutExtension(output.toFilePath()));
@@ -378,27 +401,30 @@
             'Unsupported module format for SDK evaluation tests: ${setup.moduleFormat}');
     }
 
-    await debugger.enable();
+    await setBreakpointsActive(debugger, true);
 
     // Pause as soon as the test file loads but before it executes.
     var urlRegex = '.*${libraryUriToJsIdentifier(output)}.*';
-    await debugger.sendCommand('Debugger.setBreakpointByUrl', params: {
+    var bpResponse =
+        await debugger.sendCommand('Debugger.setBreakpointByUrl', params: {
       'urlRegex': urlRegex,
       'lineNumber': 0,
     });
+    preemptiveBp = wip.SetBreakpointResponse(bpResponse.json).breakpointId;
   }
 
-  void finish() async {
+  Future<void> finish() async {
     await chrome?.close();
     // Chrome takes a while to free its claim on chromeDir, so wait a bit.
-    await Future.delayed(const Duration(milliseconds: 500));
+    await Future.delayed(Duration(milliseconds: 500));
     chromeDir?.deleteSync(recursive: true);
   }
 
   Future<void> cleanupTest() async {
+    await setBreakpointsActive(debugger, false);
+    await debugger.removeBreakpoint(preemptiveBp);
     setup.diagnosticMessages.clear();
     setup.errors.clear();
-    await debugger.disable();
   }
 
   Future<void> check(
@@ -424,11 +450,14 @@
 
     // Navigate from the empty page and immediately pause on the preemptive
     // breakpoint.
-    await connection.page.navigate('$htmlBootstrapper');
+    await connection.page.navigate('$htmlBootstrapper').timeout(
+        Duration(seconds: 5),
+        onTimeout: () => throw Exception(
+            'Unable to navigate to page bootstrap script: $htmlBootstrapper'));
 
     // Poll until the script is found, or timeout after a few seconds.
     var script = (await scriptController.stream.first.timeout(
-            const Duration(seconds: 5),
+            Duration(seconds: 5),
             onTimeout: () => throw Exception(
                 'Unable to find JS script corresponding to test file $output in ${debugger.scripts}.')))
         .script;
@@ -446,11 +475,11 @@
     await debugger.resume();
     final event = await pauseController.stream
         .skip(1)
-        .timeout(const Duration(seconds: 5),
+        .timeout(Duration(seconds: 5),
             onTimeout: (event) => throw Exception(
                 'Unable to find JS preemptive pause event in $output.'))
         .first
-        .timeout(const Duration(seconds: 5),
+        .timeout(Duration(seconds: 5),
             onTimeout: () => throw Exception(
                 'Unable to find JS pause event corresponding to line ($dartLine -> $location) in $output.'));
     await pauseSub.cancel();
@@ -490,6 +519,9 @@
     await debugger.removeBreakpoint(bp.breakpointId);
     var value = await stringifyRemoteObject(evalResult);
 
+    // Resume execution to the end of the current script
+    await debugger.resume();
+
     expect(
         result,
         const TypeMatcher<TestCompilationResult>()
@@ -614,3 +646,10 @@
 }
 
 String escaped(String path) => path.replaceAll('\\', '\\\\');
+
+Future setBreakpointsActive(wip.WipDebugger debugger, bool active) async {
+  await debugger.sendCommand('Debugger.setBreakpointsActive', params: {
+    'active': active
+  }).timeout(Duration(seconds: 5),
+      onTimeout: () => throw Exception('Unable to set breakpoint activity'));
+}
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index ee007f5..e811ba1 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -12,7 +12,7 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show StringToken;
 
-import 'package:kernel/kernel.dart' show Component, Statement;
+import 'package:kernel/kernel.dart' show Component;
 
 import 'package:kernel/ast.dart' as ir;
 
@@ -37,8 +37,6 @@
 
 import '../kernel_generator_impl.dart' show generateKernelInternal;
 
-import '../fasta/kernel/redirecting_factory_body.dart' as redirecting;
-
 import 'compiler_state.dart' show InitializedCompilerState;
 
 import 'util.dart' show equalLists, equalMaps, equalSets;
@@ -242,18 +240,4 @@
 /// constructor.
 // TODO(sigmund): Delete this API once `member.isRedirectingFactory`
 // is implemented correctly for patch files (Issue #33495).
-bool isRedirectingFactory(ir.Procedure member) {
-  if (member.kind == ir.ProcedureKind.Factory) {
-    Statement? body = member.function.body;
-    if (body is redirecting.RedirectingFactoryBody) return true;
-    if (body is ir.ExpressionStatement) {
-      ir.Expression expression = body.expression;
-      if (expression is ir.Let) {
-        if (expression.variable.name == redirecting.letName) {
-          return true;
-        }
-      }
-    }
-  }
-  return false;
-}
+bool isRedirectingFactory(ir.Procedure member) => member.isRedirectingFactory;
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 4de08b9..5d66e3c 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -44,6 +44,8 @@
 
 import '../kernel/kernel_helper.dart';
 
+import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody;
+
 import '../loader.dart';
 
 import '../modifier.dart';
@@ -921,7 +923,8 @@
         targetNode.computeFunctionType(library.nonNullable);
     if (typeArguments != null &&
         targetFunctionType.typeParameters.length != typeArguments.length) {
-      addProblem(
+      addProblemForRedirectingFactory(
+          factory,
           templateTypeArgumentMismatch
               .withArguments(targetFunctionType.typeParameters.length),
           redirectionTarget.charOffset,
@@ -946,7 +949,8 @@
         Loader loader = library.loader;
         if (!typeEnvironment.isSubtypeOf(typeArgument, typeParameterBound,
             SubtypeCheckMode.ignoringNullabilities)) {
-          addProblem(
+          addProblemForRedirectingFactory(
+              factory,
               templateRedirectingFactoryIncompatibleTypeArgument.withArguments(
                   typeArgument,
                   typeParameterBound,
@@ -957,7 +961,8 @@
         } else if (library.isNonNullableByDefault && loader is SourceLoader) {
           if (!typeEnvironment.isSubtypeOf(typeArgument, typeParameterBound,
               SubtypeCheckMode.withNullabilities)) {
-            addProblem(
+            addProblemForRedirectingFactory(
+                factory,
                 templateRedirectingFactoryIncompatibleTypeArgument
                     .withArguments(typeArgument, typeParameterBound,
                         library.isNonNullableByDefault),
@@ -1002,9 +1007,65 @@
     }
   }
 
+  bool _isCyclicRedirectingFactory(RedirectingFactoryBuilder factory) {
+    // We use the [tortoise and hare algorithm]
+    // (https://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare) to
+    // handle cycles.
+    Builder? tortoise = factory;
+    Builder? hare = factory.redirectionTarget.target;
+    if (hare == factory) {
+      return true;
+    }
+    while (tortoise != hare) {
+      // Hare moves 2 steps forward.
+      if (hare is! RedirectingFactoryBuilder) {
+        return false;
+      }
+      hare = hare.redirectionTarget.target;
+      if (hare == factory) {
+        return true;
+      }
+      if (hare is! RedirectingFactoryBuilder) {
+        return false;
+      }
+      hare = hare.redirectionTarget.target;
+      if (hare == factory) {
+        return true;
+      }
+      // Tortoise moves one step forward. No need to test type of tortoise
+      // as it follows hare which already checked types.
+      tortoise =
+          (tortoise as RedirectingFactoryBuilder).redirectionTarget.target;
+    }
+    // Cycle found, but original factory doesn't belong to a cycle.
+    return false;
+  }
+
+  void addProblemForRedirectingFactory(RedirectingFactoryBuilder factory,
+      Message message, int charOffset, int length) {
+    addProblem(message, charOffset, length);
+    String text = library.loader.target.context
+        .format(
+            message.withLocation(fileUri, charOffset, length), Severity.error)
+        .plain;
+    factory.body = new RedirectingFactoryBody.error(text);
+  }
+
   @override
   void checkRedirectingFactory(
       RedirectingFactoryBuilder factory, TypeEnvironment typeEnvironment) {
+    // Check that factory declaration is not cyclic.
+    if (_isCyclicRedirectingFactory(factory)) {
+      addProblemForRedirectingFactory(
+          factory,
+          templateCyclicRedirectingFactoryConstructors
+              .withArguments("${factory.member.enclosingClass!.name}"
+                  "${factory.name == '' ? '' : '.${factory.name}'}"),
+          factory.charOffset,
+          noLength);
+      return;
+    }
+
     // The factory type cannot contain any type parameters other than those of
     // its enclosing class, because constructors cannot specify type parameters
     // of their own.
@@ -1016,13 +1077,16 @@
 
     // TODO(hillerstrom): It would be preferable to know whether a failure
     // happened during [_computeRedirecteeType].
-    if (redirecteeType == null) return;
+    if (redirecteeType == null) {
+      return;
+    }
 
     // Check whether [redirecteeType] <: [factoryType].
     Loader loader = library.loader;
     if (!typeEnvironment.isSubtypeOf(
         redirecteeType, factoryType, SubtypeCheckMode.ignoringNullabilities)) {
-      addProblem(
+      addProblemForRedirectingFactory(
+          factory,
           templateIncompatibleRedirecteeFunctionType.withArguments(
               redirecteeType, factoryType, library.isNonNullableByDefault),
           factory.redirectionTarget.charOffset,
@@ -1030,7 +1094,8 @@
     } else if (library.isNonNullableByDefault && loader is SourceLoader) {
       if (!typeEnvironment.isSubtypeOf(
           redirecteeType, factoryType, SubtypeCheckMode.withNullabilities)) {
-        addProblem(
+        addProblemForRedirectingFactory(
+            factory,
             templateIncompatibleRedirecteeFunctionType.withArguments(
                 redirecteeType, factoryType, library.isNonNullableByDefault),
             factory.redirectionTarget.charOffset,
diff --git a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
index 22e54cb..2abc7cf 100644
--- a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
@@ -207,7 +207,7 @@
     if (bodyInternal != null) {
       unexpected("null", "${bodyInternal.runtimeType}", charOffset, fileUri);
     }
-    bodyInternal = new RedirectingFactoryBody(target, typeArguments);
+    bodyInternal = new RedirectingFactoryBody(target, typeArguments, function);
     function.body = bodyInternal;
     bodyInternal?.parent = function;
     if (isPatch) {
@@ -307,7 +307,7 @@
           noLength, fileUri);
     }
 
-    bodyInternal = new RedirectingFactoryBody(target, typeArguments);
+    bodyInternal = new RedirectingFactoryBody(target, typeArguments, function);
     function.body = bodyInternal;
     bodyInternal?.parent = function;
     _procedure.isRedirectingFactory = true;
@@ -436,7 +436,10 @@
             target.enclosingClass!.typeParameters.length, const DynamicType(),
             growable: true);
       }
-      member.function!.body = new RedirectingFactoryBody(target, typeArguments);
+
+      function.body =
+          new RedirectingFactoryBody(target, typeArguments, function);
+      function.body!.parent = function;
     }
     if (_factoryTearOff != null &&
         (target is Constructor || target is Procedure && target.isFactory)) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index b550c58..3a6544e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1247,13 +1247,10 @@
       if (redirectingFactoryBody != null) {
         // If the redirection target is itself a redirecting factory, it means
         // that it is unresolved.
-        assert(redirectingFactoryBody.isUnresolved);
-        String errorName = redirectingFactoryBody.unresolvedName!;
-        replacementNode = buildProblem(
-            fasta.templateMethodNotFound.withArguments(errorName),
-            fileOffset,
-            noLength,
-            suppressMessage: true);
+        assert(redirectingFactoryBody.isError);
+        String errorMessage = redirectingFactoryBody.errorMessage!;
+        replacementNode = new InvalidExpression(errorMessage)
+          ..fileOffset = fileOffset;
       } else {
         Substitution substitution = Substitution.fromPairs(
             initialTarget.function.typeParameters, arguments.types);
@@ -2373,10 +2370,8 @@
       push(forest.createStringLiteral(offsetForToken(token), value));
     } else {
       int count = 1 + interpolationCount * 2;
-      List<Object>? parts = const FixedNullableList<Object>().popNonNullable(
-          stack,
-          count,
-          /* dummyValue = */ 0);
+      List<Object>? parts = const FixedNullableList<Object>()
+          .popNonNullable(stack, count, /* dummyValue = */ 0);
       if (parts == null) {
         push(new ParserRecovery(endToken.charOffset));
         return;
@@ -6427,12 +6422,8 @@
           allowPotentiallyConstantType: allowPotentiallyConstantType);
       if (message == null) return unresolved;
       return new UnresolvedType(
-          new NamedTypeBuilder(
-              typeParameter.name!,
-              builder.nullabilityBuilder,
-              /* arguments = */ null,
-              unresolved.fileUri,
-              unresolved.charOffset)
+          new NamedTypeBuilder(typeParameter.name!, builder.nullabilityBuilder,
+              /* arguments = */ null, unresolved.fileUri, unresolved.charOffset)
             ..bind(new InvalidTypeDeclarationBuilder(
                 typeParameter.name!, message)),
           unresolved.charOffset,
diff --git a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
index 4f63d8b..9debfe6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
@@ -31,48 +31,63 @@
 /// the redirection target in a factory method body.
 const String varNamePrefix = "#typeArg";
 
-class RedirectingFactoryBody extends ExpressionStatement {
-  RedirectingFactoryBody.internal(Expression value,
-      [List<DartType>? typeArguments])
-      : super(new Let(new VariableDeclaration(letName, initializer: value),
-            encodeTypeArguments(typeArguments)));
+class RedirectingFactoryBody extends ReturnStatement {
+  RedirectingFactoryBody._internal(Expression value) : super(value);
 
-  RedirectingFactoryBody(Member target, [List<DartType>? typeArguments])
-      : this.internal(new StaticGet(target), typeArguments);
+  RedirectingFactoryBody(
+      Member target, List<DartType> typeArguments, FunctionNode function)
+      : this._internal(_makeForwardingCall(target, typeArguments, function));
 
-  RedirectingFactoryBody.unresolved(String name)
-      : this.internal(new StringLiteral(name));
+  RedirectingFactoryBody.error(String errorMessage)
+      : this._internal(new InvalidExpression(errorMessage));
 
   Member? get target {
-    dynamic value = getValue(expression);
-    return value is StaticGet ? value.target : null;
+    final Expression? value = this.expression;
+    if (value is StaticInvocation) {
+      return value.target;
+    } else if (value is ConstructorInvocation) {
+      return value.target;
+    }
+    return null;
   }
 
-  String? get unresolvedName {
-    dynamic value = getValue(expression);
-    return value is StringLiteral ? value.value : null;
+  String? get errorMessage {
+    final Expression? value = this.expression;
+    return value is InvalidExpression ? value.message : null;
   }
 
-  bool get isUnresolved => unresolvedName != null;
+  bool get isError => errorMessage != null;
 
   List<DartType>? get typeArguments {
-    if (expression is Let) {
-      Let bodyExpression = expression as Let;
-      if (bodyExpression.variable.name == letName) {
-        return decodeTypeArguments(bodyExpression.body);
-      }
+    final Expression? value = this.expression;
+    if (value is InvocationExpression) {
+      return value.arguments.types;
     }
     return null;
   }
 
-  static getValue(Expression expression) {
-    if (expression is Let) {
-      VariableDeclaration variable = expression.variable;
-      if (variable.name == letName) {
-        return variable.initializer;
-      }
+  static Expression _makeForwardingCall(
+      Member target, List<DartType> typeArguments, FunctionNode function) {
+    final List<Expression> positional = function.positionalParameters
+        .map((v) => new VariableGet(v)..fileOffset = v.fileOffset)
+        .toList();
+    final List<NamedExpression> named = function.namedParameters
+        .map((v) => new NamedExpression(
+            v.name!, new VariableGet(v)..fileOffset = v.fileOffset)
+          ..fileOffset = v.fileOffset)
+        .toList();
+    final Arguments args =
+        new Arguments(positional, named: named, types: typeArguments);
+    if (target is Procedure) {
+      return new StaticInvocation(target, args)
+        ..fileOffset = function.fileOffset;
+    } else if (target is Constructor) {
+      return new ConstructorInvocation(target, args)
+        ..fileOffset = function.fileOffset;
+    } else {
+      throw 'Unexpected target for redirecting factory:'
+          ' ${target.runtimeType} $target';
     }
-    return null;
   }
 
   static void restoreFromDill(Procedure factory) {
@@ -80,41 +95,51 @@
     // dill files. See `ClassBuilder.addRedirectingConstructor` in
     // [kernel_class_builder.dart](kernel_class_builder.dart).
     FunctionNode function = factory.function;
-    ExpressionStatement statement = function.body as ExpressionStatement;
-    List<DartType>? typeArguments;
-    if (statement.expression is Let) {
-      Let expression = statement.expression as Let;
-      typeArguments = decodeTypeArguments(expression.body);
-    }
-    function.body = new RedirectingFactoryBody.internal(
-        getValue(statement.expression), typeArguments)
+    Expression value = (function.body as ReturnStatement).expression!;
+    function.body = new RedirectingFactoryBody._internal(value)
       ..parent = function;
   }
 
   static bool hasRedirectingFactoryBodyShape(Procedure factory) {
-    if (factory.function.body is! ExpressionStatement) return false;
-    Expression body = (factory.function.body as ExpressionStatement).expression;
-    if (body is Let &&
-        body.variable.name == letName &&
-        body.variable.type is DynamicType &&
-        body.variable.initializer is StaticGet) {
-      Expression currentArgument = body.body;
-      int argumentCount = 0;
-      while (currentArgument is! InvalidExpression) {
-        Expression argument = currentArgument;
-        if (argument is Let) {
-          String argumentName = "${varNamePrefix}${argumentCount}";
-          if (argument.variable.name != argumentName) {
-            return false;
-          }
-          if (argument.variable.initializer is! NullLiteral) {
-            return false;
-          }
-          currentArgument = argument.body;
-          ++argumentCount;
-        } else {
+    final FunctionNode function = factory.function;
+    final Statement? body = function.body;
+    if (body is! ReturnStatement) return false;
+    final Expression? value = body.expression;
+    if (body is InvalidExpression) {
+      return true;
+    } else if (value is StaticInvocation || value is ConstructorInvocation) {
+      // Verify that invocation forwards all arguments.
+      final Arguments args = (value as InvocationExpression).arguments;
+      if (args.positional.length != function.positionalParameters.length) {
+        return false;
+      }
+      int i = 0;
+      for (Expression arg in args.positional) {
+        if (arg is! VariableGet) {
           return false;
         }
+        if (arg.variable != function.positionalParameters[i]) {
+          return false;
+        }
+        ++i;
+      }
+      if (args.named.length != function.namedParameters.length) {
+        return false;
+      }
+      i = 0;
+      for (NamedExpression arg in args.named) {
+        final Expression value = arg.value;
+        if (value is! VariableGet) {
+          return false;
+        }
+        final VariableDeclaration param = function.namedParameters[i];
+        if (value.variable != param) {
+          return false;
+        }
+        if (arg.name != param.name) {
+          return false;
+        }
+        ++i;
       }
       return true;
     } else {
@@ -122,33 +147,6 @@
     }
   }
 
-  static Expression encodeTypeArguments(List<DartType>? typeArguments) {
-    Expression result = new InvalidExpression(null);
-    if (typeArguments == null) {
-      return result;
-    }
-    for (int i = typeArguments.length - 1; i >= 0; i--) {
-      result = new Let(
-          new VariableDeclaration("$varNamePrefix$i",
-              type: typeArguments[i], initializer: new NullLiteral()),
-          result);
-    }
-    return result;
-  }
-
-  static List<DartType>? decodeTypeArguments(Expression encoded) {
-    if (encoded is InvalidExpression) {
-      return null;
-    }
-    List<DartType> result = <DartType>[];
-    while (encoded is Let) {
-      Let head = encoded;
-      result.add(head.variable.type);
-      encoded = head.body;
-    }
-    return result;
-  }
-
   @override
   String toString() {
     return "RedirectingFactoryBody(${toStringInternal()})";
@@ -194,10 +192,10 @@
   helper.ensureLoaded(hare);
   RedirectingFactoryBody? hareBody = getRedirectingFactoryBody(hare);
   while (tortoise != hare) {
-    if (tortoiseBody?.isUnresolved ?? true) {
+    if (tortoiseBody == null || tortoiseBody.isError) {
       return new RedirectionTarget(tortoise, typeArguments);
     }
-    Member nextTortoise = tortoiseBody!.target!;
+    Member nextTortoise = tortoiseBody.target!;
     helper.ensureLoaded(nextTortoise);
     List<DartType>? nextTypeArguments = tortoiseBody.typeArguments;
     if (nextTypeArguments != null) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index 7c313ec..0a3ac49 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -29,10 +29,7 @@
 import '../type_inference/type_schema.dart' show UnknownType;
 
 import 'redirecting_factory_body.dart'
-    show
-        RedirectingFactoryBody,
-        getRedirectingFactoryBody,
-        isRedirectingFactory;
+    show RedirectingFactoryBody, isRedirectingFactory;
 
 List<LocatedMessage> verifyComponent(Component component, Target target,
     {bool? isOutline, bool? afterConst, bool skipPlatform: false}) {
@@ -284,13 +281,11 @@
     bool hasBody = isRedirectingFactory(node) ||
         RedirectingFactoryBody.hasRedirectingFactoryBodyShape(node);
     bool hasFlag = node.isRedirectingFactory;
-    if (hasBody != hasFlag) {
-      String hasBodyString = hasBody ? "has" : "doesn't have";
-      String hasFlagString = hasFlag ? "has" : "doesn't have";
+    if (hasFlag && !hasBody) {
       problem(
           node,
-          "Procedure '${node.name}' ${hasBodyString} a body "
-          "of a redirecting factory, but ${hasFlagString} the "
+          "Procedure '${node.name}' doesn't have a body "
+          "of a redirecting factory, but has the "
           "'isRedirectingFactory' bit set.");
     }
 
@@ -429,10 +424,6 @@
   void visitStaticInvocation(StaticInvocation node) {
     enterTreeNode(node);
     super.visitStaticInvocation(node);
-    RedirectingFactoryBody? body = getRedirectingFactoryBody(node.target);
-    if (body != null) {
-      problem(node, "Attempt to invoke redirecting factory.");
-    }
     exitTreeNode(node);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 84ae1c4..28f7373 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -39,7 +39,6 @@
 import '../kernel/combined_member_signature.dart';
 import '../kernel/kernel_builder.dart' show compareProcedures;
 import '../kernel/kernel_target.dart' show KernelTarget;
-import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody;
 import '../kernel/redirecting_factory_body.dart' show redirectingName;
 import '../kernel/type_algorithms.dart'
     show Variance, computeTypeVariableBuilderVariance;
@@ -937,42 +936,44 @@
                 _addRedirectingConstructor(
                     declaration, library, getterReference);
               }
+              Member? targetNode;
               if (targetBuilder is FunctionBuilder) {
-                List<DartType> typeArguments = declaration.typeArguments ??
-                    new List<DartType>.filled(
-                        targetBuilder
-                            .member.enclosingClass!.typeParameters.length,
-                        const UnknownType());
-                declaration.setRedirectingFactoryBody(
-                    targetBuilder.member, typeArguments);
+                targetNode = targetBuilder.member;
               } else if (targetBuilder is DillMemberBuilder) {
-                List<DartType> typeArguments = declaration.typeArguments ??
-                    new List<DartType>.filled(
-                        targetBuilder
-                            .member.enclosingClass!.typeParameters.length,
-                        const UnknownType());
-                declaration.setRedirectingFactoryBody(
-                    targetBuilder.member, typeArguments);
+                targetNode = targetBuilder.member;
               } else if (targetBuilder is AmbiguousBuilder) {
-                addProblem(
+                addProblemForRedirectingFactory(
+                    declaration,
                     templateDuplicatedDeclarationUse
                         .withArguments(redirectionTarget.fullNameForErrors),
                     redirectionTarget.charOffset,
                     noLength);
-                // CoreTypes aren't computed yet, and this is the outline
-                // phase. So we can't and shouldn't create a method body.
-                declaration.body = new RedirectingFactoryBody.unresolved(
-                    redirectionTarget.fullNameForErrors);
               } else {
-                addProblem(
+                addProblemForRedirectingFactory(
+                    declaration,
                     templateRedirectionTargetNotFound
                         .withArguments(redirectionTarget.fullNameForErrors),
                     redirectionTarget.charOffset,
                     noLength);
-                // CoreTypes aren't computed yet, and this is the outline
-                // phase. So we can't and shouldn't create a method body.
-                declaration.body = new RedirectingFactoryBody.unresolved(
-                    redirectionTarget.fullNameForErrors);
+              }
+              if (targetNode != null &&
+                  targetNode is Constructor &&
+                  targetNode.enclosingClass.isAbstract) {
+                addProblemForRedirectingFactory(
+                    declaration,
+                    templateAbstractRedirectedClassInstantiation
+                        .withArguments(redirectionTarget.fullNameForErrors),
+                    redirectionTarget.charOffset,
+                    noLength);
+                targetNode = null;
+              }
+              if (targetNode != null) {
+                List<DartType> typeArguments = declaration.typeArguments ??
+                    new List<DartType>.filled(
+                        targetNode.enclosingClass!.typeParameters.length,
+                        const UnknownType());
+                declaration.setRedirectingFactoryBody(
+                    targetNode, typeArguments);
               }
             }
           }
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 8eb1f8d..a9154ac 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -169,6 +169,8 @@
 CyclicClassHierarchy/part_wrapped_script2: Fail
 CyclicClassHierarchy/script1: Fail # We report an error for each class involved in the cycle.
 CyclicClassHierarchy/script2: Fail # We report an error for each class involved in the cycle.
+CyclicRedirectingFactoryConstructors/part_wrapped_script: Fail # Error is reported for each factory involved in the cycle.
+CyclicRedirectingFactoryConstructors/script: Fail # Error is reported for each factory involved in the cycle.
 CyclicTypedef/example: Fail
 DefaultListConstructorError/analyzerCode: Fail
 DefaultListConstructorError/example: Fail
diff --git a/pkg/front_end/test/lint_test.status b/pkg/front_end/test/lint_test.status
index 25fc133..83361a2 100644
--- a/pkg/front_end/test/lint_test.status
+++ b/pkg/front_end/test/lint_test.status
@@ -33,7 +33,6 @@
 front_end/lib/src/fasta/scanner/token/ImportsTwice: Fail
 front_end/lib/src/fasta/scanner/utf8_bytes_scanner/ImportsTwice: Fail
 front_end/lib/src/fasta/source/scope_listener/Exports: Fail
-front_end/lib/src/fasta/source/source_class_builder/ImportsTwice: Fail
 front_end/lib/src/fasta/source/value_kinds/ImportsTwice: Fail
 front_end/lib/src/testing/id_testing_helper/Exports: Fail
 kernel/lib/ast/Exports: Fail
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
index cfec78a..04e78be 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
@@ -12,7 +12,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     return new self::A::•<self::A::fact::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
 }
 static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
 static const field () → self::A<core::int> b = #C2;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
index d84286f..04e78be 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     return new self::A::•<self::A::fact::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let Never #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
 }
 static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
 static const field () → self::A<core::int> b = #C2;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
index 7412c43..0d1f1e3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
@@ -12,7 +12,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     return new self::A::•<self::A::fact::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
 }
 static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
 static const field () → self::A<core::int> b = #C2;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
index b93adae..960caf1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
@@ -11,7 +11,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     ;
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
 }
 static const field <T extends core::Object? = dynamic>() → self::A<T%> a = self::A::•;
 static const field () → self::A<core::int> b = self::A::•<core::int>;
@@ -54,4 +54,4 @@
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:29:11 -> InstantiationConstant(A.fact<int*>)
 Evaluated: TypedefTearOff @ org-dartlang-testcase:///const_tear_off.dart:30:11 -> TypedefTearOffConstant(<T>A.redirect<int>)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:31:11 -> InstantiationConstant(A.redirect<int*>)
-Extra constant evaluation: evaluated: 23, effectively constant: 18
+Extra constant evaluation: evaluated: 21, effectively constant: 18
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
index 0a0394c..0d1f1e3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
   static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
     return new self::A::•<self::A::fact::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let Never #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
 }
 static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
 static const field () → self::A<core::int> b = #C2;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
index 331bcc5..8954e19 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
@@ -96,6 +96,6 @@
     : super core::Object::•()
     ;
   static factory •() → self::E4
-    let dynamic #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
index fdbc0b6..8954e19 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
@@ -96,6 +96,6 @@
     : super core::Object::•()
     ;
   static factory •() → self::E4
-    let Never #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
index 331bcc5..8954e19 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
@@ -96,6 +96,6 @@
     : super core::Object::•()
     ;
   static factory •() → self::E4
-    let dynamic #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
index 34ae47c..d7f841c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
@@ -86,7 +86,7 @@
   constructor _() → self::E4
     ;
   static factory •() → self::E4
-    let dynamic #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
index fdbc0b6..8954e19 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
@@ -96,6 +96,6 @@
     : super core::Object::•()
     ;
   static factory •() → self::E4
-    let Never #redirecting_factory = self::E4::_ in invalid-expression;
+    return new self::E4::_();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
index 613a456..287832b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
@@ -194,7 +194,7 @@
   static method _#named#tearOff() → mai::Class2
     return new mai::Class2::named();
   static factory redirect() → mai::Class2
-    let dynamic #redirecting_factory = mai::Class2::named in invalid-expression;
+    return new mai::Class2::named();
   static method _#redirect#tearOff() → mai::Class2
     return new mai::Class2::named();
 }
@@ -218,7 +218,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
     return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%>
-    let dynamic #redirecting_factory = mai::Class4::_ in let mai::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::Class4::_<mai::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%>
     return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
index 0a6f706..bcf1164 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
@@ -194,7 +194,7 @@
   static method _#named#tearOff() → mai::Class2
     return new mai::Class2::named();
   static factory redirect() → mai::Class2
-    let Never #redirecting_factory = mai::Class2::named in invalid-expression;
+    return new mai::Class2::named();
   static method _#redirect#tearOff() → mai::Class2
     return new mai::Class2::named();
 }
@@ -218,7 +218,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
     return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%>
-    let Never #redirecting_factory = mai::Class4::_ in let mai::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::Class4::_<mai::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%>
     return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
index 613a456..287832b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
@@ -194,7 +194,7 @@
   static method _#named#tearOff() → mai::Class2
     return new mai::Class2::named();
   static factory redirect() → mai::Class2
-    let dynamic #redirecting_factory = mai::Class2::named in invalid-expression;
+    return new mai::Class2::named();
   static method _#redirect#tearOff() → mai::Class2
     return new mai::Class2::named();
 }
@@ -218,7 +218,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
     return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%>
-    let dynamic #redirecting_factory = mai::Class4::_ in let mai::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::Class4::_<mai::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%>
     return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
index a682b15..f714802 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
@@ -29,7 +29,7 @@
   static method _#named#tearOff() → self2::Class2
     return new self2::Class2::named();
   static factory redirect() → self2::Class2
-    let dynamic #redirecting_factory = self2::Class2::named in invalid-expression;
+    return new self2::Class2::named();
   static method _#redirect#tearOff() → self2::Class2
     return new self2::Class2::named();
 }
@@ -51,7 +51,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::_#new#tearOff::T%>
     return self2::Class4::•<self2::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::redirect::T%>
-    let dynamic #redirecting_factory = self2::Class4::_ in let self2::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class4::_<self2::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::_#redirect#tearOff::T%>
     return new self2::Class4::_<self2::Class4::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
index 0a6f706..bcf1164 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
@@ -194,7 +194,7 @@
   static method _#named#tearOff() → mai::Class2
     return new mai::Class2::named();
   static factory redirect() → mai::Class2
-    let Never #redirecting_factory = mai::Class2::named in invalid-expression;
+    return new mai::Class2::named();
   static method _#redirect#tearOff() → mai::Class2
     return new mai::Class2::named();
 }
@@ -218,7 +218,7 @@
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%>
     return mai::Class4::•<mai::Class4::_#new#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%>
-    let Never #redirecting_factory = mai::Class4::_ in let mai::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::Class4::_<mai::Class4::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%>
     return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
index e617e7d..31fe515 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let dynamic #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -54,7 +54,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let dynamic #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -66,7 +66,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let dynamic #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -78,7 +78,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let dynamic #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -90,7 +90,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let dynamic #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
index 93bb730..2b61e14 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let Never #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -54,7 +54,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let Never #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -66,7 +66,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let Never #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -78,7 +78,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let Never #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -90,7 +90,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let Never #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
index e617e7d..31fe515 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let dynamic #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -54,7 +54,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let dynamic #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -66,7 +66,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let dynamic #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -78,7 +78,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let dynamic #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -90,7 +90,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let dynamic #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
index 26553e6..f1a60c8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
@@ -9,7 +9,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let dynamic #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -20,7 +20,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let dynamic #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -31,7 +31,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let dynamic #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let dynamic #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let dynamic #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
index 93bb730..2b61e14 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -42,7 +42,7 @@
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
     return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
   static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
-    let Never #redirecting_factory = self::Class1::_ in let self::Class1::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class1::_<self::Class1::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
@@ -54,7 +54,7 @@
   static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
     return new self::Class2::_<self::Class2::_#_#tearOff::T>();
   static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
-    let Never #redirecting_factory = self::Class2::_ in let self::Class2::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class2::_<self::Class2::•::T>();
   static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
@@ -66,7 +66,7 @@
   static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
     return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
   static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
-    let Never #redirecting_factory = self::Class3::_ in let self::Class3::•::T% #typeArg0 = null in let self::Class3::•::S% #typeArg1 = null in invalid-expression;
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
   static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
@@ -78,7 +78,7 @@
   static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
     return new self::Class4::_<self::Class4::_#_#tearOff::T>();
   static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
-    let Never #redirecting_factory = self::Class4::_ in let self::Class4::•::T #typeArg0 = null in invalid-expression;
+    return new self::Class4::_<self::Class4::•::T>();
   static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
@@ -90,7 +90,7 @@
   static method _#_#tearOff() → self::Class4int
     return new self::Class4int::_();
   static factory •() → self::Class4int
-    let Never #redirecting_factory = self::Class4int::_ in invalid-expression;
+    return new self::Class4int::_();
   static method _#new#tearOff() → self::Class4int
     return new self::Class4int::_();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
index 9277874..abfa7c0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
@@ -17,7 +17,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
index bfa45c0..e5c1801 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let Never #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
@@ -115,4 +115,4 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:48:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:50:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:51:3 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 61, effectively constant: 10
+Extra constant evaluation: evaluated: 59, effectively constant: 10
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
index 8e0844f..b2261ef 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
@@ -17,7 +17,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
index e433d37..05aae66 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
@@ -16,7 +16,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let dynamic #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
@@ -78,4 +78,4 @@
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:31:13 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:32:13 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:33:31 -> InstantiationConstant(A._#new#tearOff<int>)
-Extra constant evaluation: evaluated: 32, effectively constant: 15
+Extra constant evaluation: evaluated: 30, effectively constant: 15
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
index 0b3ac45..5829743 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
     return self::A::fact<self::A::_#fact#tearOff::T%>();
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
-    let Never #redirecting_factory = self::A::• in let self::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self::A::•<self::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
@@ -118,4 +118,4 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:48:3 -> BoolConstant(false)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:50:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:51:3 -> BoolConstant(false)
-Extra constant evaluation: evaluated: 61, effectively constant: 10
+Extra constant evaluation: evaluated: 59, effectively constant: 10
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
index d55e231..cd54bc8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
@@ -24,10 +24,14 @@
   static method constructor() → self::Class
     return new self::Class::_();
   static factory a() → self::Class
-    let dynamic #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let dynamic #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
index fe5e039..cd54bc8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
@@ -24,10 +24,14 @@
   static method constructor() → self::Class
     return new self::Class::_();
   static factory a() → self::Class
-    let core::String* #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let core::String* #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
index d55e231..cd54bc8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
@@ -24,10 +24,14 @@
   static method constructor() → self::Class
     return new self::Class::_();
   static factory a() → self::Class
-    let dynamic #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let dynamic #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
index 7a6886a..173ec34 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
@@ -23,10 +23,14 @@
   static method constructor() → self::Class
     ;
   static factory a() → self::Class
-    let dynamic #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let dynamic #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
index fe5e039..cd54bc8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
@@ -24,10 +24,14 @@
   static method constructor() → self::Class
     return new self::Class::_();
   static factory a() → self::Class
-    let core::String* #redirecting_factory = "Class.nonexisting" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
   static method _#a#tearOff() → self::Class;
   static factory b() → self::Class
-    let core::String* #redirecting_factory = "Class.constructor" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
index aed844f..8356f0d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -69,7 +69,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -82,7 +82,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -95,7 +95,7 @@
   static method _#_#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field = #C1]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -109,7 +109,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -124,7 +124,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
   static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
   static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -138,7 +138,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -152,7 +152,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
index ab369c9..6ee2990 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -69,7 +69,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let () → self::Class2 #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -82,7 +82,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let Never #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -95,7 +95,7 @@
   static method _#_#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field = #C1]) → self::Class4
-    let Never #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -109,7 +109,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let Never #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -124,7 +124,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
   static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
-    let Never #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
   static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -138,7 +138,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let Never #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -152,7 +152,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let Never #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
index aed844f..8356f0d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -69,7 +69,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -82,7 +82,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -95,7 +95,7 @@
   static method _#_#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field = #C1]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -109,7 +109,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -124,7 +124,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
   static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
   static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -138,7 +138,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -152,7 +152,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
index 0067daa..e104583 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -9,7 +9,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -24,7 +24,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -36,7 +36,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -48,7 +48,7 @@
   static method _#_#tearOff([core::int? field]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -61,7 +61,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -75,7 +75,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
   static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
   static method _#new#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -88,7 +88,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -101,7 +101,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
index ab369c9..6ee2990 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -53,7 +53,7 @@
   static method _#_#tearOff() → self::Class1
     return new self::Class1::_();
   static factory •() → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   static method _#new#tearOff() → self::Class1
     return new self::Class1::_();
 }
@@ -69,7 +69,7 @@
   static method _#_#tearOff() → self::Class2
     return self::Class2::_();
   static factory named() → self::Class2
-    let () → self::Class2 #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
   static method _#named#tearOff() → self::Class2
     return self::Class2::_();
 }
@@ -82,7 +82,7 @@
   static method _#_#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
   static factory •(core::int field) → self::Class3
-    let Never #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
   static method _#new#tearOff(core::int field) → self::Class3
     return new self::Class3::_(field);
 }
@@ -95,7 +95,7 @@
   static method _#_#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
   static factory •([core::int? field = #C1]) → self::Class4
-    let Never #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
   static method _#new#tearOff([core::int? field = #C1]) → self::Class4
     return new self::Class4::_(field);
 }
@@ -109,7 +109,7 @@
   static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let Never #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
   static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
@@ -124,7 +124,7 @@
   static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
   static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
-    let Never #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
   static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
@@ -138,7 +138,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let Never #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
     return new self::Class7a::•();
 }
@@ -152,7 +152,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let Never #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
     return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
index 8d0766c..c7984a5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
@@ -24,7 +24,7 @@
   static method _#_#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field = #C2]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -37,7 +37,7 @@
   static method _#_#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field = #C2}) → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
index 726cb47..9f46561 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
   static method _#_#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field = #C2]) → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -37,7 +37,7 @@
   static method _#_#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field = #C2}) → self::Class2
-    let Never #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
index 8d0766c..c7984a5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
@@ -24,7 +24,7 @@
   static method _#_#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field = #C2]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -37,7 +37,7 @@
   static method _#_#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field = #C2}) → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
index e6fbbd5..1cd9ef2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
@@ -10,7 +10,7 @@
   static method _#_#tearOff([core::int field]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -22,7 +22,7 @@
   static method _#_#tearOff({core::int field}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field}) → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field}) → self::Class2
     return new self::Class2::_(field: field);
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
index 726cb47..9f46561 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
   static method _#_#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field = #C2]) → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C1]) → self::Class1
     return new self::Class1::_(field);
 }
@@ -37,7 +37,7 @@
   static method _#_#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field = #C2}) → self::Class2
-    let Never #redirecting_factory = self::Class2::_ in invalid-expression;
+    return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C1}) → self::Class2
     return new self::Class2::_(field: field);
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
index dcd89ad..c019108 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
@@ -53,37 +53,37 @@
   static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
index e90c3708..ffa443b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
@@ -53,37 +53,37 @@
   static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
index dcd89ad..c019108 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
@@ -53,37 +53,37 @@
   static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
index 9ef35eb..c33110b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
@@ -13,37 +13,37 @@
   static method _#positional#tearOff([core::int field1, core::int field2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1, core::int field2]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1, core::int field2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1]) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1, core::int field2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1, core::int field2}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1, core::int field2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2, core::int field1}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2, core::int field1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2}) → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
index e90c3708..ffa443b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
@@ -53,37 +53,37 @@
   static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1 = #C3, core::int field2 = #C3]) → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalFewer1([core::int field1 = #C3]) → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
-    let Never #redirecting_factory = self::Class1::positional in invalid-expression;
+    return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1 = #C3, core::int field2 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedReorder({core::int field2 = #C3, core::int field1 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static factory redirectNamedFewer1({core::int field1 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
     return new self::Class1::named(field1: field1);
   static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
-    let Never #redirecting_factory = self::Class1::named in invalid-expression;
+    return new self::Class1::named();
   static method _#redirectNamedFewer3#tearOff() → self::Class1
     return new self::Class1::named();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
index 2dc1f69..ad13134 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let dynamic #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
index a5b6962..ad13134 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let Never #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
index 2dc1f69..ad13134 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let dynamic #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
index f1af048..cd0b2f3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
@@ -48,7 +48,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b, core::int c}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let dynamic #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
index a5b6962..ad13134 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
-    let Never #redirecting_factory = mai::A::• in let mai::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new mai::A::•<mai::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#redirect#tearOff::T%>
     return new mai::A::•<mai::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
index 3e82a43..4a19911 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let dynamic #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
index f7eae91..4a19911 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let Never #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
index 3e82a43..4a19911 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let dynamic #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
index feafdc3..cca6cc2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
@@ -48,7 +48,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b, core::int c}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let dynamic #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
index f7eae91..4a19911 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
@@ -100,7 +100,7 @@
   static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
-    let Never #redirecting_factory = typ::A::• in let typ::A::redirect::T% #typeArg0 = null in invalid-expression;
+    return new typ::A::•<typ::A::redirect::T%>();
   static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
     return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
index b589af6..0ed236c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
@@ -15,11 +15,11 @@
     : super core::Object::•()
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
index a3c5d1d..0ed236c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
@@ -15,11 +15,11 @@
     : super core::Object::•()
     ;
   static factory redirectingFactory() → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let () → self::A #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
index b589af6..0ed236c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
@@ -15,11 +15,11 @@
     : super core::Object::•()
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
index e80d672..0b5088f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
@@ -7,11 +7,11 @@
   constructor •() → self::A
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
index a3c5d1d..0ed236c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
@@ -15,11 +15,11 @@
     : super core::Object::•()
     ;
   static factory redirectingFactory() → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory redirectingTwice() → self::A
-    let () → self::A #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+    return self::A::redirectingFactory();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
index 4cbaccd..1ff3758 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -61,7 +61,7 @@
   static factory _() → self::Class2
     return new self::Class2::__();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -70,7 +70,7 @@
     : self::Class3::field = field, super core::Object::•()
     ;
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -79,7 +79,7 @@
     : self::Class4::field = field, super core::Object::•()
     ;
   static factory •([core::int? field = #C1]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -89,7 +89,7 @@
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -100,7 +100,7 @@
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
   static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -110,7 +110,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -120,7 +120,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
index 9650d39..83c7798 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -61,7 +61,7 @@
   static factory _() → self::Class2
     return new self::Class2::__();
   static factory named() → self::Class2
-    let () → self::Class2 #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -70,7 +70,7 @@
     : self::Class3::field = field, super core::Object::•()
     ;
   static factory •(core::int field) → self::Class3
-    let Never #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -79,7 +79,7 @@
     : self::Class4::field = field, super core::Object::•()
     ;
   static factory •([core::int? field = #C1]) → self::Class4
-    let Never #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -89,7 +89,7 @@
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let Never #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -100,7 +100,7 @@
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
   static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
-    let Never #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -110,7 +110,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let Never #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -120,7 +120,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let Never #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
index 4cbaccd..1ff3758 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -61,7 +61,7 @@
   static factory _() → self::Class2
     return new self::Class2::__();
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -70,7 +70,7 @@
     : self::Class3::field = field, super core::Object::•()
     ;
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -79,7 +79,7 @@
     : self::Class4::field = field, super core::Object::•()
     ;
   static factory •([core::int? field = #C1]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -89,7 +89,7 @@
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -100,7 +100,7 @@
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
   static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -110,7 +110,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -120,7 +120,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
index d972b38..3714e57 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   constructor _() → self::Class1
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -16,7 +16,7 @@
   static factory _() → self::Class2
     ;
   static factory named() → self::Class2
-    let dynamic #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -24,7 +24,7 @@
   constructor _(core::int field) → self::Class3
     ;
   static factory •(core::int field) → self::Class3
-    let dynamic #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -32,7 +32,7 @@
   constructor _([core::int? field]) → self::Class4
     ;
   static factory •([core::int? field]) → self::Class4
-    let dynamic #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -41,7 +41,7 @@
   constructor _(core::int field1, [core::int? field2]) → self::Class5
     ;
   static factory •(core::int field1, [core::int? field2]) → self::Class5
-    let dynamic #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -51,7 +51,7 @@
   constructor _(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     ;
   static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
-    let dynamic #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -60,7 +60,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let dynamic #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -69,7 +69,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let dynamic #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
index 9650d39..83c7798 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let Never #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
 }
 class Class2 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
@@ -61,7 +61,7 @@
   static factory _() → self::Class2
     return new self::Class2::__();
   static factory named() → self::Class2
-    let () → self::Class2 #redirecting_factory = self::Class2::_ in invalid-expression;
+    return self::Class2::_();
 }
 class Class3 extends core::Object {
   final field core::int field;
@@ -70,7 +70,7 @@
     : self::Class3::field = field, super core::Object::•()
     ;
   static factory •(core::int field) → self::Class3
-    let Never #redirecting_factory = self::Class3::_ in invalid-expression;
+    return new self::Class3::_(field);
 }
 class Class4 extends core::Object {
   final field core::int? field;
@@ -79,7 +79,7 @@
     : self::Class4::field = field, super core::Object::•()
     ;
   static factory •([core::int? field = #C1]) → self::Class4
-    let Never #redirecting_factory = self::Class4::_ in invalid-expression;
+    return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
@@ -89,7 +89,7 @@
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
   static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
-    let Never #redirecting_factory = self::Class5::_ in invalid-expression;
+    return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
@@ -100,7 +100,7 @@
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
   static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
-    let Never #redirecting_factory = self::Class6::_ in invalid-expression;
+    return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
   constructor •() → self::Class7a
@@ -110,7 +110,7 @@
 class Class7b extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
   static factory •() → self::Class7b
-    let Never #redirecting_factory = self::Class7a::• in invalid-expression;
+    return new self::Class7a::•();
 }
 class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
   constructor •() → self::Class8a<self::Class8a::T%>
@@ -120,7 +120,7 @@
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
-    let Never #redirecting_factory = self::Class8a::• in let self::Class8b::•::T% #typeArg0 = null in invalid-expression;
+    return new self::Class8a::•<self::Class8b::•::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
index 50ef75f8..87df92f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
@@ -11,9 +11,9 @@
     : this self::A::•()
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
index 44b6f22..87df92f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
@@ -11,9 +11,9 @@
     : this self::A::•()
     ;
   static factory redirectingFactory() → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
index 50ef75f8..87df92f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
@@ -11,9 +11,9 @@
     : this self::A::•()
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
index b0b2882..0041523 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
@@ -9,9 +9,9 @@
   constructor redirecting() → self::A
     ;
   static factory redirectingFactory() → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
index 44b6f22..87df92f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
@@ -11,9 +11,9 @@
     : this self::A::•()
     ;
   static factory redirectingFactory() → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory redirectingFactoryChild() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
 }
 class B extends self::A {
   synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
index 3d26130..36647b1 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
+//   factory B() = A;
+//                 ^
+//
 // pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
 //  - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
@@ -12,10 +16,6 @@
 //   new A();
 //       ^
 //
-// pkg/front_end/testcases/general/abstract_instantiation.dart:8:11: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
-//   factory B() = A;
-//           ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -27,10 +27,18 @@
 abstract class B extends core::Object implements self::A {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •() → self::B
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
+ - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
 }
 static method test() → dynamic {
   throw new core::AbstractClassInstantiationError::•("A");
-  throw new core::AbstractClassInstantiationError::•("A");
+  invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
+ - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
index abaa3b2..ff08754 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
+//   factory B() = A;
+//                 ^
+//
 // pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
 //  - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
@@ -18,7 +22,11 @@
 abstract class B extends core::Object implements self::A {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •() → self::B
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
+ - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
index 593c025..36647b1 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
+//   factory B() = A;
+//                 ^
+//
 // pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
 //  - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
@@ -12,10 +16,6 @@
 //   new A();
 //       ^
 //
-// pkg/front_end/testcases/general/abstract_instantiation.dart:8:11: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
-//   factory B() = A;
-//           ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -27,10 +27,18 @@
 abstract class B extends core::Object implements self::A {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •() → self::B
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
+ - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
 }
 static method test() → dynamic {
   throw new core::AbstractClassInstantiationError::•("A");
-  throw new core::AbstractClassInstantiationError::•("A");
+  invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
+ - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
index 3cddf53..d0e5d30 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
@@ -38,7 +38,7 @@
     return throw "unsupported";
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
-    let dynamic #redirecting_factory = test::Class::_internal in invalid-expression;
+    return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
index 62a00f1..8534e61 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
@@ -26,7 +26,7 @@
   external static factory constFact({core::bool defaultValue = true}) → self2::Class;
   @_in::patch
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = true}) → self2::Class
-    let dynamic #redirecting_factory = self2::Class::_internal in invalid-expression;
+    return new self2::Class::_internal(defaultValue: defaultValue);
 }
 
 
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
index 3cddf53..d0e5d30 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
@@ -38,7 +38,7 @@
     return throw "unsupported";
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
-    let dynamic #redirecting_factory = test::Class::_internal in invalid-expression;
+    return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
index f95725e..a73f4c5 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
@@ -78,7 +78,7 @@
   static factory fact() → self::C*
     return null;
   static factory fact2() → self::C*
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   static method staticFunction(core::int* i) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
index c096df0..6da6ddb 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
@@ -13,7 +13,7 @@
   static factory fact() → self::C*
     ;
   static factory fact2() → self::C*
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   static method staticFunction(core::int* i) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
index 36b9317..7ea1c1e 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
@@ -78,7 +78,7 @@
   static factory fact() → self::C*
     return null;
   static factory fact2() → self::C*
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   static method staticFunction(core::int* i) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
index e023b92..bf4d0eb 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
@@ -5,7 +5,7 @@
 class A<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::A::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
index 7d7ca21..04afde7 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::A::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
index 485cd83..bf4d0eb 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 class A<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let Never #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::A::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
index ed97aea..56f882f 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
@@ -23,7 +23,7 @@
     : super core::Object::•()
     ;
   static factory bar() → foo::Foo
-    let dynamic #redirecting_factory = bar::Bar::• in let dynamic #typeArg0 = null in invalid-expression;
+    return new bar::Bar::•<dynamic>();
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
index e71f7a0..db7011d 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
@@ -25,7 +25,7 @@
     : super core::Object::•()
     ;
   static factory bar() → foo::Foo
-    let dynamic #redirecting_factory = bar::Bar::• in let dynamic #typeArg0 = null in invalid-expression;
+    return new bar::Bar::•<dynamic>();
 }
 
 library /*isNonNullableByDefault*/;
@@ -44,4 +44,4 @@
 
 Extra constant evaluation status:
 Evaluated: SetLiteral @ org-dartlang-testcase:///main.dart:7:27 -> InstanceConstant(const _UnmodifiableSet<Foo*>{_UnmodifiableSet._map: const _ImmutableMap<Foo*, Null>{_ImmutableMap._kvPairs: const <dynamic>[const Bar<dynamic>{}, null]}})
-Extra constant evaluation: evaluated: 6, effectively constant: 1
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
index f7ed607..56f882f 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     : super core::Object::•()
     ;
   static factory bar() → foo::Foo
-    let Never #redirecting_factory = bar::Bar::• in let Null #typeArg0 = null in invalid-expression;
+    return new bar::Bar::•<dynamic>();
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
index 05d8566..dcbf1e1 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory foo() → self::A
-    let dynamic #redirecting_factory = self::B::• in let dynamic #typeArg0 = null in invalid-expression;
+    return new self::B::•<dynamic>();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
index 25cabc79..a916713 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory foo() → self::A
-    let dynamic #redirecting_factory = self::B::• in let dynamic #typeArg0 = null in invalid-expression;
+    return new self::B::•<dynamic>();
 }
 static method main() → dynamic
   ;
@@ -26,4 +26,4 @@
 
 Extra constant evaluation status:
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue45003_2.dart:6:30 -> InstanceConstant(const B<dynamic>{})
-Extra constant evaluation: evaluated: 6, effectively constant: 1
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
index 862829d..dcbf1e1 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory foo() → self::A
-    let Never #redirecting_factory = self::B::• in let Null #typeArg0 = null in invalid-expression;
+    return new self::B::•<dynamic>();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
index 16d5138..651a6e4 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
@@ -34,7 +34,7 @@
   static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    let dynamic #redirecting_factory = self2::_ArraySize::• in let self2::Array::•::T* #typeArg0 = null in invalid-expression;
+    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
index 68f366e..7c8d05d 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
@@ -35,7 +35,7 @@
   static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
   @_in::patch
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    let dynamic #redirecting_factory = self2::_ArraySize::• in let self2::Array::•::T* #typeArg0 = null in invalid-expression;
+    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,4 +53,4 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:10:1 -> InstanceConstant(const _Patch{})
 Evaluated: ConstructorInvocation @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const pragma{pragma.name: "vm:entry-point", pragma.options: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:14:17 -> InstanceConstant(const _Patch{})
-Extra constant evaluation: evaluated: 9, effectively constant: 3
+Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
index 16d5138..651a6e4 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
   static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    let dynamic #redirecting_factory = self2::_ArraySize::• in let self2::Array::•::T* #typeArg0 = null in invalid-expression;
+    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
index 92a8aa8..f7a04b0 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
@@ -108,7 +108,7 @@
 Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
                                                ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass*}{<unresolved>}.+(2);
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final invalid-type #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final Never #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
index c14d8e6..2f3683b 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
@@ -140,7 +140,7 @@
         ^" in null;
   }
   {
-    () →* Null x = let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    () →* Null x = let final Never #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
               ^" in let final () →* Null T = () → Null {} in T;
   }
@@ -150,7 +150,7 @@
       ^";
   }
   {
-    <T extends core::Object* = dynamic>() →* Null x = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    <T extends core::Object* = dynamic>() →* Null x = let final Never #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
             ^" in let final <T extends core::Object* = dynamic>() →* Null T = <T extends core::Object* = dynamic>() → Null {} in T;
   }
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.expect b/pkg/front_end/testcases/general/private_members.dart.weak.expect
index 7320fdc..bf194cb 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.expect
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory _privateRedirectingFactory() → self::_Class
-    let dynamic #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
+    return new self::_Class::_privateConstructor();
   method _privateMethod() → void {}
   get _privateGetter() → core::int
     return 42;
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect b/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
index f9f6839..fdc9a0e 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
@@ -16,7 +16,7 @@
   constructor _privateConstructor() → self::_Class
     ;
   static factory _privateRedirectingFactory() → self::_Class
-    let dynamic #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
+    return new self::_Class::_privateConstructor();
   method _privateMethod() → void
     ;
   get _privateGetter() → core::int
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect b/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
index fd8fbf9..bf194cb 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     : super core::Object::•()
     ;
   static factory _privateRedirectingFactory() → self::_Class
-    let Never #redirecting_factory = self::_Class::_privateConstructor in invalid-expression;
+    return new self::_Class::_privateConstructor();
   method _privateMethod() → void {}
   get _privateGetter() → core::int
     return 42;
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.expect b/pkg/front_end/testcases/general/qualified.dart.weak.expect
index 6bf765c..4deccd1 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.expect
@@ -81,7 +81,7 @@
     : super core::Object::•()
     ;
   static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    let dynamic #redirecting_factory = lib::C::b in let self::C::b::T* #typeArg0 = null in invalid-expression;
+    return lib::C::b<self::C::b::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -122,7 +122,7 @@
     : super self::C::•()
     ;
   static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    let dynamic #redirecting_factory = lib::C::a in let lib::C::b::T* #typeArg0 = null in invalid-expression;
+    return new lib::C::a<lib::C::b::T*>();
 }
 class Supertype extends core::Object {
   synthetic constructor •() → lib::Supertype*
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
index 2102d04..7528cb9 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
@@ -79,7 +79,7 @@
   constructor a() → self::C<self::C::T*>*
     ;
   static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    let dynamic #redirecting_factory = lib::C::b in let self::C::b::T* #typeArg0 = null in invalid-expression;
+    return lib::C::b<self::C::b::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -109,7 +109,7 @@
   constructor a() → lib::C<lib::C::T*>*
     ;
   static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    let dynamic #redirecting_factory = lib::C::a in let lib::C::b::T* #typeArg0 = null in invalid-expression;
+    return new lib::C::a<lib::C::b::T*>();
 }
 class Supertype extends core::Object {
   synthetic constructor •() → lib::Supertype*
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
index ea5014d..a982723 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
@@ -82,7 +82,7 @@
     : super core::Object::•()
     ;
   static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    let <T extends core::Object* = dynamic>() →* lib::C<T*>* #redirecting_factory = lib::C::b in let self::C::b::T* #typeArg0 = null in invalid-expression;
+    return lib::C::b<self::C::b::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -123,7 +123,7 @@
     : super self::C::•()
     ;
   static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    let Never #redirecting_factory = lib::C::a in let lib::C::b::T* #typeArg0 = null in invalid-expression;
+    return new lib::C::a<lib::C::b::T*>();
 }
 class Supertype extends core::Object {
   synthetic constructor •() → lib::Supertype*
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
index 7443e13..0173839 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory fisk() → self::A*
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
index 6128d70..94296d3 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   constructor •() → self::A*
     ;
   static factory fisk() → self::A*
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
index c381d2d..0173839 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory fisk() → self::A*
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
index aa4bbfe..6155d9d 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
@@ -15,7 +15,11 @@
   static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
-    let dynamic #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -30,7 +34,7 @@
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
   static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    let dynamic #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
+    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -64,7 +68,11 @@
     : super core::Object::•()
     ;
   method method() → dynamic {
-    return new self::Bar::•<core::String*, self::Builder::X*>(4);
+    return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -80,7 +88,7 @@
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    let dynamic #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -95,7 +103,7 @@
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -158,7 +166,11 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Bar::•<core::String*, core::double*>(4).{self::FooBase::x}{core::int*});
+  core::print(invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^".{self::FooBase::x}{core::int*});
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
index 9a9214d..611e0cc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
@@ -15,7 +15,11 @@
   static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
-    let dynamic #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -30,7 +34,7 @@
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
   static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    let dynamic #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
+    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -76,7 +80,7 @@
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    let dynamic #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -91,7 +95,7 @@
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
index e22b2b0..0f768e15 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
@@ -15,7 +15,11 @@
   static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
-    let <T extends core::Object* = dynamic>(core::int*) →* self::Foo<T*>* #redirecting_factory = self::Foo::• in let self::FooBase::•::Tf* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -30,7 +34,7 @@
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
   static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    let Never #redirecting_factory = self::Bar::• in let core::String* #typeArg0 = null in let self::Foo::•::T* #typeArg1 = null in invalid-expression;
+    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -64,7 +68,11 @@
     : super core::Object::•()
     ;
   method method() → dynamic {
-    return new self::Bar::•<core::String*, self::Builder::X*>(4);
+    return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -80,7 +88,7 @@
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    let <Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() →* self::SimpleCaseImpl<Ai*, Bi*>* #redirecting_factory = self::SimpleCaseImpl::• in let self::SimpleCase::•::A* #typeArg0 = null in let self::SimpleCase::•::B* #typeArg1 = null in invalid-expression;
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -95,7 +103,7 @@
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
   static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    let Never #redirecting_factory = self::SimpleCaseImpl2::• in let self::SimpleCaseImpl::•::Ai* #typeArg0 = null in let self::SimpleCaseImpl::•::Bi* #typeArg1 = null in invalid-expression;
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -158,7 +166,11 @@
     ;
 }
 static method main() → dynamic {
-  core::print(new self::Bar::•<core::String*, core::double*>(4).{self::FooBase::x}{core::int*});
+  core::print(invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^".{self::FooBase::x}{core::int*});
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
index 88615ec..16a9cdc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
@@ -8,9 +8,9 @@
     : super core::Object::•()
     ;
   static factory first() → self::A*
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory second() → self::A*
-    let dynamic #redirecting_factory = self::A::first in invalid-expression;
+    return self::A::first();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
index 7df5d5f..3f90310 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
@@ -7,9 +7,9 @@
   constructor •() → self::A*
     ;
   static factory first() → self::A*
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory second() → self::A*
-    let dynamic #redirecting_factory = self::A::first in invalid-expression;
+    return self::A::first();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
index 35892f43..16a9cdc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
@@ -8,9 +8,9 @@
     : super core::Object::•()
     ;
   static factory first() → self::A*
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   static factory second() → self::A*
-    let () →* self::A* #redirecting_factory = self::A::first in invalid-expression;
+    return self::A::first();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
index 3841bc7..f2aaee2 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
@@ -5,7 +5,7 @@
 class _X<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    let dynamic #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
+    return new self::_Y::•<self::_X::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
index 23d11ab..aed68b9 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class _X<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    let dynamic #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
+    return new self::_Y::•<self::_X::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
index ce397b6..f2aaee2 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 class _X<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::_X::•];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    let Never #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
+    return new self::_Y::•<self::_X::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
index 1e7a7cc4..f1030db 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
@@ -17,7 +17,7 @@
     : self::A::field = field, super core::Object::•()
     ;
   static factory redirect([core::int field]) → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•(field);
 }
 static method main() → dynamic {
   self::expect(42, new self::A::•().{self::A::field}{core::int});
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
index 352e5d1..c031d22 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
@@ -8,7 +8,7 @@
   constructor •([core::int field]) → self::A
     ;
   static factory redirect([core::int field]) → self::A
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•(field);
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
index 6b1dd68..f1030db 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
     : self::A::field = field, super core::Object::•()
     ;
   static factory redirect([core::int field]) → self::A
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•(field);
 }
 static method main() → dynamic {
   self::expect(42, new self::A::•().{self::A::field}{core::int});
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
index 1ce6e05..27d959b 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
@@ -106,7 +106,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   get getter() → core::int
     return 0;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
index 83aea2e..8977ba1 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
@@ -8,7 +8,7 @@
   constructor _() → self::Class1
     ;
   static factory •() → self::Class1
-    let dynamic #redirecting_factory = self::Class1::_ in invalid-expression;
+    return new self::Class1::_();
   get getter() → core::int
     ;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
index 5da2827..9cea1c8 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
@@ -9,7 +9,7 @@
     ;
   @#C1
   static factory •(@#C2 @#C3 dynamic p) → self::Foo*
-    let dynamic #redirecting_factory = self::Foo::named in invalid-expression;
+    return new self::Foo::named(p);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
index a83d25d..f807177 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
@@ -8,7 +8,7 @@
     ;
   @self::forFactoryItself
   static factory •(dynamic p) → self::Foo*
-    let dynamic #redirecting_factory = self::Foo::named in invalid-expression;
+    return new self::Foo::named(p);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
index f7a4f91..9cea1c8 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     ;
   @#C1
   static factory •(@#C2 @#C3 dynamic p) → self::Foo*
-    let Never #redirecting_factory = self::Foo::named in invalid-expression;
+    return new self::Foo::named(p);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
index de93fd8..ca460af 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory redir() → self::A*
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
index 43d5697..8549d41 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   constructor •() → self::A*
     ;
   static factory redir() → self::A*
-    let dynamic #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
index e4b7dde..ca460af 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory redir() → self::A*
-    let Never #redirecting_factory = self::A::• in invalid-expression;
+    return new self::A::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
index 05a7185..b3ec99a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   static factory redir() → self::A*
-    let dynamic #redirecting_factory = self::B::• in let self::Y* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::Y*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
index 3cc1659..fedbec2 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
@@ -25,7 +25,7 @@
   constructor •() → self::A*
     ;
   static factory redir() → self::A*
-    let dynamic #redirecting_factory = self::B::• in let self::Y* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::Y*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
index 5fac4ba..b3ec99a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   static factory redir() → self::A*
-    let Never #redirecting_factory = self::B::• in let self::Y* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::Y*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
index 19f5ced..d5fafac 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
index edba967..3bf6457 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     ;
   static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
index aab753d..d5fafac 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let Never #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
index 521ea4e..6b9f76b 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
index 2551eab..522c0dc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
@@ -25,7 +25,7 @@
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     ;
   static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
index a07765d..6b9f76b 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
@@ -28,7 +28,7 @@
     : super core::Object::•()
     ;
   static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    let Never #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
index e9d6519..45971e6 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::num* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::num*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,7 +29,7 @@
     : super self::A::empty()
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::String* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
index abc8779..97f2aa7 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
@@ -9,7 +9,7 @@
   constructor empty() → self::A<self::A::T*>*
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::num* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::num*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -26,7 +26,7 @@
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::String* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
index 44022ca..45971e6 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let <U extends core::Object* = dynamic, W extends core::Object* = dynamic>() →* self::B<U*, W*>* #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::num* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::num*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,7 +29,7 @@
     : super self::A::empty()
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let Never #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::String* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
index 8f23e49..21aa750 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::List<self::A::•::T*>* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,7 +29,7 @@
     : super self::A::empty()
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::Map<self::B::•::U*, self::B::•::W*>* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
index 9e95322..fc699bb 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
@@ -9,7 +9,7 @@
   constructor empty() → self::A<self::A::T*>*
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::List<self::A::•::T*>* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -26,7 +26,7 @@
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::Map<self::B::•::U*, self::B::•::W*>* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
index 7d52b3b..21aa750 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    let <U extends core::Object* = dynamic, W extends core::Object* = dynamic>() →* self::B<U*, W*>* #redirecting_factory = self::B::• in let self::A::•::T* #typeArg0 = null in let core::List<self::A::•::T*>* #typeArg1 = null in invalid-expression;
+    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,7 +29,7 @@
     : super self::A::empty()
     ;
   static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    let Never #redirecting_factory = self::C::• in let self::B::•::U* #typeArg0 = null in let self::B::•::W* #typeArg1 = null in let core::Map<self::B::•::U*, self::B::•::W*>* #typeArg2 = null in invalid-expression;
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
 }
 class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
   constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
index ed8ef82..e858e7d 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::A*
-    let dynamic #redirecting_factory = self::B::• in let core::String* #typeArg0 = null in invalid-expression;
+    return new self::B::•<core::String*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
index ca134d1..0d1b358 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::A*
-    let dynamic #redirecting_factory = self::B::• in let core::String* #typeArg0 = null in invalid-expression;
+    return new self::B::•<core::String*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
index c1c3aa5..e858e7d 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static factory •() → self::A*
-    let Never #redirecting_factory = self::B::• in let core::String* #typeArg0 = null in invalid-expression;
+    return new self::B::•<core::String*>();
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
index cde35c2..39507e3 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
@@ -14,7 +14,7 @@
   abstract class XSet extends dart.core::Object {
     static final field dynamic _redirecting# = <dynamic>[lib1::XSet::identity];
     static factory identity() → lib1::XSet*
-      let dynamic #redirecting_factory = lib2::XLinkedHashSet::identity in invalid-expression;
+      return lib2::XLinkedHashSet::identity();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -35,7 +35,7 @@
   class XLinkedHashSet extends dart.core::Object implements lib1::XSet {
     static final field dynamic _redirecting# = <dynamic>[lib2::XLinkedHashSet::identity];
     static factory identity() → lib2::XLinkedHashSet*
-      let dynamic #redirecting_factory = lib3::XIdentityHashSet::• in invalid-expression;
+      return new lib3::XIdentityHashSet::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
index 3b0a7e5..71134e0 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
@@ -14,7 +14,7 @@
       : super dart.core::Object::•()
       ;
     static factory e4() → lib::C*
-      let dynamic #redirecting_factory = lib::C::• in invalid-expression;
+      return new lib::C::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
index bec03e7..9a40608 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
@@ -14,7 +14,7 @@
       : super dart.core::Object::•()
       ;
     static factory e4() → lib::C*
-      let dynamic #redirecting_factory = lib::C::• in invalid-expression;
+      return new lib::C::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
index 7d948ed..e334a8f 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
@@ -50,7 +50,7 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
-      let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
@@ -60,7 +60,7 @@
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return #C11;
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      let dynamic #redirecting_factory = foo::Baz::__ in invalid-expression;
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
index b101e36..c1f530e 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
@@ -50,7 +50,7 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
-      let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
@@ -60,7 +60,7 @@
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return #C11;
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      let dynamic #redirecting_factory = foo::Baz::__ in invalid-expression;
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
index 7d948ed..e334a8f 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
@@ -50,7 +50,7 @@
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
-      let dynamic #redirecting_factory = foo::Bar::_ in invalid-expression;
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
     static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
@@ -60,7 +60,7 @@
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return #C11;
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      let dynamic #redirecting_factory = foo::Baz::__ in invalid-expression;
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
index d9b1730..008ff7a 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
@@ -7,7 +7,7 @@
       : super dart.core::Object::•()
       ;
     static factory •(dart.core::String* value) → foo::Key*
-      let dynamic #redirecting_factory = foo::ValueKey::• in invalid-expression;
+      return new foo::ValueKey::•(value);
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
index 5157f4f..02964ab 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
@@ -6,7 +6,7 @@
   class Foo extends dart.core::Object {
     static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
     static factory •() → lib1::Foo*
-      let dynamic #redirecting_factory = lib2::Bar::• in invalid-expression;
+      return new lib2::Bar::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
index e289c2a..14d998a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
@@ -6,7 +6,7 @@
   class Foo extends dart.core::Object {
     static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
     static factory •() → lib1::Foo*
-      let dynamic #redirecting_factory = lib2::Bar::• in invalid-expression;
+      return new lib2::Bar::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
index 47fdc2b..8cde08e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
@@ -7,7 +7,7 @@
       : super dart.core::Object::•()
       ;
     static factory bar() → main::Foo*
-      let dynamic #redirecting_factory = main::Baz::• in invalid-expression;
+      return new main::Baz::•();
     method bar() → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
index 47fdc2b..8cde08e 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
@@ -7,7 +7,7 @@
       : super dart.core::Object::•()
       ;
     static factory bar() → main::Foo*
-      let dynamic #redirecting_factory = main::Baz::• in invalid-expression;
+      return new main::Baz::•();
     method bar() → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
index d10efba..e347a7d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return new self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
index 024beff..1056c97 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return new self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
index 39e8848..e347a7d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let Never #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return new self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
index ac3f37a..2f9257b 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
index 9f89adf..6eaaeb2 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
index 9bae319..2f9257b 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
   abstract get t() → self::C::T*;
   abstract set t(generic-covariant-impl self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
-    let <T extends core::Object* = dynamic>(T*) →* self::CImpl<T*>* #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+    return self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
index c6656a8..26a075c 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
@@ -136,15 +136,15 @@
     : super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::A
     return new self::A::constructor3();
   static factory factory9({core::int i = #C1}) → self::A
@@ -197,15 +197,15 @@
     : self::C::i = i, super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::C
     return new self::C::constructor3();
   static factory factory9({core::int i = #C1}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
index f3893aa..b672730 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
@@ -136,15 +136,15 @@
     : super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::A
-    let Never #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::A
-    let Never #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::A
     return new self::A::constructor3();
   static factory factory9({core::int i = #C1}) → self::A
@@ -197,15 +197,15 @@
     : self::C::i = i, super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::C
-    let Never #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::C
-    let Never #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::C
     return new self::C::constructor3();
   static factory factory9({core::int i = #C1}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
index c6656a8..26a075c 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
@@ -136,15 +136,15 @@
     : super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::A
     return new self::A::constructor3();
   static factory factory9({core::int i = #C1}) → self::A
@@ -197,15 +197,15 @@
     : self::C::i = i, super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::C
     return new self::C::constructor3();
   static factory factory9({core::int i = #C1}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
index b2b3256..0040b41 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
@@ -107,15 +107,15 @@
   external constructor constructor9({core::int i}) → self::A
     ;
   static factory factory3([core::int i]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i]) → self::A
-    let dynamic #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i}) → self::A
-    let dynamic #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i]) → self::A
     ;
   static factory factory9({core::int i}) → self::A
@@ -161,15 +161,15 @@
   constructor constructor7({required core::int i}) → self::C
     ;
   static factory factory3([core::int i]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i]) → self::C
-    let dynamic #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i}) → self::C
-    let dynamic #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i]) → self::C
     ;
   static factory factory9({core::int i}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
index a487c1a..94f4fab 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
@@ -136,15 +136,15 @@
     : super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::A
-    let Never #redirecting_factory = self::A::constructor3 in invalid-expression;
+    return new self::A::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor4 in invalid-expression;
+    return new self::A::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::A
-    let Never #redirecting_factory = self::A::constructor5 in invalid-expression;
+    return new self::A::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor6 in invalid-expression;
+    return new self::A::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::A
-    let Never #redirecting_factory = self::A::constructor7 in invalid-expression;
+    return new self::A::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::A
     return new self::A::constructor3();
   static factory factory9({core::int i = #C1}) → self::A
@@ -197,15 +197,15 @@
     : self::C::i = i, super core::Object::•()
     ;
   static factory factory3([core::int i = #C1]) → self::C
-    let Never #redirecting_factory = self::C::constructor3 in invalid-expression;
+    return new self::C::constructor3(i);
   static factory factory4({core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor4 in invalid-expression;
+    return new self::C::constructor4(i: i);
   static factory factory5([core::int? i = #C1]) → self::C
-    let Never #redirecting_factory = self::C::constructor5 in invalid-expression;
+    return new self::C::constructor5(i);
   static factory factory6({core::int? i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor6 in invalid-expression;
+    return new self::C::constructor6(i: i);
   static factory factory7({required core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::constructor7 in invalid-expression;
+    return new self::C::constructor7(i: i);
   static factory factory8([core::int i = #C1]) → self::C
     return new self::C::constructor3();
   static factory factory9({core::int i = #C1}) → self::C
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
index ed2262c..0c168d7 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
@@ -13,7 +13,7 @@
   field Never n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
index 6cf3739..0c168d7 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
   field Never n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
index ed2262c..0c168d7 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
@@ -13,7 +13,7 @@
   field Never n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
index 08fff2c..18f72ef 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   field Never n;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
index 6cf3739..0c168d7 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   field Never n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(Never n) → self::C
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   field Never n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
index 9f4202d..bd950c6 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
@@ -14,7 +14,7 @@
   final field dynamic n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
index 6347dde..bd950c6 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
@@ -14,7 +14,7 @@
   final field dynamic n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
index 9f4202d..bd950c6 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
@@ -14,7 +14,7 @@
   final field dynamic n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
index afe3abd..53f7e37 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   final field dynamic n;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
index 6347dde..bd950c6 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
   final field dynamic n = null;
   static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
   static factory •(dynamic n) → self::C
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•(n);
 }
 class D extends core::Object implements self::C {
   final field dynamic n;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
index 19e109d..a02c4ef 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
@@ -228,7 +228,7 @@
     self::D<core::String>? b;
   }
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C {
     self::A<self::A<Null>>? b;
     self::D<core::String>? c;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
index 48a5a0a..a02c4ef 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
@@ -228,7 +228,7 @@
     self::D<core::String>? b;
   }
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let Never #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C {
     self::A<self::A<Null>>? b;
     self::D<core::String>? c;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
index 19e109d..a02c4ef 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
@@ -228,7 +228,7 @@
     self::D<core::String>? b;
   }
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C {
     self::A<self::A<Null>>? b;
     self::D<core::String>? c;
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
index aef5c33..39eaec6 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
@@ -125,7 +125,7 @@
   constructor internal(dynamic _) → self::C
     ;
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let dynamic #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
index 48a5a0a..a02c4ef 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
@@ -228,7 +228,7 @@
     self::D<core::String>? b;
   }
   static factory redirect(self::A<self::A<Null>>? a) → self::C
-    let Never #redirecting_factory = self::C::internal in invalid-expression;
+    return new self::C::internal(a);
   static factory fact(self::A<self::A<Null>>? a) → self::C {
     self::A<self::A<Null>>? b;
     self::D<core::String>? c;
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
index d62d171..fd4ab1f 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
@@ -24,7 +24,7 @@
     return new self::C::gen();
   }
   static factory redirect({core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
index 25804c8..fd4ab1f 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
     return new self::C::gen();
   }
   static factory redirect({core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
index d62d171..fd4ab1f 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
@@ -24,7 +24,7 @@
     return new self::C::gen();
   }
   static factory redirect({core::int i = #C1}) → self::C
-    let dynamic #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
index ac7b8e7..bff1a1e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
@@ -22,7 +22,7 @@
   static factory fact({core::int i}) → self::C
     ;
   static factory redirect({core::int i}) → self::C
-    let dynamic #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
index 25804c8..fd4ab1f 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     return new self::C::gen();
   }
   static factory redirect({core::int i = #C1}) → self::C
-    let Never #redirecting_factory = self::C::gen in invalid-expression;
+    return new self::C::gen(i: i);
 }
 class D extends core::Object {
   synthetic constructor •() → self::D
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
index 152826c..e038284 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -15,7 +15,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
index 3ebf619..e038284 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let Never #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -15,7 +15,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let Never #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
index 152826c..e038284 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -15,7 +15,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
index 1b9a3e0..a50e08b 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let dynamic #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -14,7 +14,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let dynamic #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
index 3ebf619..e038284 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
-    let Never #redirecting_factory = self::_A::• in let self::A::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_A::•<self::A::•::T%>(value);
 }
 class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
   constructor •(self::_A::T% value) → self::_A<self::_A::T%>
@@ -15,7 +15,7 @@
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
-    let Never #redirecting_factory = self::_B::• in let self::B::•::T% #typeArg0 = null in invalid-expression;
+    return new self::_B::•<self::B::•::T%>(value);
 }
 class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
   constructor •(core::int value) → self::_B<self::_B::T%>
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
index 661f38d..2640926 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
+Try using a different type as argument.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -77,6 +80,9 @@
     : super core::Object::•()
     ;
   static factory bar(core::num? x) → self::D
-    let dynamic #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
index 1ac0b20..2640926 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let Never #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
+Try using a different type as argument.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -77,6 +80,9 @@
     : super core::Object::•()
     ;
   static factory bar(core::num? x) → self::D
-    let Never #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
index 661f38d..2640926 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
+Try using a different type as argument.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -77,6 +80,9 @@
     : super core::Object::•()
     ;
   static factory bar(core::num? x) → self::D
-    let dynamic #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
index c5c7f90..1f2f60e 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let dynamic #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
+Try using a different type as argument.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -75,7 +78,10 @@
   constructor foo(core::num x) → self::D
     ;
   static factory bar(core::num? x) → self::D
-    let dynamic #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
index 1ac0b20..2640926 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
@@ -64,7 +64,10 @@
 class C1 extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
   static factory •() → self::C1
-    let Never #redirecting_factory = self::C2::• in let core::int? #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
+Try using a different type as argument.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
 }
 class C2<X extends core::int> extends core::Object implements self::C1 {
   synthetic constructor •() → self::C2<self::C2::X>
@@ -77,6 +80,9 @@
     : super core::Object::•()
     ;
   static factory bar(core::num? x) → self::D
-    let Never #redirecting_factory = self::D::foo in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
index 03c441d..9f5ab6a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
@@ -8,6 +8,6 @@
     : super core::Object::•()
     ;
   static factory redirect() → self::Class
-    let dynamic #redirecting_factory = self::Class::• in invalid-expression;
+    return new self::Class::•();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
index 8527d75..2dad0b1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   constructor •() → self::Class
     ;
   static factory redirect() → self::Class
-    let dynamic #redirecting_factory = self::Class::• in invalid-expression;
+    return new self::Class::•();
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
index f2556e6..9f5ab6a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
@@ -8,6 +8,6 @@
     : super core::Object::•()
     ;
   static factory redirect() → self::Class
-    let Never #redirecting_factory = self::Class::• in invalid-expression;
+    return new self::Class::•();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
index e1d738d..34cee4f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
@@ -39,9 +39,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object?>() → opt::Class1<opt::Class1::redirect::T%>
-    let dynamic #redirecting_factory = opt::Class1::_ in let opt::Class1::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class1::_<opt::Class1::redirect::T%>();
   static factory constRedirect<T extends core::Object?>() → opt::Class1<opt::Class1::constRedirect::T%>
-    let dynamic #redirecting_factory = opt::Class1::_ in let opt::Class1::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class1::_<opt::Class1::constRedirect::T%>();
   static factory fact<T extends core::Object?>() → opt::Class1<opt::Class1::fact::T%>
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
@@ -51,9 +51,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object>() → opt::Class2<opt::Class2::redirect::T>
-    let dynamic #redirecting_factory = opt::Class2::_ in let opt::Class2::redirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class2::_<opt::Class2::redirect::T>();
   static factory constRedirect<T extends core::Object>() → opt::Class2<opt::Class2::constRedirect::T>
-    let dynamic #redirecting_factory = opt::Class2::_ in let opt::Class2::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class2::_<opt::Class2::constRedirect::T>();
   static factory fact<T extends core::Object>() → opt::Class2<opt::Class2::fact::T>
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
@@ -63,9 +63,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::String>() → opt::Class3<opt::Class3::redirect::T>
-    let dynamic #redirecting_factory = opt::Class3::_ in let opt::Class3::redirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class3::_<opt::Class3::redirect::T>();
   static factory constRedirect<T extends core::String>() → opt::Class3<opt::Class3::constRedirect::T>
-    let dynamic #redirecting_factory = opt::Class3::_ in let opt::Class3::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class3::_<opt::Class3::constRedirect::T>();
   static factory fact<T extends core::String>() → opt::Class3<opt::Class3::fact::T>
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
@@ -75,9 +75,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::redirect::T%>
-    let dynamic #redirecting_factory = opt::Class4::_ in let opt::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class4::_<opt::Class4::redirect::T%>();
   static factory constRedirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::constRedirect::T%>
-    let dynamic #redirecting_factory = opt::Class4::_ in let opt::Class4::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class4::_<opt::Class4::constRedirect::T%>();
   static factory fact<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::fact::T%>
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
@@ -87,9 +87,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends dynamic>() → opt::Class5<opt::Class5::redirect::T%>
-    let dynamic #redirecting_factory = opt::Class5::_ in let opt::Class5::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class5::_<opt::Class5::redirect::T%>();
   static factory constRedirect<T extends dynamic>() → opt::Class5<opt::Class5::constRedirect::T%>
-    let dynamic #redirecting_factory = opt::Class5::_ in let opt::Class5::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class5::_<opt::Class5::constRedirect::T%>();
   static factory fact<T extends dynamic>() → opt::Class5<opt::Class5::fact::T%>
     return new opt::Class5::_<opt::Class5::fact::T%>();
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
index f70672f..958ab4c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
@@ -16,9 +16,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object?>() → self2::Class1<self2::Class1::redirect::T%>
-    let dynamic #redirecting_factory = self2::Class1::_ in let self2::Class1::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class1::_<self2::Class1::redirect::T%>();
   static factory constRedirect<T extends core::Object?>() → self2::Class1<self2::Class1::constRedirect::T%>
-    let dynamic #redirecting_factory = self2::Class1::_ in let self2::Class1::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class1::_<self2::Class1::constRedirect::T%>();
   static factory fact<T extends core::Object?>() → self2::Class1<self2::Class1::fact::T%>
     ;
 }
@@ -28,9 +28,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object>() → self2::Class2<self2::Class2::redirect::T>
-    let dynamic #redirecting_factory = self2::Class2::_ in let self2::Class2::redirect::T #typeArg0 = null in invalid-expression;
+    return new self2::Class2::_<self2::Class2::redirect::T>();
   static factory constRedirect<T extends core::Object>() → self2::Class2<self2::Class2::constRedirect::T>
-    let dynamic #redirecting_factory = self2::Class2::_ in let self2::Class2::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new self2::Class2::_<self2::Class2::constRedirect::T>();
   static factory fact<T extends core::Object>() → self2::Class2<self2::Class2::fact::T>
     ;
 }
@@ -40,9 +40,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::String>() → self2::Class3<self2::Class3::redirect::T>
-    let dynamic #redirecting_factory = self2::Class3::_ in let self2::Class3::redirect::T #typeArg0 = null in invalid-expression;
+    return new self2::Class3::_<self2::Class3::redirect::T>();
   static factory constRedirect<T extends core::String>() → self2::Class3<self2::Class3::constRedirect::T>
-    let dynamic #redirecting_factory = self2::Class3::_ in let self2::Class3::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new self2::Class3::_<self2::Class3::constRedirect::T>();
   static factory fact<T extends core::String>() → self2::Class3<self2::Class3::fact::T>
     ;
 }
@@ -52,9 +52,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::redirect::T%>
-    let dynamic #redirecting_factory = self2::Class4::_ in let self2::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class4::_<self2::Class4::redirect::T%>();
   static factory constRedirect<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::constRedirect::T%>
-    let dynamic #redirecting_factory = self2::Class4::_ in let self2::Class4::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class4::_<self2::Class4::constRedirect::T%>();
   static factory fact<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::fact::T%>
     ;
 }
@@ -64,9 +64,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends dynamic>() → self2::Class5<self2::Class5::redirect::T%>
-    let dynamic #redirecting_factory = self2::Class5::_ in let self2::Class5::redirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class5::_<self2::Class5::redirect::T%>();
   static factory constRedirect<T extends dynamic>() → self2::Class5<self2::Class5::constRedirect::T%>
-    let dynamic #redirecting_factory = self2::Class5::_ in let self2::Class5::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new self2::Class5::_<self2::Class5::constRedirect::T%>();
   static factory fact<T extends dynamic>() → self2::Class5<self2::Class5::fact::T%>
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
index e67696e..34cee4f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
@@ -39,9 +39,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object?>() → opt::Class1<opt::Class1::redirect::T%>
-    let Never #redirecting_factory = opt::Class1::_ in let opt::Class1::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class1::_<opt::Class1::redirect::T%>();
   static factory constRedirect<T extends core::Object?>() → opt::Class1<opt::Class1::constRedirect::T%>
-    let Never #redirecting_factory = opt::Class1::_ in let opt::Class1::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class1::_<opt::Class1::constRedirect::T%>();
   static factory fact<T extends core::Object?>() → opt::Class1<opt::Class1::fact::T%>
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
@@ -51,9 +51,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object>() → opt::Class2<opt::Class2::redirect::T>
-    let Never #redirecting_factory = opt::Class2::_ in let opt::Class2::redirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class2::_<opt::Class2::redirect::T>();
   static factory constRedirect<T extends core::Object>() → opt::Class2<opt::Class2::constRedirect::T>
-    let Never #redirecting_factory = opt::Class2::_ in let opt::Class2::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class2::_<opt::Class2::constRedirect::T>();
   static factory fact<T extends core::Object>() → opt::Class2<opt::Class2::fact::T>
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
@@ -63,9 +63,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::String>() → opt::Class3<opt::Class3::redirect::T>
-    let Never #redirecting_factory = opt::Class3::_ in let opt::Class3::redirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class3::_<opt::Class3::redirect::T>();
   static factory constRedirect<T extends core::String>() → opt::Class3<opt::Class3::constRedirect::T>
-    let Never #redirecting_factory = opt::Class3::_ in let opt::Class3::constRedirect::T #typeArg0 = null in invalid-expression;
+    return new opt::Class3::_<opt::Class3::constRedirect::T>();
   static factory fact<T extends core::String>() → opt::Class3<opt::Class3::fact::T>
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
@@ -75,9 +75,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::redirect::T%>
-    let Never #redirecting_factory = opt::Class4::_ in let opt::Class4::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class4::_<opt::Class4::redirect::T%>();
   static factory constRedirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::constRedirect::T%>
-    let Never #redirecting_factory = opt::Class4::_ in let opt::Class4::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class4::_<opt::Class4::constRedirect::T%>();
   static factory fact<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::fact::T%>
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
@@ -87,9 +87,9 @@
     : super core::Object::•()
     ;
   static factory redirect<T extends dynamic>() → opt::Class5<opt::Class5::redirect::T%>
-    let Never #redirecting_factory = opt::Class5::_ in let opt::Class5::redirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class5::_<opt::Class5::redirect::T%>();
   static factory constRedirect<T extends dynamic>() → opt::Class5<opt::Class5::constRedirect::T%>
-    let Never #redirecting_factory = opt::Class5::_ in let opt::Class5::constRedirect::T% #typeArg0 = null in invalid-expression;
+    return new opt::Class5::_<opt::Class5::constRedirect::T%>();
   static factory fact<T extends dynamic>() → opt::Class5<opt::Class5::fact::T%>
     return new opt::Class5::_<opt::Class5::fact::T%>();
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
index 0c9e63d..2cb6f54 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
@@ -55,7 +55,7 @@
     : super opt::P::_(token)
     ;
   static factory •<T extends core::Object>(core::Type type) → opt::CP<opt::CP::•::T>
-    let dynamic #redirecting_factory = opt::CP::_ in let opt::CP::•::T #typeArg0 = null in invalid-expression;
+    return new opt::CP::_<opt::CP::•::T>(type);
 }
 class Token<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
   const constructor •() → opt::Token<opt::Token::T>
@@ -68,7 +68,7 @@
     : super opt::P::_(token)
     ;
   static factory forToken<T extends core::Object>(opt::Token<opt::VP::forToken::T> token, opt::VP::forToken::T useValue) → opt::VP<opt::VP::forToken::T>
-    let dynamic #redirecting_factory = opt::VP::_ in let opt::VP::forToken::T #typeArg0 = null in invalid-expression;
+    return new opt::VP::_<opt::VP::forToken::T>(token, useValue);
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
index 06c295f..ee92a0d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
@@ -55,7 +55,7 @@
     : super opt::P::_(token)
     ;
   static factory •<T extends core::Object>(core::Type type) → opt::CP<opt::CP::•::T>
-    let dynamic #redirecting_factory = opt::CP::_ in let opt::CP::•::T #typeArg0 = null in invalid-expression;
+    return new opt::CP::_<opt::CP::•::T>(type);
 }
 class Token<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
   const constructor •() → opt::Token<opt::Token::T>
@@ -68,7 +68,7 @@
     : super opt::P::_(token)
     ;
   static factory forToken<T extends core::Object>(opt::Token<opt::VP::forToken::T> token, opt::VP::forToken::T useValue) → opt::VP<opt::VP::forToken::T>
-    let dynamic #redirecting_factory = opt::VP::_ in let opt::VP::forToken::T #typeArg0 = null in invalid-expression;
+    return new opt::VP::_<opt::VP::forToken::T>(token, useValue);
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
@@ -82,4 +82,4 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///main.dart:15:14 -> ListConstant(const <P<Object*>*>[const CP<Object*>{P.token: Class*}, const VP<Object*>{P.token: const XToken{}}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:20:11 -> InstanceConstant(const M{M.list: const <P<Object*>*>[const CP<Object*>{P.token: Class*}, const VP<Object*>{P.token: const XToken{}}]})
 Evaluated: ListLiteral @ org-dartlang-testcase:///opt_in_lib.dart:36:24 -> ListConstant(const <P<Object*>*>[])
-Extra constant evaluation: evaluated: 17, effectively constant: 3
+Extra constant evaluation: evaluated: 16, effectively constant: 3
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
index 7b1f0d6..2cb6f54 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
@@ -55,7 +55,7 @@
     : super opt::P::_(token)
     ;
   static factory •<T extends core::Object>(core::Type type) → opt::CP<opt::CP::•::T>
-    let Never #redirecting_factory = opt::CP::_ in let opt::CP::•::T #typeArg0 = null in invalid-expression;
+    return new opt::CP::_<opt::CP::•::T>(type);
 }
 class Token<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
   const constructor •() → opt::Token<opt::Token::T>
@@ -68,7 +68,7 @@
     : super opt::P::_(token)
     ;
   static factory forToken<T extends core::Object>(opt::Token<opt::VP::forToken::T> token, opt::VP::forToken::T useValue) → opt::VP<opt::VP::forToken::T>
-    let Never #redirecting_factory = opt::VP::_ in let opt::VP::forToken::T #typeArg0 = null in invalid-expression;
+    return new opt::VP::_<opt::VP::forToken::T>(token, useValue);
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
index 435aedb..3df2a9b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let dynamic #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
index b58ffcf..3df2a9b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let Never #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
index 435aedb..3df2a9b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let dynamic #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
index 65b2862..978eeea 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let dynamic #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let dynamic #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
index b58ffcf..3df2a9b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
@@ -6,9 +6,9 @@
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
   static factory •() → self::A
-    let Never #redirecting_factory = self::B::• in invalid-expression;
+    return new self::B::•();
   static factory named() → self::A
-    let Never #redirecting_factory = self::B::named in invalid-expression;
+    return new self::B::named();
 }
 class B extends core::Object implements self::A {
   constructor •() → self::B
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
index 88129af..45b7e1ee7 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
@@ -75,7 +75,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     return new self::C::foo<self::C::•::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let dynamic #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
@@ -85,7 +85,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     return new self::D::•<self::D::foo::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let dynamic #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic {
   self::C::•<(self::C<Never>) → self::C<core::Object?>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
index eab7fa2..45b7e1ee7 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
@@ -75,7 +75,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     return new self::C::foo<self::C::•::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let <X extends core::Object? = dynamic>() → self::C<X%> #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
@@ -85,7 +85,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     return new self::D::•<self::D::foo::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let Never #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic {
   self::C::•<(self::C<Never>) → self::C<core::Object?>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
index 88129af..45b7e1ee7 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
@@ -75,7 +75,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     return new self::C::foo<self::C::•::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let dynamic #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
@@ -85,7 +85,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     return new self::D::•<self::D::foo::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let dynamic #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic {
   self::C::•<(self::C<Never>) → self::C<core::Object?>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
index 5bcbed2..b89222a 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     ;
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let dynamic #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
@@ -21,7 +21,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     ;
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let dynamic #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
index eab7fa2..45b7e1ee7 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
@@ -75,7 +75,7 @@
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
     return new self::C::foo<self::C::•::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
-    let <X extends core::Object? = dynamic>() → self::C<X%> #redirecting_factory = self::C::• in let self::C::bar::X% #typeArg0 = null in invalid-expression;
+    return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
@@ -85,7 +85,7 @@
   static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
     return new self::D::•<self::D::foo::X%>();
   static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
-    let Never #redirecting_factory = self::D::• in let self::D::bar::X% #typeArg0 = null in invalid-expression;
+    return new self::D::•<self::D::bar::X%>();
 }
 static method test() → dynamic {
   self::C::•<(self::C<Never>) → self::C<core::Object?>>();
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
index 6c4e211..4ca626f 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
@@ -77,7 +77,9 @@
 class D extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
-    let dynamic #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -93,7 +95,7 @@
   new self::A::•();
   new self::B::•();
   new self::C::•();
-  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:19:7: Error: Method not found: 'Missing'.
-  new D();
-      ^";
+  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
 }
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
index 11d42be..5a0190f 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
@@ -75,7 +75,9 @@
 class D extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
-    let dynamic #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
index 3915deb..4ca626f 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
@@ -77,7 +77,9 @@
 class D extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::D::•];
   static factory •() → self::D*
-    let core::String* #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -93,7 +95,7 @@
   new self::A::•();
   new self::B::•();
   new self::C::•();
-  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:19:7: Error: Method not found: 'Missing'.
-  new D();
-      ^";
+  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
 }
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
index e0f9879..900f8a7 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
@@ -78,11 +78,18 @@
     : super core::Object::•()
     ;
   static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    let dynamic #redirecting_factory = self::B::a in let self::A::a::T* #typeArg0 = null in invalid-expression;
+    return self::B::a<self::A::a::T*>();
   static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
-    let dynamic #redirecting_factory = self::B::a in let self::C1* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
-    let dynamic #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -100,9 +107,14 @@
     : super self::A::internal()
     ;
   static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::a::S* #typeArg0 = null in invalid-expression;
+    return new self::C::•<self::B::a::S*>();
   static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
-    let dynamic #redirecting_factory = self::C::• in let self::C2* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
 }
 class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
   constructor •() → self::C<self::C::U*>*
@@ -111,10 +123,20 @@
 }
 static method main() → dynamic {
   new self::C::•<self::C3*>();
-  new self::C::•<self::C1*>();
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   new self::C::•<self::C3*>();
-  new self::C::•<self::C2*>();
-  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:35:7: Error: Method not found: 'Missing'.
-  new A<C3>.c();
-      ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
 }
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
index 7dad5eb..12ffeef 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
@@ -74,11 +74,18 @@
   constructor internal() → self::A<self::A::T*>*
     ;
   static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    let dynamic #redirecting_factory = self::B::a in let self::A::a::T* #typeArg0 = null in invalid-expression;
+    return self::B::a<self::A::a::T*>();
   static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
-    let dynamic #redirecting_factory = self::B::a in let self::C1* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
-    let dynamic #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -95,9 +102,14 @@
   constructor internal() → self::B<self::B::S*>*
     ;
   static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    let dynamic #redirecting_factory = self::C::• in let self::B::a::S* #typeArg0 = null in invalid-expression;
+    return new self::C::•<self::B::a::S*>();
   static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
-    let dynamic #redirecting_factory = self::C::• in let self::C2* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
 }
 class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
   constructor •() → self::C<self::C::U*>*
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
index 93c8bd0..900f8a7 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
@@ -78,11 +78,18 @@
     : super core::Object::•()
     ;
   static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
-    let <S extends core::Object* = dynamic>() →* self::B<S*>* #redirecting_factory = self::B::a in let self::A::a::T* #typeArg0 = null in invalid-expression;
+    return self::B::a<self::A::a::T*>();
   static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
-    let <S extends core::Object* = dynamic>() →* self::B<S*>* #redirecting_factory = self::B::a in let self::C1* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
-    let core::String* #redirecting_factory = "Missing" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -100,9 +107,14 @@
     : super self::A::internal()
     ;
   static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
-    let Never #redirecting_factory = self::C::• in let self::B::a::S* #typeArg0 = null in invalid-expression;
+    return new self::C::•<self::B::a::S*>();
   static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
-    let Never #redirecting_factory = self::C::• in let self::C2* #typeArg0 = null in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
 }
 class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
   constructor •() → self::C<self::C::U*>*
@@ -111,10 +123,20 @@
 }
 static method main() → dynamic {
   new self::C::•<self::C3*>();
-  new self::C::•<self::C1*>();
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
   new self::C::•<self::C3*>();
-  new self::C::•<self::C2*>();
-  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:35:7: Error: Method not found: 'Missing'.
-  new A<C3>.c();
-      ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
index 3d0aa6b..1ba20e7 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
@@ -74,7 +74,7 @@
   C.missingFactoryKeyword() = C.constant;
                               ^";
   static factory good() → self::C*
-    let dynamic #redirecting_factory = self::C::constant in invalid-expression;
+    return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C*
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
index f560daf..49eadbc 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
@@ -36,7 +36,7 @@
   constructor missingFactoryKeyword() → self::C*
     ;
   static factory good() → self::C*
-    let dynamic #redirecting_factory = self::C::constant in invalid-expression;
+    return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
index 0a767f0..b3609c5 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
@@ -74,7 +74,7 @@
   C.missingFactoryKeyword() = C.constant;
                               ^";
   static factory good() → self::C*
-    let Never #redirecting_factory = self::C::constant in invalid-expression;
+    return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C*
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
index 033c0fd..3f594b7 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
@@ -10,7 +10,7 @@
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
-    let dynamic #redirecting_factory = self::C::bar in invalid-expression;
+    return self::C::bar();
   method m() → core::int* {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -28,7 +28,7 @@
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   method m() → core::int* {
     return 1;
   }
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
index 7f34682..b498bf4 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
@@ -9,7 +9,7 @@
   constructor •() → self::A*
     ;
   static factory foo() → self::A*
-    let dynamic #redirecting_factory = self::C::bar in invalid-expression;
+    return self::C::bar();
   method m() → core::int*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -28,7 +28,7 @@
   constructor •() → self::C*
     ;
   static factory bar() → self::C*
-    let dynamic #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   method m() → core::int*
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
index d34604a..3f594b7 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
-    let () →* self::C* #redirecting_factory = self::C::bar in invalid-expression;
+    return self::C::bar();
   method m() → core::int* {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -28,7 +28,7 @@
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
-    let Never #redirecting_factory = self::D::• in invalid-expression;
+    return new self::D::•();
   method m() → core::int* {
     return 1;
   }
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
index c62b784..89937c2 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
@@ -35,7 +35,9 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let dynamic #redirecting_factory = "Unresolved" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
+  factory Supertype() = Unresolved;
+                        ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
index 3c59d21..e164c58 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
@@ -31,7 +31,9 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let dynamic #redirecting_factory = "Unresolved" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
+  factory Supertype() = Unresolved;
+                        ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
index a6ad0e6..89937c2 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
@@ -35,7 +35,9 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let core::String* #redirecting_factory = "Unresolved" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
+  factory Supertype() = Unresolved;
+                        ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
index c2a8e0e..27e321c 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
@@ -19,7 +19,7 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let dynamic #redirecting_factory = self::X::• in invalid-expression;
+    return new self::X::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
index 474004e..5198fda 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
@@ -15,7 +15,7 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let dynamic #redirecting_factory = self::X::• in invalid-expression;
+    return new self::X::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
index e341499..27e321c 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 class Supertype extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
   static factory •() → self::Supertype*
-    let Never #redirecting_factory = self::X::• in invalid-expression;
+    return new self::X::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
index 698e95b..6e380a7 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
@@ -22,7 +22,7 @@
     : super self::C::•()
     ;
   static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::B::foo::T*>();
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::bar];
@@ -30,7 +30,9 @@
     : super core::Object::•()
     ;
   static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
-    let dynamic #redirecting_factory = "B.foo" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -43,7 +45,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:17:7: Error: Method not found: 'B.foo'.
-  new C.bar();
-      ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
index 7f77682..b64319b 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
@@ -21,14 +21,16 @@
   constructor •() → self::B<self::B::T*>*
     ;
   static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    let dynamic #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::B::foo::T*>();
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::bar];
   constructor •() → self::C<self::C::K*>*
     ;
   static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
-    let dynamic #redirecting_factory = "B.foo" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
index 68f6e8a..6e380a7 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
     : super self::C::•()
     ;
   static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
-    let Never #redirecting_factory = self::B::• in let self::B::foo::T* #typeArg0 = null in invalid-expression;
+    return new self::B::•<self::B::foo::T*>();
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::bar];
@@ -30,7 +30,9 @@
     : super core::Object::•()
     ;
   static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
-    let core::String* #redirecting_factory = "B.foo" in invalid-expression;
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -43,7 +45,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:17:7: Error: Method not found: 'B.foo'.
-  new C.bar();
-      ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
 }
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index a74ac1b..4f9feaa 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -99,6 +99,7 @@
 general/override_check_basic: TypeCheckError # Issue #31620
 general/override_check_with_covariant_modifier: TypeCheckError # Issue #31620
 general/override_setter_with_field: TypeCheckError
+general/redirecting_factory: RuntimeError
 general/redirecting_factory_invocation_in_invalid: TypeCheckError
 general/spread_collection: RuntimeError # Should be fixed as part of implementing spread collection support
 general/type_parameter_type_named_int: RuntimeError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index d6c353b..264d1d2 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -105,6 +105,7 @@
 general/override_check_basic: TypeCheckError # Issue #31620
 general/override_check_with_covariant_modifier: TypeCheckError # Issue #31620
 general/override_setter_with_field: TypeCheckError
+general/redirecting_factory: RuntimeError
 general/redirecting_factory_invocation_in_invalid: TypeCheckError
 general/spread_collection: RuntimeError
 general/type_parameter_type_named_int: RuntimeError # Expected
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index 53ff2cd..401b4ef 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -479,7 +479,7 @@
   @override
   DartType visitInvalidExpression(InvalidExpression node) {
     // Don't type check `node.expression`.
-    return const InvalidType();
+    return const NeverType.nonNullable();
   }
 
   @override
diff --git a/pkg/meta/CHANGELOG.md b/pkg/meta/CHANGELOG.md
index 15da3e3..81fd808 100644
--- a/pkg/meta/CHANGELOG.md
+++ b/pkg/meta/CHANGELOG.md
@@ -1,3 +1,7 @@
+## master
+
+* Add `@UseResult.unless`.
+
 ## 1.7.0
 
 * Restore `TargetKindExtension` and `get displayString`.
diff --git a/pkg/vm/lib/transformations/lowering.dart b/pkg/vm/lib/transformations/lowering.dart
index d776f33..f9e8fe3 100644
--- a/pkg/vm/lib/transformations/lowering.dart
+++ b/pkg/vm/lib/transformations/lowering.dart
@@ -51,6 +51,12 @@
 
   @override
   defaultMember(Member node) {
+    if (node is Procedure && node.isRedirectingFactory) {
+      // Keep bodies of redirecting factories unchanged because
+      // front-end expects them to have a certain shape.
+      return node;
+    }
+
     _currentMember = node;
     _cachedStaticTypeContext = null;
 
diff --git a/pkg/vm_service/CHANGELOG.md b/pkg/vm_service/CHANGELOG.md
index d2a4144..3c1a964 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,12 +1,5 @@
 # Changelog
 
-## 7.2.0
-- Update to version `3.50` of the spec.
-- Added `CpuSamples` event kind, and `cpuSamples` property to `Event`.
-- Added `returnType`, `parameters`, and `typeParameters` to `InstanceRef`,
-  and `implicit` to `FunctionRef`.
-- Added `Parameter` type.
-
 ## 7.1.1
 - Update to version `3.48` of the spec.
 - Added `shows` and `hides` properties to `LibraryDependency`.
diff --git a/pkg/vm_service/pubspec.yaml b/pkg/vm_service/pubspec.yaml
index 5677862..5aad6b6 100644
--- a/pkg/vm_service/pubspec.yaml
+++ b/pkg/vm_service/pubspec.yaml
@@ -3,7 +3,7 @@
   A library to communicate with a service implementing the Dart VM
   service protocol.
 
-version: 7.2.0
+version: 7.1.1
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/vm_service
 
diff --git a/runtime/include/dart_native_api.h b/runtime/include/dart_native_api.h
index a40c522..ac183b8 100644
--- a/runtime/include/dart_native_api.h
+++ b/runtime/include/dart_native_api.h
@@ -70,12 +70,12 @@
     } as_array;
     struct {
       Dart_TypedData_Type type;
-      intptr_t length;
+      intptr_t length; /* in elements, not bytes */
       uint8_t* values;
     } as_typed_data;
     struct {
       Dart_TypedData_Type type;
-      intptr_t length;
+      intptr_t length; /* in elements, not bytes */
       uint8_t* data;
       void* peer;
       Dart_HandleFinalizer callback;
diff --git a/runtime/vm/heap/become_test.cc b/runtime/vm/heap/become_test.cc
index bddba7f..031e497b 100644
--- a/runtime/vm/heap/become_test.cc
+++ b/runtime/vm/heap/become_test.cc
@@ -73,6 +73,63 @@
   EXPECT_EQ(peer, heap->GetPeer(after_obj.ptr()));
 }
 
+ISOLATE_UNIT_TEST_CASE(BecomeForwardObjectId) {
+  Heap* heap = IsolateGroup::Current()->heap();
+
+  const Array& before_obj = Array::Handle(Array::New(0, Heap::kOld));
+  const Array& after_obj = Array::Handle(Array::New(0, Heap::kOld));
+  EXPECT(before_obj.ptr() != after_obj.ptr());
+
+  intptr_t id = 42;
+  intptr_t no_id = 0;
+  heap->SetObjectId(before_obj.ptr(), id);
+  EXPECT_EQ(id, heap->GetObjectId(before_obj.ptr()));
+  EXPECT_EQ(no_id, heap->GetObjectId(after_obj.ptr()));
+
+  const Array& before = Array::Handle(Array::New(1, Heap::kOld));
+  before.SetAt(0, before_obj);
+  const Array& after = Array::Handle(Array::New(1, Heap::kOld));
+  after.SetAt(0, after_obj);
+  Become::ElementsForwardIdentity(before, after);
+
+  EXPECT(before_obj.ptr() == after_obj.ptr());
+  EXPECT_EQ(id, heap->GetObjectId(before_obj.ptr()));
+  EXPECT_EQ(id, heap->GetObjectId(after_obj.ptr()));
+}
+
+ISOLATE_UNIT_TEST_CASE(BecomeForwardMessageId) {
+  Isolate* isolate = Isolate::Current();
+  isolate->set_forward_table_new(new WeakTable());
+  isolate->set_forward_table_old(new WeakTable());
+
+  const Array& before_obj = Array::Handle(Array::New(0, Heap::kOld));
+  const Array& after_obj = Array::Handle(Array::New(0, Heap::kOld));
+  EXPECT(before_obj.ptr() != after_obj.ptr());
+
+  intptr_t id = 42;
+  intptr_t no_id = 0;
+  isolate->forward_table_old()->SetValueExclusive(before_obj.ptr(), id);
+  EXPECT_EQ(id,
+            isolate->forward_table_old()->GetValueExclusive(before_obj.ptr()));
+  EXPECT_EQ(no_id,
+            isolate->forward_table_old()->GetValueExclusive(after_obj.ptr()));
+
+  const Array& before = Array::Handle(Array::New(1, Heap::kOld));
+  before.SetAt(0, before_obj);
+  const Array& after = Array::Handle(Array::New(1, Heap::kOld));
+  after.SetAt(0, after_obj);
+  Become::ElementsForwardIdentity(before, after);
+
+  EXPECT(before_obj.ptr() == after_obj.ptr());
+  EXPECT_EQ(id,
+            isolate->forward_table_old()->GetValueExclusive(before_obj.ptr()));
+  EXPECT_EQ(id,
+            isolate->forward_table_old()->GetValueExclusive(after_obj.ptr()));
+
+  isolate->set_forward_table_new(nullptr);
+  isolate->set_forward_table_old(nullptr);
+}
+
 ISOLATE_UNIT_TEST_CASE(BecomeForwardRememberedObject) {
   const String& new_element = String::Handle(String::New("new", Heap::kNew));
   const String& old_element = String::Handle(String::New("old", Heap::kOld));
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index 51c2b28..e8b7bc9 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -920,12 +920,21 @@
     }
   }
 
-  // We only come here during hot reload, in which case we assume that none of
-  // the isolates is in the middle of sending messages.
   isolate_group()->ForEachIsolate(
       [&](Isolate* isolate) {
-        RELEASE_ASSERT(isolate->forward_table_new() == nullptr);
-        RELEASE_ASSERT(isolate->forward_table_old() == nullptr);
+        auto before_table = !before_object->IsSmiOrOldObject()
+                                ? isolate->forward_table_new()
+                                : isolate->forward_table_old();
+        if (before_table != nullptr) {
+          intptr_t entry = before_table->RemoveValueExclusive(before_object);
+          if (entry != 0) {
+            auto after_table = !after_object->IsSmiOrOldObject()
+                                   ? isolate->forward_table_new()
+                                   : isolate->forward_table_old();
+            ASSERT(after_table != nullptr);
+            after_table->SetValueExclusive(after_object, entry);
+          }
+        }
       },
       /*at_safepoint=*/true);
 }
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 3ef9c62..b1a7315 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -2493,25 +2493,6 @@
     ServiceIsolate::SendIsolateShutdownMessage();
 #if !defined(PRODUCT)
     debugger()->Shutdown();
-    // Cleanup profiler state.
-    SampleBlock* cpu_block = current_sample_block();
-    if (cpu_block != nullptr) {
-      cpu_block->release_block();
-    }
-    SampleBlock* allocation_block = current_allocation_sample_block();
-    if (allocation_block != nullptr) {
-      allocation_block->release_block();
-    }
-
-    // Process the previously assigned sample blocks if we're using the
-    // profiler's sample buffer. Some tests create their own SampleBlockBuffer
-    // and handle block processing themselves.
-    if ((cpu_block != nullptr || allocation_block != nullptr) &&
-        Profiler::sample_block_buffer() != nullptr) {
-      StackZone zone(thread);
-      HandleScope handle_scope(thread);
-      Profiler::sample_block_buffer()->ProcessCompletedBlocks();
-    }
 #endif
   }
 
@@ -2570,6 +2551,26 @@
   // requests anymore.
   Thread::ExitIsolate();
 
+#if !defined(PRODUCT)
+  // Cleanup profiler state.
+  SampleBlock* cpu_block = isolate->current_sample_block();
+  if (cpu_block != nullptr) {
+    cpu_block->release_block();
+  }
+  SampleBlock* allocation_block = isolate->current_allocation_sample_block();
+  if (allocation_block != nullptr) {
+    allocation_block->release_block();
+  }
+
+  // Process the previously assigned sample blocks if we're using the
+  // profiler's sample buffer. Some tests create their own SampleBlockBuffer
+  // and handle block processing themselves.
+  if ((cpu_block != nullptr || allocation_block != nullptr) &&
+      Profiler::sample_block_buffer() != nullptr) {
+    Profiler::sample_block_buffer()->ProcessCompletedBlocks();
+  }
+#endif  // !defined(PRODUCT)
+
   // Now it's safe to delete the isolate.
   delete isolate;
 
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index 3eca655..1c5e2db 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -1631,7 +1631,7 @@
       Dart_CObject* data = d->Allocate(Dart_CObject_kTypedData);
       intptr_t length = d->ReadUnsigned();
       data->value.as_typed_data.type = type;
-      data->value.as_typed_data.length = length * element_size;
+      data->value.as_typed_data.length = length;
       if (length == 0) {
         data->value.as_typed_data.values = NULL;
       } else {
@@ -1741,7 +1741,6 @@
   }
 
   void ReadNodesApi(ApiMessageDeserializer* d) {
-    intptr_t element_size = ExternalTypedData::ElementSizeInBytes(cid_);
     Dart_TypedData_Type type;
     switch (cid_) {
       case kExternalTypedDataInt8ArrayCid:
@@ -1796,7 +1795,7 @@
       intptr_t length = d->ReadUnsigned();
       FinalizableData finalizable_data = d->finalizable_data()->Get();
       data->value.as_typed_data.type = type;
-      data->value.as_typed_data.length = length * element_size;
+      data->value.as_typed_data.length = length;
       data->value.as_typed_data.values =
           reinterpret_cast<uint8_t*>(finalizable_data.data);
       d->AssignRef(data);
@@ -1905,7 +1904,6 @@
   }
 
   void PostLoadApi(ApiMessageDeserializer* d) {
-    intptr_t element_size = TypedDataView::ElementSizeInBytes(cid_);
     Dart_TypedData_Type type;
     switch (cid_) {
       case kTypedDataInt8ArrayViewCid:
@@ -1959,22 +1957,10 @@
       if (view->typed_data->type == Dart_CObject_kTypedData) {
         view->type = Dart_CObject_kTypedData;
         view->value.as_typed_data.type = type;
-        //            view->typed_data->value.as_typed_data.type;
-        view->value.as_typed_data.length =
-            view->length->value.as_int32 * element_size;
+        view->value.as_typed_data.length = view->length->value.as_int32;
         view->value.as_typed_data.values =
             view->typed_data->value.as_typed_data.values +
             view->offset_in_bytes->value.as_int32;
-      } else if (view->typed_data->type == Dart_CObject_kExternalTypedData) {
-        UNREACHABLE();  ///???
-        view->type = Dart_CObject_kTypedData;
-        view->value.as_typed_data.type = type;
-        //            view->typed_data->value.as_external_typed_data.type;
-        view->value.as_typed_data.length =
-            view->length->value.as_int32 * element_size;
-        view->value.as_typed_data.values =
-            view->typed_data->value.as_external_typed_data.data +
-            view->offset_in_bytes->value.as_int32;
       } else {
         UNREACHABLE();
       }
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index cdd8783..2436574 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -226,9 +226,7 @@
   int64_t start = Dart_TimelineGetMicros();
   for (intptr_t i = 0; i < capacity_; ++i) {
     SampleBlock* block = &blocks_[i];
-    // Only evict blocks owned by the current thread.
-    if (block->owner() == thread->isolate() && block->is_full() &&
-        !block->evictable()) {
+    if (block->is_full() && !block->evictable()) {
       if (Service::profiler_stream.enabled()) {
         Profile profile(block->owner());
         profile.Build(thread, nullptr, block);
@@ -332,12 +330,8 @@
     isolate->set_current_sample_block(next);
   }
   next->set_is_allocation_block(allocation_sample);
-  bool scheduled = can_process_block_.exchange(true);
-  // We don't process samples on the kernel isolate.
-  if (!isolate->is_kernel_isolate() && !isolate->is_service_isolate() &&
-      !scheduled) {
-    isolate->mutator_thread()->ScheduleInterrupts(Thread::kVMInterrupt);
-  }
+  can_process_block_.store(true);
+  isolate->mutator_thread()->ScheduleInterrupts(Thread::kVMInterrupt);
   return ReserveSampleImpl(isolate, allocation_sample);
 }
 
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 8affadb..9c488ee 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -1776,13 +1776,13 @@
         Dart_TypedData_Type type;
         int size;
       } expected[] = {
-          {Dart_TypedData_kInt8, 256},       {Dart_TypedData_kUint8, 256},
-          {Dart_TypedData_kInt16, 512},      {Dart_TypedData_kUint16, 512},
-          {Dart_TypedData_kInt32, 1024},     {Dart_TypedData_kUint32, 1024},
-          {Dart_TypedData_kInt64, 2048},     {Dart_TypedData_kUint64, 2048},
-          {Dart_TypedData_kFloat32, 1024},   {Dart_TypedData_kFloat64, 2048},
-          {Dart_TypedData_kInt32x4, 4096},   {Dart_TypedData_kFloat32x4, 4096},
-          {Dart_TypedData_kFloat64x2, 4096}, {Dart_TypedData_kInvalid, -1}};
+          {Dart_TypedData_kInt8, 256},      {Dart_TypedData_kUint8, 256},
+          {Dart_TypedData_kInt16, 256},     {Dart_TypedData_kUint16, 256},
+          {Dart_TypedData_kInt32, 256},     {Dart_TypedData_kUint32, 256},
+          {Dart_TypedData_kInt64, 256},     {Dart_TypedData_kUint64, 256},
+          {Dart_TypedData_kFloat32, 256},   {Dart_TypedData_kFloat64, 256},
+          {Dart_TypedData_kInt32x4, 256},   {Dart_TypedData_kFloat32x4, 256},
+          {Dart_TypedData_kFloat64x2, 256}, {Dart_TypedData_kInvalid, -1}};
 
       int i = 0;
       while (expected[i].type != Dart_TypedData_kInvalid) {
@@ -1804,31 +1804,31 @@
         Dart_TypedData_Type type;
         int size;
       } expected[] = {
-          {Dart_TypedData_kInt8, 256},       {Dart_TypedData_kUint8, 256},
-          {Dart_TypedData_kInt16, 512},      {Dart_TypedData_kUint16, 512},
-          {Dart_TypedData_kInt32, 1024},     {Dart_TypedData_kUint32, 1024},
-          {Dart_TypedData_kInt64, 2048},     {Dart_TypedData_kUint64, 2048},
-          {Dart_TypedData_kFloat32, 1024},   {Dart_TypedData_kFloat64, 2048},
-          {Dart_TypedData_kInt32x4, 4096},   {Dart_TypedData_kFloat32x4, 4096},
-          {Dart_TypedData_kFloat64x2, 4096},
+          {Dart_TypedData_kInt8, 256},      {Dart_TypedData_kUint8, 256},
+          {Dart_TypedData_kInt16, 256},     {Dart_TypedData_kUint16, 256},
+          {Dart_TypedData_kInt32, 256},     {Dart_TypedData_kUint32, 256},
+          {Dart_TypedData_kInt64, 256},     {Dart_TypedData_kUint64, 256},
+          {Dart_TypedData_kFloat32, 256},   {Dart_TypedData_kFloat64, 256},
+          {Dart_TypedData_kInt32x4, 256},   {Dart_TypedData_kFloat32x4, 256},
+          {Dart_TypedData_kFloat64x2, 256},
 
-          {Dart_TypedData_kInt8, 512},       {Dart_TypedData_kUint8, 512},
-          {Dart_TypedData_kInt8, 1024},      {Dart_TypedData_kUint8, 1024},
-          {Dart_TypedData_kInt8, 2048},      {Dart_TypedData_kUint8, 2048},
-          {Dart_TypedData_kInt8, 1024},      {Dart_TypedData_kUint8, 1024},
-          {Dart_TypedData_kInt8, 2048},      {Dart_TypedData_kUint8, 2048},
-          {Dart_TypedData_kInt8, 4096},      {Dart_TypedData_kUint8, 4096},
-          {Dart_TypedData_kInt8, 4096},      {Dart_TypedData_kUint8, 4096},
-          {Dart_TypedData_kInt8, 4096},      {Dart_TypedData_kUint8, 4096},
+          {Dart_TypedData_kInt8, 512},      {Dart_TypedData_kUint8, 512},
+          {Dart_TypedData_kInt8, 1024},     {Dart_TypedData_kUint8, 1024},
+          {Dart_TypedData_kInt8, 2048},     {Dart_TypedData_kUint8, 2048},
+          {Dart_TypedData_kInt8, 1024},     {Dart_TypedData_kUint8, 1024},
+          {Dart_TypedData_kInt8, 2048},     {Dart_TypedData_kUint8, 2048},
+          {Dart_TypedData_kInt8, 4096},     {Dart_TypedData_kUint8, 4096},
+          {Dart_TypedData_kInt8, 4096},     {Dart_TypedData_kUint8, 4096},
+          {Dart_TypedData_kInt8, 4096},     {Dart_TypedData_kUint8, 4096},
 
-          {Dart_TypedData_kInt16, 256},      {Dart_TypedData_kUint16, 256},
-          {Dart_TypedData_kInt16, 1024},     {Dart_TypedData_kUint16, 1024},
-          {Dart_TypedData_kInt16, 2048},     {Dart_TypedData_kUint16, 2048},
-          {Dart_TypedData_kInt16, 1024},     {Dart_TypedData_kUint16, 1024},
-          {Dart_TypedData_kInt16, 2048},     {Dart_TypedData_kUint16, 2048},
-          {Dart_TypedData_kInt16, 4096},     {Dart_TypedData_kUint16, 4096},
-          {Dart_TypedData_kInt16, 4096},     {Dart_TypedData_kUint16, 4096},
-          {Dart_TypedData_kInt16, 4096},     {Dart_TypedData_kUint16, 4096},
+          {Dart_TypedData_kInt16, 128},     {Dart_TypedData_kUint16, 128},
+          {Dart_TypedData_kInt16, 512},     {Dart_TypedData_kUint16, 512},
+          {Dart_TypedData_kInt16, 1024},    {Dart_TypedData_kUint16, 1024},
+          {Dart_TypedData_kInt16, 512},     {Dart_TypedData_kUint16, 512},
+          {Dart_TypedData_kInt16, 1024},    {Dart_TypedData_kUint16, 1024},
+          {Dart_TypedData_kInt16, 2048},    {Dart_TypedData_kUint16, 2048},
+          {Dart_TypedData_kInt16, 2048},    {Dart_TypedData_kUint16, 2048},
+          {Dart_TypedData_kInt16, 2048},    {Dart_TypedData_kUint16, 2048},
 
           {Dart_TypedData_kInvalid, -1}};
 
@@ -1852,13 +1852,13 @@
         Dart_TypedData_Type type;
         int size;
       } expected[] = {
-          {Dart_TypedData_kInt8, 256},      {Dart_TypedData_kUint8, 256},
-          {Dart_TypedData_kInt16, 256},     {Dart_TypedData_kUint16, 256},
-          {Dart_TypedData_kInt32, 256},     {Dart_TypedData_kUint32, 256},
-          {Dart_TypedData_kInt64, 256},     {Dart_TypedData_kUint64, 256},
-          {Dart_TypedData_kFloat32, 256},   {Dart_TypedData_kFloat64, 256},
-          {Dart_TypedData_kInt32x4, 256},   {Dart_TypedData_kFloat32x4, 256},
-          {Dart_TypedData_kFloat64x2, 256}, {Dart_TypedData_kInvalid, -1}};
+          {Dart_TypedData_kInt8, 256},     {Dart_TypedData_kUint8, 256},
+          {Dart_TypedData_kInt16, 128},    {Dart_TypedData_kUint16, 128},
+          {Dart_TypedData_kInt32, 64},     {Dart_TypedData_kUint32, 64},
+          {Dart_TypedData_kInt64, 32},     {Dart_TypedData_kUint64, 32},
+          {Dart_TypedData_kFloat32, 64},   {Dart_TypedData_kFloat64, 32},
+          {Dart_TypedData_kInt32x4, 16},   {Dart_TypedData_kFloat32x4, 16},
+          {Dart_TypedData_kFloat64x2, 16}, {Dart_TypedData_kInvalid, -1}};
 
       int i = 0;
       while (expected[i].type != Dart_TypedData_kInvalid) {
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 74217b6..09a3b25 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -450,15 +450,11 @@
     }
 
 #if !defined(PRODUCT)
-    // Don't block the kernel isolate to process CPU samples as we can
-    // potentially deadlock when trying to compile source for the main isolate.
-    if (!isolate()->is_kernel_isolate() && !isolate()->is_service_isolate()) {
-      // Processes completed SampleBlocks and sends CPU sample events over the
-      // service protocol when applicable.
-      SampleBlockBuffer* sample_buffer = Profiler::sample_block_buffer();
-      if (sample_buffer != nullptr && sample_buffer->process_blocks()) {
-        sample_buffer->ProcessCompletedBlocks();
-      }
+    // Processes completed SampleBlocks and sends CPU sample events over the
+    // service protocol when applicable.
+    SampleBlockBuffer* sample_buffer = Profiler::sample_block_buffer();
+    if (sample_buffer != nullptr && sample_buffer->process_blocks()) {
+      sample_buffer->ProcessCompletedBlocks();
     }
 #endif  // !defined(PRODUCT)
   }
diff --git a/tests/language/constructor/default_factory2_test.dart b/tests/language/constructor/default_factory2_test.dart
index a8b56b8..3de8111 100644
--- a/tests/language/constructor/default_factory2_test.dart
+++ b/tests/language/constructor/default_factory2_test.dart
@@ -22,6 +22,4 @@
 
 main() {
   var result = new IA<String>();
-  //               ^
-  // [cfe] Type argument 'String' doesn't conform to the bound 'Foo' of the type variable 'T' on 'A'.
 }
diff --git a/tests/language/factory/factory_test.dart b/tests/language/factory/factory_test.dart
index 7b0c2a8..56987b9 100644
--- a/tests/language/factory/factory_test.dart
+++ b/tests/language/factory/factory_test.dart
@@ -54,10 +54,7 @@
   LinkFactory._();
 }
 
-
 main() {
   FactoryTest.testMain();
   var a = new Link<int>.create();
-  //          ^
-  // [cfe] Expected 0 type arguments.
 }
diff --git a/tests/language/factory/redirection3_cyclic_test.dart b/tests/language/factory/redirection3_cyclic_test.dart
index ab115cc..289d71b 100644
--- a/tests/language/factory/redirection3_cyclic_test.dart
+++ b/tests/language/factory/redirection3_cyclic_test.dart
@@ -6,8 +6,6 @@
 
 class A {
   factory A.foo() = B;
-  //      ^
-  // [cfe] Cyclic definition of factory 'A.foo'.
 }
 
 class B implements A {
@@ -16,9 +14,13 @@
 
 class C implements B {
   factory C.bar() = C.foo;
+  //      ^
+  // [cfe] Cyclic definition of factory 'C.bar'.
   //                ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
   factory C.foo() = C.bar();
+  //      ^
+  // [cfe] Cyclic definition of factory 'C.foo'.
   //                ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
   //                  ^^^
diff --git a/tests/language/interface/interface_test.dart b/tests/language/interface/interface_test.dart
index b05e0a6..1a825cb 100644
--- a/tests/language/interface/interface_test.dart
+++ b/tests/language/interface/interface_test.dart
@@ -9,7 +9,7 @@
 
 abstract class Bi implements Ai {
   factory Bi() = InterfaceTest;
-  //      ^
+  //             ^
   // [cfe] Factory redirects to class 'InterfaceTest', which is abstract and can't be instantiated.
   //             ^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR
diff --git a/tests/language/redirecting/factory_malbounded_test.dart b/tests/language/redirecting/factory_malbounded_test.dart
index 29dd27875..e930ff7 100644
--- a/tests/language/redirecting/factory_malbounded_test.dart
+++ b/tests/language/redirecting/factory_malbounded_test.dart
@@ -11,10 +11,7 @@
   Foo.create() {}
 }
 
-class Bar<
-    T
-            extends num
-    > extends Foo<T> {
+class Bar<T extends num> extends Foo<T> {
   factory Bar() {
     return new Bar<T>.create();
   }
@@ -24,6 +21,4 @@
 
 main() {
   new Foo<String>();
-  //  ^
-  // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Bar'.
 }
diff --git a/tests/language/regress/regress23038_test.dart b/tests/language/regress/regress23038_test.dart
index 0967098..15e6699 100644
--- a/tests/language/regress/regress23038_test.dart
+++ b/tests/language/regress/regress23038_test.dart
@@ -11,7 +11,6 @@
     = C<C<T>>
     //^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
-    // [cfe] The constructor function type 'C<C<T>> Function()' isn't a subtype of 'C<T> Function()'.
   ;
 }
 
diff --git a/tests/language_2/constructor/default_factory2_test.dart b/tests/language_2/constructor/default_factory2_test.dart
index 905b695..cb3de6f 100644
--- a/tests/language_2/constructor/default_factory2_test.dart
+++ b/tests/language_2/constructor/default_factory2_test.dart
@@ -22,6 +22,4 @@
 
 main() {
   var result = new IA<String>();
-  //               ^
-  // [cfe] Type argument 'String' doesn't conform to the bound 'Foo' of the type variable 'T' on 'A'.
 }
diff --git a/tests/language_2/factory/factory_test.dart b/tests/language_2/factory/factory_test.dart
index 423d390..81f556a 100644
--- a/tests/language_2/factory/factory_test.dart
+++ b/tests/language_2/factory/factory_test.dart
@@ -54,10 +54,7 @@
   }
 }
 
-
 main() {
   FactoryTest.testMain();
   var a = new Link<int>.create();
-  //          ^
-  // [cfe] Expected 0 type arguments.
 }
diff --git a/tests/language_2/factory/redirection3_cyclic_test.dart b/tests/language_2/factory/redirection3_cyclic_test.dart
index 5b37ba0..2f36594 100644
--- a/tests/language_2/factory/redirection3_cyclic_test.dart
+++ b/tests/language_2/factory/redirection3_cyclic_test.dart
@@ -8,8 +8,6 @@
 
 class A {
   factory A.foo() = B;
-  //      ^
-  // [cfe] Cyclic definition of factory 'A.foo'.
 }
 
 class B implements A {
@@ -18,9 +16,13 @@
 
 class C implements B {
   factory C.bar() = C.foo;
+  //      ^
+  // [cfe] Cyclic definition of factory 'C.bar'.
   //                ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
   factory C.foo() = C.bar();
+  //      ^
+  // [cfe] Cyclic definition of factory 'C.foo'.
   //                ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
   //                  ^^^
diff --git a/tests/language_2/interface/interface_test.dart b/tests/language_2/interface/interface_test.dart
index 9bc7abd..61033fe 100644
--- a/tests/language_2/interface/interface_test.dart
+++ b/tests/language_2/interface/interface_test.dart
@@ -11,7 +11,7 @@
 
 abstract class Bi implements Ai {
   factory Bi() = InterfaceTest;
-  //      ^
+  //             ^
   // [cfe] Factory redirects to class 'InterfaceTest', which is abstract and can't be instantiated.
   //             ^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR
diff --git a/tests/language_2/redirecting/factory_malbounded_test.dart b/tests/language_2/redirecting/factory_malbounded_test.dart
index d22972f..24225b7 100644
--- a/tests/language_2/redirecting/factory_malbounded_test.dart
+++ b/tests/language_2/redirecting/factory_malbounded_test.dart
@@ -13,10 +13,7 @@
   Foo.create() {}
 }
 
-class Bar<
-    T
-            extends num
-    > extends Foo<T> {
+class Bar<T extends num> extends Foo<T> {
   factory Bar() {
     return new Bar<T>.create();
   }
@@ -26,6 +23,4 @@
 
 main() {
   new Foo<String>();
-  //  ^
-  // [cfe] Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'Bar'.
 }
diff --git a/tests/language_2/regress/regress23038_test.dart b/tests/language_2/regress/regress23038_test.dart
index 0b861e1..605f629 100644
--- a/tests/language_2/regress/regress23038_test.dart
+++ b/tests/language_2/regress/regress23038_test.dart
@@ -13,7 +13,6 @@
     = C<C<T>>
     //^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.RECURSIVE_CONSTRUCTOR_REDIRECT
-    // [cfe] The constructor function type 'C<C<T>> Function()' isn't a subtype of 'C<T> Function()'.
   ;
 }
 
diff --git a/tools/VERSION b/tools/VERSION
index b40e8cf..58a7755 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 380
+PRERELEASE 381
 PRERELEASE_PATCH 0
\ No newline at end of file
