diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index edf0831..8665c23 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -462,34 +462,51 @@
           new RedirectingFactoryBody(target, typeArguments, function);
       function.body!.parent = function;
     }
-    if (_factoryTearOff != null) {
-      Set<Procedure> seenTargets = {};
-      while (target is Procedure && target.isRedirectingFactory) {
-        if (!seenTargets.add(target)) {
-          // Cyclic dependency.
-          target = null;
-          break;
-        }
-        RedirectingFactoryBody body =
-            target.function.body as RedirectingFactoryBody;
-        if (typeArguments != null) {
-          Substitution substitution = Substitution.fromPairs(
-              target.function.typeParameters, typeArguments);
-          typeArguments =
-              body.typeArguments?.map(substitution.substituteType).toList();
-        } else {
-          typeArguments = body.typeArguments;
-        }
-        target = body.target;
+
+    Set<Procedure> seenTargets = {};
+    while (target is Procedure && target.isRedirectingFactory) {
+      if (!seenTargets.add(target)) {
+        // Cyclic dependency.
+        target = null;
+        break;
       }
-      if (target is Constructor || target is Procedure && target.isFactory) {
+      RedirectingFactoryBody body =
+          target.function.body as RedirectingFactoryBody;
+      if (typeArguments != null) {
+        Substitution substitution = Substitution.fromPairs(
+            target.function.typeParameters, typeArguments);
+        typeArguments =
+            body.typeArguments?.map(substitution.substituteType).toList();
+      } else {
+        typeArguments = body.typeArguments;
+      }
+      target = body.target;
+    }
+
+    if (target is Constructor || target is Procedure && target.isFactory) {
+      typeArguments ??= [];
+      if (_factoryTearOff != null) {
         synthesizedFunctionNodes.add(buildRedirectingFactoryTearOffBody(
             _factoryTearOff!,
             target!,
-            typeArguments ?? [],
+            typeArguments,
             _tearOffTypeParameters!,
             library));
       }
+      Map<TypeParameter, DartType> substitutionMap;
+      if (function.typeParameters.length == typeArguments.length) {
+        substitutionMap = new Map<TypeParameter, DartType>.fromIterables(
+            function.typeParameters, typeArguments);
+      } else {
+        // Error case: Substitute type parameters with `dynamic`.
+        substitutionMap = new Map<TypeParameter, DartType>.fromIterables(
+            function.typeParameters,
+            new List<DartType>.generate(function.typeParameters.length,
+                (int index) => const DynamicType()));
+      }
+      synthesizedFunctionNodes.add(new SynthesizedFunctionNode(
+          substitutionMap, target!.function!, function,
+          libraryBuilder: library, identicalSignatures: false));
     }
     if (isConst && isPatch) {
       _finishPatch();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
index 4acef90..a55684b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
index e793729..149333a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
index 841838c..7093a76 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
index 841838c..7093a76 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
index 742d873..0b49573 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
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 8c398fe..00b5a13 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
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
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 cc59901..f707639 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
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
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 8c398fe..00b5a13 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
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
index 8c398fe..00b5a13 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
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 cc59901..f707639 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
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
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 aa8c2df..f53573a 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
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
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 aa4af4d..80d7fd2 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
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
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 aa8c2df..f53573a 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
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
index aa8c2df..f53573a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
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 aa4af4d..80d7fd2 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
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
index 713b894..3175a4a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
index e1f62d1..9913373 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
index 911cbda..2a8a57e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
index 911cbda..2a8a57e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
index ec985b8..7444b65 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
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 0cdd47c..ec986d0 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
@@ -37,7 +37,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
index 0cdd47c..ec986d0 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
@@ -37,7 +37,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
     return new test::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 0cdd47c..ec986d0 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
@@ -37,7 +37,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
@@ -10,17 +10,17 @@
 }
 class Settings extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
-  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+  static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -30,7 +30,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -45,10 +45,9 @@
   #C1 = constructor-tearoff self::Settings::•
   #C2 = self::_$_SSidebar {}
   #C3 = self::Default {defaultValue:#C2}
-  #C4 = null
-  #C5 = constructor-tearoff self::Sidebar::•
-  #C6 = constructor-tearoff self::_SSettings::•
-  #C7 = constructor-tearoff self::_SSidebar::•
+  #C4 = constructor-tearoff self::Sidebar::•
+  #C5 = constructor-tearoff self::_SSettings::•
+  #C6 = constructor-tearoff self::_SSidebar::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
@@ -10,17 +10,17 @@
 }
 class Settings extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
-  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+  static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -30,7 +30,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -45,10 +45,9 @@
   #C1 = constructor-tearoff self::Settings::•
   #C2 = self::_$_SSidebar {}
   #C3 = self::Default {defaultValue:#C2}
-  #C4 = null
-  #C5 = constructor-tearoff self::Sidebar::•
-  #C6 = constructor-tearoff self::_SSettings::•
-  #C7 = constructor-tearoff self::_SSidebar::•
+  #C4 = constructor-tearoff self::Sidebar::•
+  #C5 = constructor-tearoff self::_SSettings::•
+  #C6 = constructor-tearoff self::_SSidebar::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
@@ -10,17 +10,17 @@
 }
 class Settings extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
-  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+  static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -30,7 +30,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -45,10 +45,9 @@
   #C1 = constructor-tearoff self::Settings::•
   #C2 = self::_$_SSidebar {}
   #C3 = self::Default {defaultValue:#C2}
-  #C4 = null
-  #C5 = constructor-tearoff self::Sidebar::•
-  #C6 = constructor-tearoff self::_SSettings::•
-  #C7 = constructor-tearoff self::_SSidebar::•
+  #C4 = constructor-tearoff self::Sidebar::•
+  #C5 = constructor-tearoff self::_SSettings::•
+  #C6 = constructor-tearoff self::_SSidebar::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue48548.dart b/pkg/front_end/testcases/general/issue48548.dart
new file mode 100644
index 0000000..52be292
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2022, 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.
+
+abstract class A {
+  int get value;
+  factory A({int value}) = _AImpl;
+}
+
+class _AImpl implements A {
+  final int value;
+  _AImpl({this.value = 0});
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+
+void main(List<String> args) {
+  expect(0, A().value);
+  expect(0, A.new().value);
+  expect(0, _new().value);
+  expect(0, (A.new)().value);
+  expect(0, _AImpl().value);
+  expect(0, _AImpl.new().value);
+  expect(0, _newImpl().value);
+  expect(0, (_AImpl.new)().value);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect
new file mode 100644
index 0000000..a9c9cef
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+abstract class A {
+  int get value;
+  factory A({int value}) = _AImpl;
+}
+
+class _AImpl implements A {
+  final int value;
+  _AImpl({this.value = 0});
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+void main(List<String> args) {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0c47551
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+abstract class A {
+  factory A({int value}) = _AImpl;
+  int get value;
+}
+
+class _AImpl implements A {
+  _AImpl({this.value = 0});
+  final int value;
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+expect(expected, actual) {}
+void main(List<String> args) {}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get value() → core::int;
+  static factory •({core::int value = #C2}) → self::A
+    return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+  final field core::int value;
+  constructor •({core::int value = #C2}) → self::_AImpl
+    : self::_AImpl::value = value, super core::Object::•()
+    ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = 0
+  #C3 = redirecting-factory-tearoff self::A::•
+  #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get value() → core::int;
+  static factory •({core::int value = #C2}) → self::A
+    return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+  final field core::int value;
+  constructor •({core::int value = #C2}) → self::_AImpl
+    : self::_AImpl::value = value, super core::Object::•()
+    ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = 0
+  #C3 = redirecting-factory-tearoff self::A::•
+  #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect
new file mode 100644
index 0000000..3119c74
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  abstract get value() → core::int;
+  static factory •({core::int value}) → self::A
+    return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+  final field core::int value;
+  constructor •({core::int value = 0}) → self::_AImpl
+    ;
+}
+static const field ({value: core::int}) → self::A _new = self::A::•;
+static const field ({value: core::int}) → self::_AImpl _newImpl = self::_AImpl::•;
+static method main(core::List<core::String> args) → void
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue48548.dart:5:16 -> ConstructorTearOffConstant(A.)
+Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///issue48548.dart:15:14 -> RedirectingFactoryTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue48548.dart:16:18 -> ConstructorTearOffConstant(_AImpl.)
+Extra constant evaluation: evaluated: 6, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get value() → core::int;
+  static factory •({core::int value = #C2}) → self::A
+    return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+  final field core::int value;
+  constructor •({core::int value = #C2}) → self::_AImpl
+    : self::_AImpl::value = value, super core::Object::•()
+    ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = 0
+  #C3 = redirecting-factory-tearoff self::A::•
+  #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart b/pkg/front_end/testcases/general/redirecting_default_values.dart
new file mode 100644
index 0000000..322fc25
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2022, 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.
+
+class Class {
+  Class.positional([int a = 0, int b = 42]);
+  factory Class.redirect1a() = Class.positional;
+  factory Class.redirect2a(int a) = Class.positional;
+  factory Class.redirect3a([int a]) = Class.positional;
+  factory Class.redirect4a(int a, [int b]) = Class.positional;
+  factory Class.redirect5a([int a, int b]) = Class.positional;
+  factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+
+  Class.named({int a = 0, int b = 42});
+  factory Class.redirect1b() = Class.named;
+  factory Class.redirect2b({int a}) = Class.named;
+  factory Class.redirect3b({int b}) = Class.named;
+  factory Class.redirect4b({int a, int b}) = Class.named;
+  factory Class.redirect5b({int b, int a}) = Class.named;
+  factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect
new file mode 100644
index 0000000..85004fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+class Class {
+  Class.positional([int a = 0, int b = 42]);
+  factory Class.redirect1a() = Class.positional;
+  factory Class.redirect2a(int a) = Class.positional;
+  factory Class.redirect3a([int a]) = Class.positional;
+  factory Class.redirect4a(int a, [int b]) = Class.positional;
+  factory Class.redirect5a([int a, int b]) = Class.positional;
+  factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+  Class.named({int a = 0, int b = 42});
+  factory Class.redirect1b() = Class.named;
+  factory Class.redirect2b({int a}) = Class.named;
+  factory Class.redirect3b({int b}) = Class.named;
+  factory Class.redirect4b({int a, int b}) = Class.named;
+  factory Class.redirect5b({int b, int a}) = Class.named;
+  factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c7ca7ed
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+class Class {
+  Class.named({int a = 0, int b = 42});
+  Class.positional([int a = 0, int b = 42]);
+  factory Class.redirect1a() = Class.positional;
+  factory Class.redirect1b() = Class.named;
+  factory Class.redirect2a(int a) = Class.positional;
+  factory Class.redirect2b({int a}) = Class.named;
+  factory Class.redirect3a([int a]) = Class.positional;
+  factory Class.redirect3b({int b}) = Class.named;
+  factory Class.redirect4a(int a, [int b]) = Class.positional;
+  factory Class.redirect4b({int a, int b}) = Class.named;
+  factory Class.redirect5a([int a, int b]) = Class.positional;
+  factory Class.redirect5b({int b, int a}) = Class.named;
+  factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+  factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+//                                            ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6b({int a = 1, int b}) = Class.named;
+//                                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+  constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+    : super core::Object::•()
+    ;
+  constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect1a() → self::Class
+    return new self::Class::positional();
+  static factory redirect2a(core::int a = #C13) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect3a([core::int a = #C13]) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect1b() → self::Class
+    return new self::Class::named();
+  static factory redirect2b({core::int a = #C13}) → self::Class
+    return new self::Class::named(a: a);
+  static factory redirect3b({core::int b = #C14}) → self::Class
+    return new self::Class::named(b: b);
+  static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+  static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+    return new self::Class::named(b: b, a: a);
+  static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect1a
+  #C2 = constructor-tearoff self::Class::redirect2a
+  #C3 = constructor-tearoff self::Class::redirect3a
+  #C4 = constructor-tearoff self::Class::redirect4a
+  #C5 = constructor-tearoff self::Class::redirect5a
+  #C6 = constructor-tearoff self::Class::redirect6a
+  #C7 = constructor-tearoff self::Class::redirect1b
+  #C8 = constructor-tearoff self::Class::redirect2b
+  #C9 = constructor-tearoff self::Class::redirect3b
+  #C10 = constructor-tearoff self::Class::redirect4b
+  #C11 = constructor-tearoff self::Class::redirect5b
+  #C12 = constructor-tearoff self::Class::redirect6b
+  #C13 = 0
+  #C14 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+//                                            ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6b({int a = 1, int b}) = Class.named;
+//                                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+  constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+    : super core::Object::•()
+    ;
+  constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect1a() → self::Class
+    return new self::Class::positional();
+  static factory redirect2a(core::int a = #C13) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect3a([core::int a = #C13]) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect1b() → self::Class
+    return new self::Class::named();
+  static factory redirect2b({core::int a = #C13}) → self::Class
+    return new self::Class::named(a: a);
+  static factory redirect3b({core::int b = #C14}) → self::Class
+    return new self::Class::named(b: b);
+  static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+  static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+    return new self::Class::named(b: b, a: a);
+  static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect1a
+  #C2 = constructor-tearoff self::Class::redirect2a
+  #C3 = constructor-tearoff self::Class::redirect3a
+  #C4 = constructor-tearoff self::Class::redirect4a
+  #C5 = constructor-tearoff self::Class::redirect5a
+  #C6 = constructor-tearoff self::Class::redirect6a
+  #C7 = constructor-tearoff self::Class::redirect1b
+  #C8 = constructor-tearoff self::Class::redirect2b
+  #C9 = constructor-tearoff self::Class::redirect3b
+  #C10 = constructor-tearoff self::Class::redirect4b
+  #C11 = constructor-tearoff self::Class::redirect5b
+  #C12 = constructor-tearoff self::Class::redirect6b
+  #C13 = 0
+  #C14 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
new file mode 100644
index 0000000..cbca85f
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect1a, self::Class::redirect2a, self::Class::redirect3a, self::Class::redirect4a, self::Class::redirect5a, self::Class::redirect6a, self::Class::redirect1b, self::Class::redirect2b, self::Class::redirect3b, self::Class::redirect4b, self::Class::redirect5b, self::Class::redirect6b]/*isLegacy*/;
+  constructor positional([core::int a = 0, core::int b = 42]) → self::Class
+    ;
+  constructor named({core::int a = 0, core::int b = 42}) → self::Class
+    ;
+  static factory redirect1a() → self::Class
+    return new self::Class::positional();
+  static factory redirect2a(core::int a) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect3a([core::int a]) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect4a(core::int a, [core::int b]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect5a([core::int a, core::int b]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect6a([core::int a, core::int b]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect1b() → self::Class
+    return new self::Class::named();
+  static factory redirect2b({core::int a}) → self::Class
+    return new self::Class::named(a: a);
+  static factory redirect3b({core::int b}) → self::Class
+    return new self::Class::named(b: b);
+  static factory redirect4b({core::int a, core::int b}) → self::Class
+    return new self::Class::named(a: a, b: b);
+  static factory redirect5b({core::int b, core::int a}) → self::Class
+    return new self::Class::named(b: b, a: a);
+  static factory redirect6b({core::int a, core::int b}) → self::Class
+    return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect1a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect2a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect3a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect4a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect5a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect6a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect1b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect2b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect3b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect4b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect5b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect6b)
+Extra constant evaluation: evaluated: 41, effectively constant: 12
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+//                                            ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6b({int a = 1, int b}) = Class.named;
+//                                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+  constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+    : super core::Object::•()
+    ;
+  constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect1a() → self::Class
+    return new self::Class::positional();
+  static factory redirect2a(core::int a = #C13) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect3a([core::int a = #C13]) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect1b() → self::Class
+    return new self::Class::named();
+  static factory redirect2b({core::int a = #C13}) → self::Class
+    return new self::Class::named(a: a);
+  static factory redirect3b({core::int b = #C14}) → self::Class
+    return new self::Class::named(b: b);
+  static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+  static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+    return new self::Class::named(b: b, a: a);
+  static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect1a
+  #C2 = constructor-tearoff self::Class::redirect2a
+  #C3 = constructor-tearoff self::Class::redirect3a
+  #C4 = constructor-tearoff self::Class::redirect4a
+  #C5 = constructor-tearoff self::Class::redirect5a
+  #C6 = constructor-tearoff self::Class::redirect6a
+  #C7 = constructor-tearoff self::Class::redirect1b
+  #C8 = constructor-tearoff self::Class::redirect2b
+  #C9 = constructor-tearoff self::Class::redirect3b
+  #C10 = constructor-tearoff self::Class::redirect4b
+  #C11 = constructor-tearoff self::Class::redirect5b
+  #C12 = constructor-tearoff self::Class::redirect6b
+  #C13 = 0
+  #C14 = 42
+}
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 4a74b87..1dd09f3 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
@@ -16,7 +16,7 @@
   constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
-  static factory redirect([core::int field]) → self::A
+  static factory redirect([core::int field = #C2]) → self::A
     return new self::A::•(field);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
index 4a74b87..1dd09f3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
@@ -16,7 +16,7 @@
   constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
-  static factory redirect([core::int field]) → self::A
+  static factory redirect([core::int field = #C2]) → self::A
     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 4a74b87..1dd09f3 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
@@ -16,7 +16,7 @@
   constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
-  static factory redirect([core::int field]) → self::A
+  static factory redirect([core::int field = #C2]) → self::A
     return new self::A::•(field);
 }
 static method main() → dynamic {
