diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 6e68327..ed6fa697 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -8,8 +8,7 @@
 import 'dart:convert';
 import 'dart:math' show max, min;
 
-import 'package:front_end/src/fasta/kernel/constructor_tearoff_lowering.dart'
-    show isTearOffLowering;
+import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
@@ -1319,7 +1318,7 @@
   /// otherwise define them as lazy properties.
   void _emitStaticFields(Class c, List<js_ast.Statement> body) {
     var fields = c.fields
-        .where((f) => f.isStatic && getRedirectingFactories(f) == null)
+        .where((f) => f.isStatic && !isRedirectingFactoryField(f))
         .toList();
     if (c.isEnum) {
       // We know enum fields can be safely emitted as const fields, as long
@@ -1853,7 +1852,9 @@
     Set<Member> redirectingFactories;
     for (var m in c.fields) {
       if (m.isStatic) {
-        redirectingFactories ??= getRedirectingFactories(m)?.toSet();
+        if (isRedirectingFactoryField(m)) {
+          redirectingFactories = getRedirectingFactories(m).toSet();
+        }
       } else if (_extensionTypes.isNativeClass(c)) {
         jsMethods.addAll(_emitNativeFieldAccessors(m));
       } else if (virtualFields.containsKey(m)) {
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 958e4af..44fe33a 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -4,7 +4,6 @@
 
 import 'dart:collection';
 import 'package:collection/collection.dart';
-import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
 
@@ -246,18 +245,6 @@
   return false;
 }
 
-/// Returns the redirecting factory constructors for the enclosing class,
-/// if the field [f] is storing that information, otherwise returns `null`.
-Iterable<Member>? getRedirectingFactories(Field f) {
-  // TODO(jmesserly): this relies on implementation details in Kernel
-  if (isRedirectingFactoryField(f)) {
-    assert(f.isStatic);
-    var list = f.initializer as ListLiteral;
-    return list.expressions.map((e) => (e as StaticGet).target);
-  }
-  return null;
-}
-
 /// Gets the real supertype of [c] and the list of [mixins] in reverse
 /// application order (mixins will appear before ones they override).
 ///
diff --git a/pkg/front_end/lib/src/api_unstable/ddc.dart b/pkg/front_end/lib/src/api_unstable/ddc.dart
index 23e1784..0d7c334 100644
--- a/pkg/front_end/lib/src/api_unstable/ddc.dart
+++ b/pkg/front_end/lib/src/api_unstable/ddc.dart
@@ -64,8 +64,15 @@
 
 export '../fasta/incremental_compiler.dart' show IncrementalCompiler;
 
+export '../fasta/kernel/constructor_tearoff_lowering.dart'
+    show isTearOffLowering;
+
 export '../fasta/kernel/redirecting_factory_body.dart'
-    show RedirectingFactoryBody, isRedirectingFactoryField, redirectingName;
+    show
+        getRedirectingFactories,
+        RedirectingFactoryBody,
+        isRedirectingFactoryField,
+        redirectingName;
 
 export '../fasta/type_inference/type_schema_environment.dart'
     show TypeSchemaEnvironment;
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index edf5ede..b367503 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -29,7 +29,10 @@
 
 import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/redirecting_factory_body.dart'
-    show RedirectingFactoryBody, isRedirectingFactoryField;
+    show
+        RedirectingFactoryBody,
+        getRedirectingFactories,
+        isRedirectingFactoryField;
 
 import '../problems.dart' show internalProblem, unhandled, unimplemented;
 
@@ -190,10 +193,8 @@
     }
     for (Field field in cls.fields) {
       if (isRedirectingFactoryField(field)) {
-        ListLiteral initializer = field.initializer as ListLiteral;
-        for (Expression expression in initializer.expressions) {
-          StaticGet get = expression as StaticGet;
-          RedirectingFactoryBody.restoreFromDill(get.target as Procedure);
+        for (Procedure target in getRedirectingFactories(field)) {
+          RedirectingFactoryBody.restoreFromDill(target);
         }
       } else {
         classBuilder.addField(field);
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index af63914..4b2244d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -7092,11 +7092,6 @@
   }
 
   @override
-  StaticGet makeStaticGet(Member readTarget, Token token) {
-    return new StaticGet(readTarget)..fileOffset = offsetForToken(token);
-  }
-
-  @override
   Expression wrapInDeferredCheck(
       Expression expression, PrefixBuilder prefix, int charOffset) {
     VariableDeclaration check = new VariableDeclaration.forValue(
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 90961d6..bc2af8b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -35,7 +35,6 @@
 import '../fasta_codes.dart';
 
 import 'constant_int_folder.dart';
-import 'constructor_tearoff_lowering.dart';
 
 part 'constant_collection_builders.dart';
 
@@ -701,34 +700,6 @@
     if (expression is ConstantExpression) {
       if (result.typeArguments.every(isInstantiated)) {
         return evaluateAndTransformWithContext(node, result);
-      } else if (enableConstructorTearOff) {
-        Constant constant = expression.constant;
-        if (constant is TypedefTearOffConstant) {
-          Substitution substitution =
-              Substitution.fromPairs(constant.parameters, node.typeArguments);
-          return new Instantiation(
-              new ConstantExpression(constant.tearOffConstant,
-                  constant.tearOffConstant.getType(_staticTypeContext!))
-                ..fileOffset = expression.fileOffset,
-              constant.types.map(substitution.substituteType).toList());
-        } else {
-          LoweredTypedefTearOff? loweredTypedefTearOff =
-              LoweredTypedefTearOff.fromConstant(constant);
-          if (loweredTypedefTearOff != null) {
-            Constant tearOffConstant = constantEvaluator
-                .canonicalize(loweredTypedefTearOff.targetTearOffConstant);
-            Substitution substitution = Substitution.fromPairs(
-                loweredTypedefTearOff.typedefTearOff.function.typeParameters,
-                node.typeArguments);
-            return new Instantiation(
-                new ConstantExpression(tearOffConstant,
-                    tearOffConstant.getType(_staticTypeContext!))
-                  ..fileOffset = expression.fileOffset,
-                loweredTypedefTearOff.typeArguments
-                    .map(substitution.substituteType)
-                    .toList());
-          }
-        }
       }
     }
     return node;
@@ -3364,29 +3335,8 @@
         // ignore: unnecessary_null_comparison
         assert(types != null);
 
-        List<DartType> typeArguments = types;
-        if (constant is TypedefTearOffConstant) {
-          Substitution substitution =
-              Substitution.fromPairs(constant.parameters, typeArguments);
-          typeArguments =
-              constant.types.map(substitution.substituteType).toList();
-          constant = constant.tearOffConstant;
-        } else {
-          LoweredTypedefTearOff? loweredTypedefTearOff =
-              LoweredTypedefTearOff.fromConstant(constant);
-          if (loweredTypedefTearOff != null) {
-            constant =
-                canonicalize(loweredTypedefTearOff.targetTearOffConstant);
-            Substitution substitution = Substitution.fromPairs(
-                loweredTypedefTearOff.typedefTearOff.function.typeParameters,
-                node.typeArguments);
-            typeArguments = loweredTypedefTearOff.typeArguments
-                .map(substitution.substituteType)
-                .toList();
-          }
-        }
         return canonicalize(
-            new InstantiationConstant(constant, convertTypes(typeArguments)));
+            new InstantiationConstant(constant, convertTypes(types)));
       } else {
         // Probably unreachable.
         return createEvaluationErrorConstant(
diff --git a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
index e3dd8b1..244a71d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
@@ -428,19 +428,18 @@
 /// Reverse engineered typedef tear off information.
 class LoweredTypedefTearOff {
   Procedure typedefTearOff;
-  Constant targetTearOffConstant;
+  Expression targetTearOff;
   List<DartType> typeArguments;
 
   LoweredTypedefTearOff(
-      this.typedefTearOff, this.targetTearOffConstant, this.typeArguments);
+      this.typedefTearOff, this.targetTearOff, this.typeArguments);
 
-  /// Reverse engineers [constant] to a [LoweredTypedefTearOff] if [constant] is
-  /// the encoding of a lowered typedef tear off.
-  // TODO(johnniwinther): Check that this works with outlines.
-  static LoweredTypedefTearOff? fromConstant(Constant constant) {
-    if (constant is StaticTearOffConstant &&
-        isTypedefTearOffLowering(constant.target)) {
-      Procedure typedefTearOff = constant.target;
+  /// Reverse engineers [expression] to a [LoweredTypedefTearOff] if
+  /// [expression] is the encoding of a lowered typedef tear off.
+  static LoweredTypedefTearOff? fromExpression(Expression expression) {
+    if (expression is StaticTearOff &&
+        isTypedefTearOffLowering(expression.target)) {
+      Procedure typedefTearOff = expression.target;
       Statement? body = typedefTearOff.function.body;
       if (body is ReturnStatement) {
         Expression? constructorInvocation = body.expression;
@@ -463,15 +462,15 @@
               break;
             }
           }
-          Constant tearOffConstant;
+          Expression targetTearOff;
           if (target is Constructor ||
               target is Procedure && target.isFactory) {
-            tearOffConstant = new ConstructorTearOffConstant(target!);
+            targetTearOff = new ConstructorTearOff(target!);
           } else {
-            tearOffConstant = new StaticTearOffConstant(target as Procedure);
+            targetTearOff = new StaticTearOff(target as Procedure);
           }
           return new LoweredTypedefTearOff(
-              typedefTearOff, tearOffConstant, typeArguments!);
+              typedefTearOff, targetTearOff, typeArguments!);
         }
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index b5acdef..9347efa 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -1438,11 +1438,16 @@
 
   Expression _createRead() {
     Expression read;
+    Member? readTarget = this.readTarget;
     if (readTarget == null) {
       read = _makeInvalidRead(UnresolvedKind.Getter);
     } else {
       _reportNonNullableInNullAwareWarningIfNeeded();
-      read = _helper.makeStaticGet(readTarget!, token);
+      if (readTarget is Procedure && readTarget.kind == ProcedureKind.Method) {
+        read = _helper.forest.createStaticTearOff(fileOffset, readTarget);
+      } else {
+        read = _helper.forest.createStaticGet(fileOffset, readTarget);
+      }
     }
     return read;
   }
@@ -3221,6 +3226,9 @@
               if (tearOff.isRedirectingFactory) {
                 tearOffExpression = _helper.forest
                     .createRedirectingFactoryTearOff(token.charOffset, tearOff);
+              } else if (tearOff.isFactory) {
+                tearOffExpression = _helper.forest
+                    .createConstructorTearOff(token.charOffset, tearOff);
               } else {
                 tearOffExpression = _helper.forest
                     .createStaticTearOff(token.charOffset, tearOff);
@@ -3264,8 +3272,13 @@
                     aliasBuilder.findConstructorOrFactory(
                         name.text, nameOffset, _uri, _helper.libraryBuilder);
                 if (tearOffLowering != null) {
-                  return _helper.forest
-                      .createStaticTearOff(token.charOffset, tearOffLowering);
+                  if (tearOffLowering.isFactory) {
+                    return _helper.forest.createConstructorTearOff(
+                        token.charOffset, tearOffLowering);
+                  } else {
+                    return _helper.forest
+                        .createStaticTearOff(token.charOffset, tearOffLowering);
+                  }
                 }
                 FreshTypeParameters freshTypeParameters =
                     getFreshTypeParameters(aliasBuilder.typedef.typeParameters);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 0bd29ce..3d52030 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -107,8 +107,6 @@
   LocatedMessage? checkArgumentsForFunction(FunctionNode function,
       Arguments arguments, int offset, List<TypeParameter> typeParameters);
 
-  StaticGet makeStaticGet(Member readTarget, Token token);
-
   Expression wrapInDeferredCheck(
       Expression expression, PrefixBuilder prefix, int charOffset);
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 8e7b3b9..9ce125d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -833,24 +833,36 @@
     return new ParenthesizedExpression(expression)..fileOffset = fileOffset;
   }
 
-  ConstructorTearOff createConstructorTearOff(
-      int fileOffset, Constructor constructor) {
+  ConstructorTearOff createConstructorTearOff(int fileOffset, Member target) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
-    return new ConstructorTearOff(constructor)..fileOffset = fileOffset;
+    assert(target is Constructor || (target is Procedure && target.isFactory),
+        "Unexpected constructor tear off target: $target");
+    return new ConstructorTearOff(target)..fileOffset = fileOffset;
   }
 
   StaticTearOff createStaticTearOff(int fileOffset, Procedure procedure) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
-    assert(!procedure.isRedirectingFactory);
+    assert(procedure.kind == ProcedureKind.Method,
+        "Unexpected static tear off target: $procedure");
+    assert(!procedure.isRedirectingFactory,
+        "Unexpected static tear off target: $procedure");
     return new StaticTearOff(procedure)..fileOffset = fileOffset;
   }
 
+  StaticGet createStaticGet(int fileOffset, Member target) {
+    // ignore: unnecessary_null_comparison
+    assert(fileOffset != null);
+    assert(target is Field || (target is Procedure && target.isGetter));
+    return new StaticGet(target)..fileOffset = fileOffset;
+  }
+
   RedirectingFactoryTearOff createRedirectingFactoryTearOff(
       int fileOffset, Procedure procedure) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
+    assert(procedure.isRedirectingFactory);
     return new RedirectingFactoryTearOff(procedure)..fileOffset = fileOffset;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 4e18e23..57f6519 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -6851,7 +6851,7 @@
         inferrer.typeSchemaEnvironment
             .futureType(const DynamicType(), inferrer.library.nonNullable),
         inferrer.library.nonNullable);
-    Expression replacement = new StaticGet(node.target)
+    Expression replacement = new StaticTearOff(node.target)
       ..fileOffset = node.fileOffset;
     return new ExpressionInferenceResult(inferredType, replacement);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
index 3697827..c363409 100644
--- a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
@@ -23,6 +23,29 @@
       member.name.text == redirectingName;
 }
 
+/// Returns the redirecting factory constructors for the enclosing class from
+/// [field].
+///
+/// `isRedirectingFactoryField(field)` is assumed to be true.
+Iterable<Procedure> getRedirectingFactories(Field field) {
+  assert(isRedirectingFactoryField(field));
+  List<Procedure> redirectingFactories = [];
+  ListLiteral initializer = field.initializer as ListLiteral;
+  for (Expression expression in initializer.expressions) {
+    Procedure target;
+    if (expression is ConstantExpression) {
+      ConstructorTearOffConstant constant =
+          expression.constant as ConstructorTearOffConstant;
+      target = constant.target as Procedure;
+    } else {
+      ConstructorTearOff get = expression as ConstructorTearOff;
+      target = get.target as Procedure;
+    }
+    redirectingFactories.add(target);
+  }
+  return redirectingFactories;
+}
+
 /// Name used for a synthesized let variable used to encode redirecting factory
 /// information in a factory method body.
 const String letName = "#redirecting_factory";
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 91fa5d8..a7d6ce8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -908,8 +908,8 @@
     }
     Field field = constructorsField.field;
     ListLiteral literal = field.initializer as ListLiteral;
-    literal.expressions
-        .add(new StaticGet(constructorBuilder.member)..parent = literal);
+    literal.expressions.add(
+        new ConstructorTearOff(constructorBuilder.member)..parent = literal);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 3fcba19..7e9d30a 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -36,6 +36,7 @@
 import '../fasta_codes.dart';
 
 import '../kernel/class_hierarchy_builder.dart' show ClassMember;
+import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/kernel_helper.dart';
 import '../kernel/inference_visitor.dart';
 import '../kernel/internal_ast.dart';
@@ -4065,14 +4066,33 @@
       DartType tearOffType,
       Expression expression) {
     if (implicitInstantiation != null) {
+      List<DartType> typeArguments = implicitInstantiation.typeArguments;
       if (!isTopLevel) {
         checkBoundsInInstantiation(implicitInstantiation.functionType,
-            implicitInstantiation.typeArguments, expression.fileOffset,
+            typeArguments, expression.fileOffset,
             inferred: true);
       }
-      expression =
-          new Instantiation(expression, implicitInstantiation.typeArguments)
-            ..fileOffset = expression.fileOffset;
+      if (expression is TypedefTearOff) {
+        Substitution substitution =
+            Substitution.fromPairs(expression.typeParameters, typeArguments);
+        typeArguments =
+            expression.typeArguments.map(substitution.substituteType).toList();
+        expression = expression.expression;
+      } else {
+        LoweredTypedefTearOff? loweredTypedefTearOff =
+            LoweredTypedefTearOff.fromExpression(expression);
+        if (loweredTypedefTearOff != null) {
+          Substitution substitution = Substitution.fromPairs(
+              loweredTypedefTearOff.typedefTearOff.function.typeParameters,
+              typeArguments);
+          typeArguments = loweredTypedefTearOff.typeArguments
+              .map(substitution.substituteType)
+              .toList();
+          expression = loweredTypedefTearOff.targetTearOff;
+        }
+      }
+      expression = new Instantiation(expression, typeArguments)
+        ..fileOffset = expression.fileOffset;
       tearOffType = implicitInstantiation.instantiatedType;
     }
     return new ExpressionInferenceResult(tearOffType, expression);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
index 107b186..ace8876 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.expect
@@ -5,7 +5,7 @@
 typedef B<T extends core::Object? = dynamic> = self::A<T%>;
 typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -14,54 +14,55 @@
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
     return new self::A::•<self::A::redirect::T%>();
 }
-static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-static const field () → self::A<core::int> b = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-static const field () → self::A<core::int> d = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-static const field () → self::A<core::int> f = #C6;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-static const field () → self::A<core::int> h = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-static const field () → self::A<core::int> j = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-static const field () → self::A<core::int> l = #C6;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-static const field () → self::A<core::int> n = #C2;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-static const field () → self::A<core::int> p = #C4;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-static const field () → self::A<core::int> r = #C6;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
 static method test() → dynamic {
-  <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-  () → self::A<core::int> b = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-  () → self::A<core::int> d = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-  () → self::A<core::int> f = #C6;
-  <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-  () → self::A<core::int> h = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-  () → self::A<core::int> j = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-  () → self::A<core::int> l = #C6;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-  () → self::A<core::int> n = #C2;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-  () → self::A<core::int> p = #C4;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-  () → self::A<core::int> r = #C6;
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int>
-  #C3 = static-tearoff self::A::fact
-  #C4 = instantiation self::A::fact <core::int>
-  #C5 = redirecting-factory-tearoff self::A::redirect
-  #C6 = instantiation self::A::redirect <core::int>
-  #C7 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C1<core::int>)
-  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C3<core::int>)
-  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C5<core::int>)
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
index 107b186..ace8876 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 typedef B<T extends core::Object? = dynamic> = self::A<T%>;
 typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -14,54 +14,55 @@
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
     return new self::A::•<self::A::redirect::T%>();
 }
-static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-static const field () → self::A<core::int> b = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-static const field () → self::A<core::int> d = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-static const field () → self::A<core::int> f = #C6;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-static const field () → self::A<core::int> h = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-static const field () → self::A<core::int> j = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-static const field () → self::A<core::int> l = #C6;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-static const field () → self::A<core::int> n = #C2;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-static const field () → self::A<core::int> p = #C4;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-static const field () → self::A<core::int> r = #C6;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
 static method test() → dynamic {
-  <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-  () → self::A<core::int> b = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-  () → self::A<core::int> d = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-  () → self::A<core::int> f = #C6;
-  <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-  () → self::A<core::int> h = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-  () → self::A<core::int> j = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-  () → self::A<core::int> l = #C6;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-  () → self::A<core::int> n = #C2;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-  () → self::A<core::int> p = #C4;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-  () → self::A<core::int> r = #C6;
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int>
-  #C3 = static-tearoff self::A::fact
-  #C4 = instantiation self::A::fact <core::int>
-  #C5 = redirecting-factory-tearoff self::A::redirect
-  #C6 = instantiation self::A::redirect <core::int>
-  #C7 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C1<core::int>)
-  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C3<core::int>)
-  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C5<core::int>)
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
index fad0d55..fc95e6e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.expect
@@ -5,7 +5,7 @@
 typedef B<T extends core::Object? = dynamic> = self::A<T%>;
 typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -14,54 +14,55 @@
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
     return new self::A::•<self::A::redirect::T%>();
 }
-static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-static const field () → self::A<core::int> b = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-static const field () → self::A<core::int> d = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-static const field () → self::A<core::int> f = #C6;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-static const field () → self::A<core::int> h = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-static const field () → self::A<core::int> j = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-static const field () → self::A<core::int> l = #C6;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-static const field () → self::A<core::int> n = #C2;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-static const field () → self::A<core::int> p = #C4;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-static const field () → self::A<core::int> r = #C6;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
 static method test() → dynamic {
-  <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-  () → self::A<core::int> b = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-  () → self::A<core::int> d = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-  () → self::A<core::int> f = #C6;
-  <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-  () → self::A<core::int> h = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-  () → self::A<core::int> j = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-  () → self::A<core::int> l = #C6;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-  () → self::A<core::int> n = #C2;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-  () → self::A<core::int> p = #C4;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-  () → self::A<core::int> r = #C6;
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int*>
-  #C3 = static-tearoff self::A::fact
-  #C4 = instantiation self::A::fact <core::int*>
-  #C5 = redirecting-factory-tearoff self::A::redirect
-  #C6 = instantiation self::A::redirect <core::int*>
-  #C7 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C1<core::int>)
-  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C3<core::int>)
-  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C5<core::int>)
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
index 2e30650..a68155b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.outline.expect
@@ -38,15 +38,16 @@
 
 
 Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
 Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:14:11 -> ConstructorTearOffConstant(A.)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:15:11 -> InstantiationConstant(A.<int*>)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:16:11 -> StaticTearOffConstant(A.fact)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:16:11 -> ConstructorTearOffConstant(A.fact)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:17:11 -> InstantiationConstant(A.fact<int*>)
 Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///const_tear_off.dart:18:11 -> RedirectingFactoryTearOffConstant(A.redirect)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:19:11 -> InstantiationConstant(A.redirect<int*>)
 Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:20:11 -> ConstructorTearOffConstant(A.)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:21:11 -> InstantiationConstant(A.<int*>)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:22:11 -> StaticTearOffConstant(A.fact)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:22:11 -> ConstructorTearOffConstant(A.fact)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:23:11 -> InstantiationConstant(A.fact<int*>)
 Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///const_tear_off.dart:24:11 -> RedirectingFactoryTearOffConstant(A.redirect)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:25:11 -> InstantiationConstant(A.redirect<int*>)
@@ -56,4 +57,4 @@
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:29:11 -> InstantiationConstant(A.fact<int*>)
 Evaluated: TypedefTearOff @ org-dartlang-testcase:///const_tear_off.dart:30:11 -> TypedefTearOffConstant(<T>A.redirect<int>)
 Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:31:11 -> InstantiationConstant(A.redirect<int*>)
-Extra constant evaluation: evaluated: 21, effectively constant: 18
+Extra constant evaluation: evaluated: 21, effectively constant: 19
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
index fad0d55..fc95e6e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 typedef B<T extends core::Object? = dynamic> = self::A<T%>;
 typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -14,54 +14,55 @@
   static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
     return new self::A::•<self::A::redirect::T%>();
 }
-static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-static const field () → self::A<core::int> b = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-static const field () → self::A<core::int> d = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-static const field () → self::A<core::int> f = #C6;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-static const field () → self::A<core::int> h = #C2;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-static const field () → self::A<core::int> j = #C4;
-static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-static const field () → self::A<core::int> l = #C6;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-static const field () → self::A<core::int> n = #C2;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-static const field () → self::A<core::int> p = #C4;
-static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-static const field () → self::A<core::int> r = #C6;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
 static method test() → dynamic {
-  <T extends core::Object? = dynamic>() → self::A<T%> a = #C1;
-  () → self::A<core::int> b = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> c = #C3;
-  () → self::A<core::int> d = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> e = #C5;
-  () → self::A<core::int> f = #C6;
-  <T extends core::Object? = dynamic>() → self::A<T%> g = #C1;
-  () → self::A<core::int> h = #C2;
-  <T extends core::Object? = dynamic>() → self::A<T%> i = #C3;
-  () → self::A<core::int> j = #C4;
-  <T extends core::Object? = dynamic>() → self::A<T%> k = #C5;
-  () → self::A<core::int> l = #C6;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C7;
-  () → self::A<core::int> n = #C2;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C8;
-  () → self::A<core::int> p = #C4;
-  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C9;
-  () → self::A<core::int> r = #C6;
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int*>
-  #C3 = static-tearoff self::A::fact
-  #C4 = instantiation self::A::fact <core::int*>
-  #C5 = redirecting-factory-tearoff self::A::redirect
-  #C6 = instantiation self::A::redirect <core::int*>
-  #C7 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C1<core::int>)
-  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C3<core::int>)
-  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C5<core::int>)
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect
index eb48965..a949112 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.expect
@@ -317,5 +317,5 @@
   #C2 = TypeLiteralConstant(self::Class<dynamic>)
   #C3 = TypeLiteralConstant(core::int)
   #C4 = constructor-tearoff self::Class::named
-  #C5 = instantiation self::Class::named <core::int>
+  #C5 = instantiation #C4 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect
index de6a5ab..1f927ba 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.strong.transformed.expect
@@ -317,5 +317,5 @@
   #C2 = TypeLiteralConstant(self::Class<dynamic>)
   #C3 = TypeLiteralConstant(core::int)
   #C4 = constructor-tearoff self::Class::named
-  #C5 = instantiation self::Class::named <core::int>
+  #C5 = instantiation #C4 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect
index 117593c..25718f4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.expect
@@ -317,5 +317,5 @@
   #C2 = TypeLiteralConstant(self::Class<dynamic>*)
   #C3 = TypeLiteralConstant(core::int*)
   #C4 = constructor-tearoff self::Class::named
-  #C5 = instantiation self::Class::named <core::int*>
+  #C5 = instantiation #C4 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect
index 0f1d41c..682fc04 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.transformed.expect
@@ -317,5 +317,5 @@
   #C2 = TypeLiteralConstant(self::Class<dynamic>*)
   #C3 = TypeLiteralConstant(core::int*)
   #C4 = constructor-tearoff self::Class::named
-  #C5 = instantiation self::Class::named <core::int*>
+  #C5 = instantiation #C4 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
index 03be5de..ab94d94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
@@ -93,11 +93,11 @@
 
 constants  {
   #C1 = static-tearoff self::C::stat
-  #C2 = instantiation self::C::stat <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::M::mstat
-  #C4 = instantiation self::M::mstat <core::int>
+  #C4 = instantiation #C3 <core::int>
   #C5 = static-tearoff self::Ext|estat
-  #C6 = instantiation self::Ext|estat <core::int>
+  #C6 = instantiation #C5 <core::int>
   #C7 = TypeLiteralConstant(core::List<core::int>)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int>>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
index 5b832f3..55e49d3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
@@ -101,11 +101,11 @@
 
 constants  {
   #C1 = static-tearoff self::C::stat
-  #C2 = instantiation self::C::stat <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::M::mstat
-  #C4 = instantiation self::M::mstat <core::int>
+  #C4 = instantiation #C3 <core::int>
   #C5 = static-tearoff self::Ext|estat
-  #C6 = instantiation self::Ext|estat <core::int>
+  #C6 = instantiation #C5 <core::int>
   #C7 = TypeLiteralConstant(core::List<core::int>)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int>>)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
index f9f2d98..63427ae 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
@@ -93,11 +93,11 @@
 
 constants  {
   #C1 = static-tearoff self::C::stat
-  #C2 = instantiation self::C::stat <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::M::mstat
-  #C4 = instantiation self::M::mstat <core::int*>
+  #C4 = instantiation #C3 <core::int*>
   #C5 = static-tearoff self::Ext|estat
-  #C6 = instantiation self::Ext|estat <core::int*>
+  #C6 = instantiation #C5 <core::int*>
   #C7 = TypeLiteralConstant(core::List<core::int*>*)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int*>*>*)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
index c8aedc8..7ee3322 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
@@ -101,11 +101,11 @@
 
 constants  {
   #C1 = static-tearoff self::C::stat
-  #C2 = instantiation self::C::stat <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::M::mstat
-  #C4 = instantiation self::M::mstat <core::int*>
+  #C4 = instantiation #C3 <core::int*>
   #C5 = static-tearoff self::Ext|estat
-  #C6 = instantiation self::Ext|estat <core::int*>
+  #C6 = instantiation #C5 <core::int*>
   #C7 = TypeLiteralConstant(core::List<core::int*>*)
   #C8 = TypeLiteralConstant(core::List<core::List<core::int*>*>*)
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.expect
index 630fe40..1622d94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.expect
@@ -106,7 +106,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::boundedMethod
-  #C4 = instantiation self::boundedMethod <core::String>
+  #C4 = instantiation #C3 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.transformed.expect
index 630fe40..1622d94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.strong.transformed.expect
@@ -106,7 +106,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::boundedMethod
-  #C4 = instantiation self::boundedMethod <core::String>
+  #C4 = instantiation #C3 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.expect
index 2e9d2db..8ed55ac 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.expect
@@ -106,7 +106,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::boundedMethod
-  #C4 = instantiation self::boundedMethod <core::String*>
+  #C4 = instantiation #C3 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.transformed.expect
index 2e9d2db..8ed55ac 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.transformed.expect
@@ -106,7 +106,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::boundedMethod
-  #C4 = instantiation self::boundedMethod <core::String*>
+  #C4 = instantiation #C3 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
index 8954e19..13d3f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.expect
@@ -91,7 +91,7 @@
     ;
 }
 class E4 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::E4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::E4
     : super core::Object::•()
     ;
@@ -99,3 +99,7 @@
     return new self::E4::_();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
index 8954e19..13d3f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.strong.transformed.expect
@@ -91,7 +91,7 @@
     ;
 }
 class E4 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::E4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::E4
     : super core::Object::•()
     ;
@@ -99,3 +99,7 @@
     return new self::E4::_();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
index 8954e19..13d3f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.expect
@@ -91,7 +91,7 @@
     ;
 }
 class E4 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::E4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::E4
     : super core::Object::•()
     ;
@@ -99,3 +99,7 @@
     return new self::E4::_();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
index d7f841c..969f9d2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.outline.expect
@@ -90,3 +90,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///explicit_new_as_unnamed.dart:41:7 -> ConstructorTearOffConstant(E4.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
index 8954e19..13d3f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.transformed.expect
@@ -91,7 +91,7 @@
     ;
 }
 class E4 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::E4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::E4
     : super core::Object::•()
     ;
@@ -99,3 +99,7 @@
     return new self::E4::_();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.expect
index cd74ac1..eb866ee 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.expect
@@ -132,9 +132,9 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int>
-  #C5 = instantiation self::A::foo1 <core::int>
-  #C6 = instantiation self::A::foo2 <core::int>
-  #C7 = static-tearoff self::A::bar1
-  #C8 = instantiation self::A::bar1 <core::int>
+  #C4 = instantiation #C3 <core::int>
+  #C5 = instantiation #C1 <core::int>
+  #C6 = instantiation #C2 <core::int>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.transformed.expect
index cd74ac1..eb866ee 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.strong.transformed.expect
@@ -132,9 +132,9 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int>
-  #C5 = instantiation self::A::foo1 <core::int>
-  #C6 = instantiation self::A::foo2 <core::int>
-  #C7 = static-tearoff self::A::bar1
-  #C8 = instantiation self::A::bar1 <core::int>
+  #C4 = instantiation #C3 <core::int>
+  #C5 = instantiation #C1 <core::int>
+  #C6 = instantiation #C2 <core::int>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.expect
index 40ac9f8..d91a515 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.expect
@@ -132,9 +132,9 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int*>
-  #C5 = instantiation self::A::foo1 <core::int*>
-  #C6 = instantiation self::A::foo2 <core::int*>
-  #C7 = static-tearoff self::A::bar1
-  #C8 = instantiation self::A::bar1 <core::int*>
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = instantiation #C1 <core::int*>
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.transformed.expect
index 40ac9f8..d91a515 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.transformed.expect
@@ -132,9 +132,9 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int*>
-  #C5 = instantiation self::A::foo1 <core::int*>
-  #C6 = instantiation self::A::foo2 <core::int*>
-  #C7 = static-tearoff self::A::bar1
-  #C8 = instantiation self::A::bar1 <core::int*>
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = instantiation #C1 <core::int*>
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.expect
index 8aa8628..3b2be98 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.expect
@@ -94,9 +94,9 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int>
-  #C5 = static-tearoff self::A::bar
-  #C6 = instantiation self::A::bar <core::int>
+  #C4 = instantiation #C3 <core::int>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.transformed.expect
index 8aa8628..3b2be98 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.strong.transformed.expect
@@ -94,9 +94,9 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int>
-  #C5 = static-tearoff self::A::bar
-  #C6 = instantiation self::A::bar <core::int>
+  #C4 = instantiation #C3 <core::int>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.expect
index c49c929..a5cdb82 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.expect
@@ -94,9 +94,9 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int*>
-  #C5 = static-tearoff self::A::bar
-  #C6 = instantiation self::A::bar <core::int*>
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.transformed.expect
index c49c929..a5cdb82 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.transformed.expect
@@ -94,9 +94,9 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = constructor-tearoff self::A::•
-  #C4 = instantiation self::A::• <core::int*>
-  #C5 = static-tearoff self::A::bar
-  #C6 = instantiation self::A::bar <core::int*>
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.expect
index 5edad1d..9d3de3b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.expect
@@ -47,6 +47,6 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
-  #C3 = instantiation self::id <core::String>
+  #C2 = instantiation #C1 <core::int>
+  #C3 = instantiation #C1 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.transformed.expect
index f2e9fea..6058516 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.strong.transformed.expect
@@ -47,8 +47,8 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
-  #C3 = instantiation self::id <core::String>
+  #C2 = instantiation #C1 <core::int>
+  #C3 = instantiation #C1 <core::String>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.expect
index 7061d34..5abed3e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.expect
@@ -47,6 +47,6 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
-  #C3 = instantiation self::id <core::String*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
index 8923c73..f62d68a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
@@ -47,8 +47,8 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
-  #C3 = instantiation self::id <core::String*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.expect
index ce055a4..8fa4479 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.expect
@@ -52,5 +52,5 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int>
+  #C2 = instantiation #C1 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.transformed.expect
index 0f0953f..ca0ea1f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.strong.transformed.expect
@@ -52,7 +52,7 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int>
+  #C2 = instantiation #C1 <core::int>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.expect
index 1121885..5827e2a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.expect
@@ -52,5 +52,5 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.outline.expect
index ab09476..8f1f43b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.outline.expect
@@ -12,13 +12,13 @@
 static final field core::bool inSoundMode;
 static const field () → self::A<core::int> f1a = self::A::•<core::int>;
 static const field () → self::A<core::int> f1b = self::A::•<core::int>;
-static const field () → self::A<core::int> f1c = (<X extends core::num>.(self::A::•<X>))<core::int>;
+static const field () → self::A<core::int> f1c = self::A::•<core::int>;
 static const field () → self::A<core::int> g1a = self::A::•<core::int>;
 static const field () → self::A<core::int> g1b = self::A::•<core::int>;
-static const field () → self::A<core::int> g1c = (<unrelated Y extends core::Object? = dynamic>.(self::A::•<core::int>))<dynamic>;
+static const field () → self::A<core::int> g1c = self::A::•<core::int>;
 static const field () → self::A<core::int> h1a = self::A::•<core::int>;
 static const field () → self::A<core::int> h1b = self::A::•<core::int>;
-static const field () → self::A<core::int> h1c = (<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>.(self::A::•<X%>))<core::int, dynamic>;
+static const field () → self::A<core::int> h1c = self::A::•<core::int>;
 static method main() → dynamic
   ;
 static method test<T extends core::num>() → dynamic
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.transformed.expect
index 74079d8..e64d4e2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.transformed.expect
@@ -52,7 +52,7 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.expect
index 547e506..0d61208 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.expect
@@ -59,15 +59,15 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::num>
-  #C3 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::num>
+  #C3 = instantiation #C1 <core::int>
   #C4 = constructor-tearoff self::A::•
-  #C5 = instantiation self::A::• <core::num>
-  #C6 = instantiation self::A::• <core::int>
-  #C7 = instantiation self::A::foo <core::String>
-  #C8 = instantiation self::A::• <core::String>
-  #C9 = static-tearoff self::A::bar
-  #C10 = instantiation self::A::bar <core::num>
-  #C11 = instantiation self::A::bar <core::int>
-  #C12 = instantiation self::A::bar <core::String>
+  #C5 = instantiation #C4 <core::num>
+  #C6 = instantiation #C4 <core::int>
+  #C7 = instantiation #C1 <core::String>
+  #C8 = instantiation #C4 <core::String>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num>
+  #C11 = instantiation #C9 <core::int>
+  #C12 = instantiation #C9 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.transformed.expect
index 547e506..0d61208 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.strong.transformed.expect
@@ -59,15 +59,15 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::num>
-  #C3 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::num>
+  #C3 = instantiation #C1 <core::int>
   #C4 = constructor-tearoff self::A::•
-  #C5 = instantiation self::A::• <core::num>
-  #C6 = instantiation self::A::• <core::int>
-  #C7 = instantiation self::A::foo <core::String>
-  #C8 = instantiation self::A::• <core::String>
-  #C9 = static-tearoff self::A::bar
-  #C10 = instantiation self::A::bar <core::num>
-  #C11 = instantiation self::A::bar <core::int>
-  #C12 = instantiation self::A::bar <core::String>
+  #C5 = instantiation #C4 <core::num>
+  #C6 = instantiation #C4 <core::int>
+  #C7 = instantiation #C1 <core::String>
+  #C8 = instantiation #C4 <core::String>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num>
+  #C11 = instantiation #C9 <core::int>
+  #C12 = instantiation #C9 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.expect
index 8f0ed57..ba34a7a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.expect
@@ -59,15 +59,15 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::num*>
-  #C3 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::num*>
+  #C3 = instantiation #C1 <core::int*>
   #C4 = constructor-tearoff self::A::•
-  #C5 = instantiation self::A::• <core::num*>
-  #C6 = instantiation self::A::• <core::int*>
-  #C7 = instantiation self::A::foo <core::String*>
-  #C8 = instantiation self::A::• <core::String*>
-  #C9 = static-tearoff self::A::bar
-  #C10 = instantiation self::A::bar <core::num*>
-  #C11 = instantiation self::A::bar <core::int*>
-  #C12 = instantiation self::A::bar <core::String*>
+  #C5 = instantiation #C4 <core::num*>
+  #C6 = instantiation #C4 <core::int*>
+  #C7 = instantiation #C1 <core::String*>
+  #C8 = instantiation #C4 <core::String*>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num*>
+  #C11 = instantiation #C9 <core::int*>
+  #C12 = instantiation #C9 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.transformed.expect
index 8f0ed57..ba34a7a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.transformed.expect
@@ -59,15 +59,15 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::num*>
-  #C3 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::num*>
+  #C3 = instantiation #C1 <core::int*>
   #C4 = constructor-tearoff self::A::•
-  #C5 = instantiation self::A::• <core::num*>
-  #C6 = instantiation self::A::• <core::int*>
-  #C7 = instantiation self::A::foo <core::String*>
-  #C8 = instantiation self::A::• <core::String*>
-  #C9 = static-tearoff self::A::bar
-  #C10 = instantiation self::A::bar <core::num*>
-  #C11 = instantiation self::A::bar <core::int*>
-  #C12 = instantiation self::A::bar <core::String*>
+  #C5 = instantiation #C4 <core::num*>
+  #C6 = instantiation #C4 <core::int*>
+  #C7 = instantiation #C1 <core::String*>
+  #C8 = instantiation #C4 <core::String*>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num*>
+  #C11 = instantiation #C9 <core::int*>
+  #C12 = instantiation #C9 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
index 980e111..99500cc 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.expect
@@ -46,11 +46,11 @@
 constants  {
   #C1 = <core::Symbol, dynamic>{)
   #C2 = constructor-tearoff self::A::named
-  #C3 = instantiation self::A::named <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = static-tearoff self::A::n
-  #C5 = instantiation self::A::n <core::int>
-  #C6 = instantiation self::A::n <core::String>
+  #C5 = instantiation #C4 <core::int>
+  #C6 = instantiation #C4 <core::String>
   #C7 = static-tearoff self::m
-  #C8 = instantiation self::m <core::int>
-  #C9 = instantiation self::m <core::String>
+  #C8 = instantiation #C7 <core::int>
+  #C9 = instantiation #C7 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
index ae6ee29..4e41cb6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.strong.transformed.expect
@@ -46,11 +46,11 @@
 constants  {
   #C1 = <core::Symbol, dynamic>{)
   #C2 = constructor-tearoff self::A::named
-  #C3 = instantiation self::A::named <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = static-tearoff self::A::n
-  #C5 = instantiation self::A::n <core::int>
-  #C6 = instantiation self::A::n <core::String>
+  #C5 = instantiation #C4 <core::int>
+  #C6 = instantiation #C4 <core::String>
   #C7 = static-tearoff self::m
-  #C8 = instantiation self::m <core::int>
-  #C9 = instantiation self::m <core::String>
+  #C8 = instantiation #C7 <core::int>
+  #C9 = instantiation #C7 <core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
index 4ad97c0..ce83852 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.expect
@@ -46,11 +46,11 @@
 constants  {
   #C1 = <core::Symbol*, dynamic>{)
   #C2 = constructor-tearoff self::A::named
-  #C3 = instantiation self::A::named <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = static-tearoff self::A::n
-  #C5 = instantiation self::A::n <core::int*>
-  #C6 = instantiation self::A::n <core::String*>
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = instantiation #C4 <core::String*>
   #C7 = static-tearoff self::m
-  #C8 = instantiation self::m <core::int*>
-  #C9 = instantiation self::m <core::String*>
+  #C8 = instantiation #C7 <core::int*>
+  #C9 = instantiation #C7 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
index 516e952..cd0afe2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.transformed.expect
@@ -46,11 +46,11 @@
 constants  {
   #C1 = <core::Symbol*, dynamic>{)
   #C2 = constructor-tearoff self::A::named
-  #C3 = instantiation self::A::named <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = static-tearoff self::A::n
-  #C5 = instantiation self::A::n <core::int*>
-  #C6 = instantiation self::A::n <core::String*>
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = instantiation #C4 <core::String*>
   #C7 = static-tearoff self::m
-  #C8 = instantiation self::m <core::int*>
-  #C9 = instantiation self::m <core::String*>
+  #C8 = instantiation #C7 <core::int*>
+  #C9 = instantiation #C7 <core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect
index 1d51613..db96e49 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.expect
@@ -20,5 +20,5 @@
 constants  {
   #C1 = null
   #C2 = static-tearoff self::a
-  #C3 = instantiation self::a <core::int, core::String>
+  #C3 = instantiation #C2 <core::int, core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect
index 1d51613..db96e49 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.strong.transformed.expect
@@ -20,5 +20,5 @@
 constants  {
   #C1 = null
   #C2 = static-tearoff self::a
-  #C3 = instantiation self::a <core::int, core::String>
+  #C3 = instantiation #C2 <core::int, core::String>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect
index b1a240e..b032165 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.expect
@@ -20,5 +20,5 @@
 constants  {
   #C1 = null
   #C2 = static-tearoff self::a
-  #C3 = instantiation self::a <core::int*, core::String*>
+  #C3 = instantiation #C2 <core::int*, core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect
index b1a240e..b032165 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.transformed.expect
@@ -20,5 +20,5 @@
 constants  {
   #C1 = null
   #C2 = static-tearoff self::a
-  #C3 = instantiation self::a <core::int*, core::String*>
+  #C3 = instantiation #C2 <core::int*, core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect
index 837ac1a..b2c2a5b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::baz]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::A<self::A::X%>
     : super core::Object::•() {}
   static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
@@ -35,7 +35,6 @@
     return self::A::bar<self::A::baz::X%>();
 }
 static method test() → dynamic {
-  #C1;
   #C2;
   #C3;
   #C4;
@@ -43,6 +42,7 @@
   #C6;
   #C7;
   #C8;
+  #C9;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
 Try removing the type arguments or placing them after the class name.
   List.filled<int>; // Error.
@@ -63,12 +63,13 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff core::List::filled
-  #C2 = constructor-tearoff self::A::foo
-  #C3 = static-tearoff self::A::bar
-  #C4 = redirecting-factory-tearoff self::A::baz
-  #C5 = instantiation core::List::filled <core::int>
-  #C6 = instantiation self::A::foo <core::int>
-  #C7 = instantiation self::A::bar <core::int>
-  #C8 = instantiation self::A::baz <core::int>
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int>
+  #C7 = instantiation #C3 <core::int>
+  #C8 = instantiation #C4 <core::int>
+  #C9 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect
index 837ac1a..b2c2a5b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.strong.transformed.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::baz]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::A<self::A::X%>
     : super core::Object::•() {}
   static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
@@ -35,7 +35,6 @@
     return self::A::bar<self::A::baz::X%>();
 }
 static method test() → dynamic {
-  #C1;
   #C2;
   #C3;
   #C4;
@@ -43,6 +42,7 @@
   #C6;
   #C7;
   #C8;
+  #C9;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
 Try removing the type arguments or placing them after the class name.
   List.filled<int>; // Error.
@@ -63,12 +63,13 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff core::List::filled
-  #C2 = constructor-tearoff self::A::foo
-  #C3 = static-tearoff self::A::bar
-  #C4 = redirecting-factory-tearoff self::A::baz
-  #C5 = instantiation core::List::filled <core::int>
-  #C6 = instantiation self::A::foo <core::int>
-  #C7 = instantiation self::A::bar <core::int>
-  #C8 = instantiation self::A::baz <core::int>
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int>
+  #C7 = instantiation #C3 <core::int>
+  #C8 = instantiation #C4 <core::int>
+  #C9 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect
index 1d39c74..9459fcb 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::baz]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::A<self::A::X%>
     : super core::Object::•() {}
   static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
@@ -35,7 +35,6 @@
     return self::A::bar<self::A::baz::X%>();
 }
 static method test() → dynamic {
-  #C1;
   #C2;
   #C3;
   #C4;
@@ -43,6 +42,7 @@
   #C6;
   #C7;
   #C8;
+  #C9;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
 Try removing the type arguments or placing them after the class name.
   List.filled<int>; // Error.
@@ -63,12 +63,13 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff core::List::filled
-  #C2 = constructor-tearoff self::A::foo
-  #C3 = static-tearoff self::A::bar
-  #C4 = redirecting-factory-tearoff self::A::baz
-  #C5 = instantiation core::List::filled <core::int*>
-  #C6 = instantiation self::A::foo <core::int*>
-  #C7 = instantiation self::A::bar <core::int*>
-  #C8 = instantiation self::A::baz <core::int*>
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = instantiation #C3 <core::int*>
+  #C8 = instantiation #C4 <core::int*>
+  #C9 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect
index e724719..9042de9e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.outline.expect
@@ -15,3 +15,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue46890.dart:5:7 -> ConstructorTearOffConstant(A.baz)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect
index 1d39c74..9459fcb 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::baz]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::A<self::A::X%>
     : super core::Object::•() {}
   static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
@@ -35,7 +35,6 @@
     return self::A::bar<self::A::baz::X%>();
 }
 static method test() → dynamic {
-  #C1;
   #C2;
   #C3;
   #C4;
@@ -43,6 +42,7 @@
   #C6;
   #C7;
   #C8;
+  #C9;
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
 Try removing the type arguments or placing them after the class name.
   List.filled<int>; // Error.
@@ -63,12 +63,13 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff core::List::filled
-  #C2 = constructor-tearoff self::A::foo
-  #C3 = static-tearoff self::A::bar
-  #C4 = redirecting-factory-tearoff self::A::baz
-  #C5 = instantiation core::List::filled <core::int*>
-  #C6 = instantiation self::A::foo <core::int*>
-  #C7 = instantiation self::A::bar <core::int*>
-  #C8 = instantiation self::A::baz <core::int*>
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = instantiation #C3 <core::int*>
+  #C8 = instantiation #C4 <core::int*>
+  #C9 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.expect
index a23b6b4..6057dae 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.expect
@@ -19,7 +19,7 @@
 constants  {
   #C1 = static-tearoff self::id
   #C2 = static-tearoff self::other
-  #C3 = instantiation self::id <core::int>
+  #C3 = instantiation #C1 <core::int>
   #C4 = self::A {x:#C3}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.transformed.expect
index a23b6b4..6057dae 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
 constants  {
   #C1 = static-tearoff self::id
   #C2 = static-tearoff self::other
-  #C3 = instantiation self::id <core::int>
+  #C3 = instantiation #C1 <core::int>
   #C4 = self::A {x:#C3}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.expect
index 55aaf0f..9af80b0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.expect
@@ -19,7 +19,7 @@
 constants  {
   #C1 = static-tearoff self::id
   #C2 = static-tearoff self::other
-  #C3 = instantiation self::id <core::int*>
+  #C3 = instantiation #C1 <core::int*>
   #C4 = self::A {x:#C3}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.transformed.expect
index 55aaf0f..9af80b0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 constants  {
   #C1 = static-tearoff self::id
   #C2 = static-tearoff self::other
-  #C3 = instantiation self::id <core::int*>
+  #C3 = instantiation #C1 <core::int*>
   #C4 = self::A {x:#C3}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.expect
index 41ae260..03e2e51 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.expect
@@ -18,9 +18,9 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::other
-  #C4 = instantiation self::other <core::int>
+  #C4 = instantiation #C3 <core::int>
   #C5 = self::A {x:#C2}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.transformed.expect
index 41ae260..03e2e51 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.strong.transformed.expect
@@ -18,9 +18,9 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int>
+  #C2 = instantiation #C1 <core::int>
   #C3 = static-tearoff self::other
-  #C4 = instantiation self::other <core::int>
+  #C4 = instantiation #C3 <core::int>
   #C5 = self::A {x:#C2}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.expect
index 535ad97..a593732 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.expect
@@ -18,9 +18,9 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::other
-  #C4 = instantiation self::other <core::int*>
+  #C4 = instantiation #C3 <core::int*>
   #C5 = self::A {x:#C2}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.transformed.expect
index 535ad97..a593732 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.transformed.expect
@@ -18,9 +18,9 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::other
-  #C4 = instantiation self::other <core::int*>
+  #C4 = instantiation #C3 <core::int*>
   #C5 = self::A {x:#C2}
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.expect
index f4cf0df..0c4cff4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.expect
@@ -32,7 +32,7 @@
   #C2 = 1
   #C3 = <core::int>[#C2]
   #C4 = self::A<core::int> {x:#C3}
-  #C5 = instantiation self::m <core::String>
+  #C5 = instantiation #C1 <core::String>
   #C6 = self::B<core::String> {f:#C5}
   #C7 = self::C<core::String> {f:#C5}
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.transformed.expect
index f4cf0df..0c4cff4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.strong.transformed.expect
@@ -32,7 +32,7 @@
   #C2 = 1
   #C3 = <core::int>[#C2]
   #C4 = self::A<core::int> {x:#C3}
-  #C5 = instantiation self::m <core::String>
+  #C5 = instantiation #C1 <core::String>
   #C6 = self::B<core::String> {f:#C5}
   #C7 = self::C<core::String> {f:#C5}
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.expect
index 78d6475..691f3a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.expect
@@ -32,7 +32,7 @@
   #C2 = 1
   #C3 = <core::int*>[#C2]
   #C4 = self::A<core::int*> {x:#C3}
-  #C5 = instantiation self::m <core::String*>
+  #C5 = instantiation #C1 <core::String*>
   #C6 = self::B<core::String*> {f:#C5}
   #C7 = self::C<core::String*> {f:#C5}
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.transformed.expect
index 78d6475..691f3a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
   #C2 = 1
   #C3 = <core::int*>[#C2]
   #C4 = self::A<core::int*> {x:#C3}
-  #C5 = instantiation self::m <core::String*>
+  #C5 = instantiation #C1 <core::String*>
   #C6 = self::B<core::String*> {f:#C5}
   #C7 = self::C<core::String*> {f:#C5}
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart
new file mode 100644
index 0000000..91be77e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef MyList<T extends num> = List<T>;
+
+main() {}
+
+test() {
+  const c1 = MyList<num>.filled;
+  const c2 = MyList<num>.filled;
+  const c3 = (MyList.filled)<num>;
+
+  const c4 = identical(c1, c2);
+  const c5 = identical(c1, c3);
+
+  expect(true, c4);
+  expect(false, c5);
+
+  expect(true, identical(c1, c2));
+  expect(false, identical(c1, c3));
+
+  var v1 = MyList<num>.filled;
+  var v2 = MyList<num>.filled;
+  var v3 = (MyList.filled)<num>;
+
+  var v4 = identical(v1, v2);
+  var v5 = identical(v1, v3);
+
+  expect(true, v4);
+  expect(false, v5);
+
+  expect(true, identical(v1, v2));
+  expect(false, identical(v1, v3));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.expect
new file mode 100644
index 0000000..313acc1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.transformed.expect
new file mode 100644
index 0000000..b1acc2d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.strong.transformed.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num>
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:20:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:21:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 32, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline.expect
new file mode 100644
index 0000000..3730164
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+typedef MyList<T extends num> = List<T>;
+main() {}
+test() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..10f9adf
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+expect(expected, actual) {}
+main() {}
+test() {}
+typedef MyList<T extends num> = List<T>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.expect
new file mode 100644
index 0000000..ff4b5b0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.outline.expect
new file mode 100644
index 0000000..88959f9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.outline.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic
+  ;
+static method test() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.transformed.expect
new file mode 100644
index 0000000..285da40f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.transformed.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num*>
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:20:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:21:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 32, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
index c0c195f..df41444 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
@@ -24,7 +24,7 @@
     return new self::Class::•(constants: constants);
 }
 abstract class Const extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory impl() → self::Const
     return new self::_ConstImpl::•<dynamic>();
   static method _#impl#tearOff() → self::Const
@@ -45,6 +45,7 @@
   #C1 = self::_ConstImpl<dynamic> {}
   #C2 = self::_ConstImpl<core::String> {}
   #C3 = <self::Const>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
index c0c195f..df41444 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
     return new self::Class::•(constants: constants);
 }
 abstract class Const extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory impl() → self::Const
     return new self::_ConstImpl::•<dynamic>();
   static method _#impl#tearOff() → self::Const
@@ -45,6 +45,7 @@
   #C1 = self::_ConstImpl<dynamic> {}
   #C2 = self::_ConstImpl<core::String> {}
   #C3 = <self::Const>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
index 94ca00a..38c6a94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
@@ -24,7 +24,7 @@
     return new self::Class::•(constants: constants);
 }
 abstract class Const extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory impl() → self::Const
     return new self::_ConstImpl::•<dynamic>();
   static method _#impl#tearOff() → self::Const
@@ -45,6 +45,7 @@
   #C1 = self::_ConstImpl<dynamic> {}
   #C2 = self::_ConstImpl<core::String*> {}
   #C3 = <self::Const*>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
index f2eca4d..7fffaa8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
@@ -29,3 +29,8 @@
   ;
 static method _#ImplAlias#new#tearOff<T extends core::num>() → self::_ConstImpl<self::_#ImplAlias#new#tearOff::T>
   return new self::_ConstImpl::•<self::_#ImplAlias#new#tearOff::T>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_redirect.dart:21:16 -> ConstructorTearOffConstant(Const.impl)
+Extra constant evaluation: evaluated: 8, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
index 94ca00a..38c6a94 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
     return new self::Class::•(constants: constants);
 }
 abstract class Const extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory impl() → self::Const
     return new self::_ConstImpl::•<dynamic>();
   static method _#impl#tearOff() → self::Const
@@ -45,6 +45,7 @@
   #C1 = self::_ConstImpl<dynamic> {}
   #C2 = self::_ConstImpl<core::String*> {}
   #C3 = <self::Const*>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
index 287832b..992d24b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.expect
@@ -187,7 +187,7 @@
     return new mai::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   constructor named() → mai::Class2
     : super core::Object::•()
     ;
@@ -207,7 +207,7 @@
     return new mai::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/;
   constructor _() → mai::Class4<mai::Class4::T%>
     : super core::Object::•()
     ;
@@ -243,4 +243,6 @@
   #C6 = static-tearoff mai::Class4::_#redirect#tearOff
   #C7 = static-tearoff mai::Class5::_#new#tearOff
   #C8 = false
+  #C9 = constructor-tearoff mai::Class2::redirect
+  #C10 = constructor-tearoff mai::Class4::redirect
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
index bcf1164..4920c00 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.strong.transformed.expect
@@ -187,7 +187,7 @@
     return new mai::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   constructor named() → mai::Class2
     : super core::Object::•()
     ;
@@ -207,7 +207,7 @@
     return new mai::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/;
   constructor _() → mai::Class4<mai::Class4::T%>
     : super core::Object::•()
     ;
@@ -243,4 +243,6 @@
   #C6 = static-tearoff mai::Class4::_#redirect#tearOff
   #C7 = static-tearoff mai::Class5::_#new#tearOff
   #C8 = false
+  #C9 = constructor-tearoff mai::Class2::redirect
+  #C10 = constructor-tearoff mai::Class4::redirect
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
index 287832b..992d24b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.expect
@@ -187,7 +187,7 @@
     return new mai::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   constructor named() → mai::Class2
     : super core::Object::•()
     ;
@@ -207,7 +207,7 @@
     return new mai::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/;
   constructor _() → mai::Class4<mai::Class4::T%>
     : super core::Object::•()
     ;
@@ -243,4 +243,6 @@
   #C6 = static-tearoff mai::Class4::_#redirect#tearOff
   #C7 = static-tearoff mai::Class5::_#new#tearOff
   #C8 = false
+  #C9 = constructor-tearoff mai::Class2::redirect
+  #C10 = constructor-tearoff mai::Class4::redirect
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
index f714802..e737b01 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
@@ -23,7 +23,7 @@
     return new self2::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor named() → self2::Class2
     ;
   static method _#named#tearOff() → self2::Class2
@@ -41,7 +41,7 @@
     return new self2::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self2::Class4<self2::Class4::T%>
     ;
   static method _#_#tearOff<T extends core::Object? = dynamic>() → self2::Class4<self2::Class4::_#_#tearOff::T%>
@@ -65,3 +65,8 @@
   static method _#new#tearOff<T extends core::num>() → self2::Class5<self2::Class5::_#new#tearOff::T>
     return self2::Class5::•<self2::Class5::_#new#tearOff::T>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self2::Class2::redirect
+  #C2 = constructor-tearoff self2::Class4::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
index bcf1164..4920c00 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.transformed.expect
@@ -187,7 +187,7 @@
     return new mai::Class1::•();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class2::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   constructor named() → mai::Class2
     : super core::Object::•()
     ;
@@ -207,7 +207,7 @@
     return new mai::Class3::•(field);
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::Class4::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/;
   constructor _() → mai::Class4<mai::Class4::T%>
     : super core::Object::•()
     ;
@@ -243,4 +243,6 @@
   #C6 = static-tearoff mai::Class4::_#redirect#tearOff
   #C7 = static-tearoff mai::Class5::_#new#tearOff
   #C8 = false
+  #C9 = constructor-tearoff mai::Class2::redirect
+  #C10 = constructor-tearoff mai::Class4::redirect
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
index 31fe515..81c7cd2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.expect
@@ -35,7 +35,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1<self::Class1::T%>
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
 class Class2<T extends core::num> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self::Class2<self::Class2::T>
     : super core::Object::•()
     ;
@@ -59,7 +59,7 @@
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
 class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
     : super core::Object::•()
     ;
@@ -71,7 +71,7 @@
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
 class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   constructor _() → self::Class4<self::Class4::T>
     : super core::Object::•()
     ;
@@ -83,7 +83,7 @@
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
 class Class4int extends self::Class4<self::Class4int> {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4int::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   constructor _() → self::Class4int
     : super self::Class4::_()
     ;
@@ -101,7 +101,7 @@
   self::testBounded();
 }
 static method testGeneric() → dynamic {
-  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
   self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
@@ -122,14 +122,14 @@
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
-  dynamic f1c = #C1;
+  dynamic f1c = #C6;
   dynamic c1d = f1c{dynamic}.call();
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
   self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
 }
 static method testBounded() → dynamic {
-  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
   self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -142,7 +142,7 @@
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
-  dynamic f2b = #C2;
+  dynamic f2b = #C7;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -151,7 +151,7 @@
   self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
   self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
   self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
-  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
   self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
   self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -161,7 +161,7 @@
   () → Null {
     f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
   };
-  dynamic f3b = #C3;
+  dynamic f3b = #C8;
   dynamic c3c = f3b{dynamic}.call();
   self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -169,11 +169,11 @@
   self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
   self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
   self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
-  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
   () → Null {
     self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
   };
-  dynamic f4b = #C4;
+  dynamic f4b = #C9;
   self::throws(() → dynamic => f4b{dynamic}.call());
   dynamic c4b = f4b{dynamic}.call<self::Class4int>();
   self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
@@ -182,7 +182,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -197,9 +197,14 @@
 }
 
 constants  {
-  #C1 = static-tearoff self::Class1::_#new#tearOff
-  #C2 = static-tearoff self::Class2::_#new#tearOff
-  #C3 = static-tearoff self::Class3::_#new#tearOff
-  #C4 = static-tearoff self::Class4::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
index 2b61e14..2a37cef 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -35,7 +35,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1<self::Class1::T%>
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
 class Class2<T extends core::num> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self::Class2<self::Class2::T>
     : super core::Object::•()
     ;
@@ -59,7 +59,7 @@
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
 class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
     : super core::Object::•()
     ;
@@ -71,7 +71,7 @@
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
 class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   constructor _() → self::Class4<self::Class4::T>
     : super core::Object::•()
     ;
@@ -83,7 +83,7 @@
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
 class Class4int extends self::Class4<self::Class4int> {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4int::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   constructor _() → self::Class4int
     : super self::Class4::_()
     ;
@@ -101,7 +101,7 @@
   self::testBounded();
 }
 static method testGeneric() → dynamic {
-  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
   self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
@@ -122,14 +122,14 @@
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
-  dynamic f1c = #C1;
+  dynamic f1c = #C6;
   dynamic c1d = f1c{dynamic}.call();
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
   self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
 }
 static method testBounded() → dynamic {
-  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
   self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -142,7 +142,7 @@
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
-  dynamic f2b = #C2;
+  dynamic f2b = #C7;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -151,7 +151,7 @@
   self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
   self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
   self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
-  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
   self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
   self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -161,7 +161,7 @@
   () → Null {
     f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
   };
-  dynamic f3b = #C3;
+  dynamic f3b = #C8;
   dynamic c3c = f3b{dynamic}.call();
   self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -169,11 +169,11 @@
   self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
   self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
   self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
-  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
   () → Null {
     self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
   };
-  dynamic f4b = #C4;
+  dynamic f4b = #C9;
   self::throws(() → dynamic => f4b{dynamic}.call());
   dynamic c4b = f4b{dynamic}.call<self::Class4int>();
   self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
@@ -182,7 +182,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -197,9 +197,14 @@
 }
 
 constants  {
-  #C1 = static-tearoff self::Class1::_#new#tearOff
-  #C2 = static-tearoff self::Class2::_#new#tearOff
-  #C3 = static-tearoff self::Class3::_#new#tearOff
-  #C4 = static-tearoff self::Class4::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
index 31fe515..81c7cd2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.expect
@@ -35,7 +35,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1<self::Class1::T%>
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
 class Class2<T extends core::num> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self::Class2<self::Class2::T>
     : super core::Object::•()
     ;
@@ -59,7 +59,7 @@
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
 class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
     : super core::Object::•()
     ;
@@ -71,7 +71,7 @@
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
 class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   constructor _() → self::Class4<self::Class4::T>
     : super core::Object::•()
     ;
@@ -83,7 +83,7 @@
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
 class Class4int extends self::Class4<self::Class4int> {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4int::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   constructor _() → self::Class4int
     : super self::Class4::_()
     ;
@@ -101,7 +101,7 @@
   self::testBounded();
 }
 static method testGeneric() → dynamic {
-  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
   self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
@@ -122,14 +122,14 @@
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
-  dynamic f1c = #C1;
+  dynamic f1c = #C6;
   dynamic c1d = f1c{dynamic}.call();
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
   self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
 }
 static method testBounded() → dynamic {
-  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
   self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -142,7 +142,7 @@
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
-  dynamic f2b = #C2;
+  dynamic f2b = #C7;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -151,7 +151,7 @@
   self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
   self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
   self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
-  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
   self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
   self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -161,7 +161,7 @@
   () → Null {
     f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
   };
-  dynamic f3b = #C3;
+  dynamic f3b = #C8;
   dynamic c3c = f3b{dynamic}.call();
   self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -169,11 +169,11 @@
   self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
   self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
   self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
-  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
   () → Null {
     self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
   };
-  dynamic f4b = #C4;
+  dynamic f4b = #C9;
   self::throws(() → dynamic => f4b{dynamic}.call());
   dynamic c4b = f4b{dynamic}.call<self::Class4int>();
   self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
@@ -182,7 +182,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -197,9 +197,14 @@
 }
 
 constants  {
-  #C1 = static-tearoff self::Class1::_#new#tearOff
-  #C2 = static-tearoff self::Class2::_#new#tearOff
-  #C3 = static-tearoff self::Class3::_#new#tearOff
-  #C4 = static-tearoff self::Class4::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
index f1a60c8..eaa086d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
@@ -68,3 +68,12 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:13:7 -> ConstructorTearOffConstant(Class1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:45:7 -> ConstructorTearOffConstant(Class2.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:50:7 -> ConstructorTearOffConstant(Class3.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:55:7 -> ConstructorTearOffConstant(Class4.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_redirecting_factory_tear_off.dart:60:7 -> ConstructorTearOffConstant(Class4int.)
+Extra constant evaluation: evaluated: 25, effectively constant: 5
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
index 2b61e14..2a37cef 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1<self::Class1::T%>
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
 }
 class Class2<T extends core::num> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor _() → self::Class2<self::Class2::T>
     : super core::Object::•()
     ;
@@ -59,7 +59,7 @@
     return new self::Class2::_<self::Class2::_#new#tearOff::T>();
 }
 class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
     : super core::Object::•()
     ;
@@ -71,7 +71,7 @@
     return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
 }
 class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   constructor _() → self::Class4<self::Class4::T>
     : super core::Object::•()
     ;
@@ -83,7 +83,7 @@
     return new self::Class4::_<self::Class4::_#new#tearOff::T>();
 }
 class Class4int extends self::Class4<self::Class4int> {
-  static final field dynamic _redirecting# = <dynamic>[self::Class4int::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   constructor _() → self::Class4int
     : super self::Class4::_()
     ;
@@ -101,7 +101,7 @@
   self::testBounded();
 }
 static method testGeneric() → dynamic {
-  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
   self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
@@ -122,14 +122,14 @@
     f1b<int>(); // error
        ^" in f1b{<inapplicable>}.<core::int>();
   };
-  dynamic f1c = #C1;
+  dynamic f1c = #C6;
   dynamic c1d = f1c{dynamic}.call();
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
   self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
   self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
 }
 static method testBounded() → dynamic {
-  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
   self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -142,7 +142,7 @@
     f2a<int, String>(); // error
        ^" in f2a{<inapplicable>}.<core::int, core::String>();
   };
-  dynamic f2b = #C2;
+  dynamic f2b = #C7;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
   self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
@@ -151,7 +151,7 @@
   self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
   self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
   self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
-  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
   self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
   self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -161,7 +161,7 @@
   () → Null {
     f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
   };
-  dynamic f3b = #C3;
+  dynamic f3b = #C8;
   dynamic c3c = f3b{dynamic}.call();
   self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
   self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
@@ -169,11 +169,11 @@
   self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
   self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
   self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
-  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
   () → Null {
     self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
   };
-  dynamic f4b = #C4;
+  dynamic f4b = #C9;
   self::throws(() → dynamic => f4b{dynamic}.call());
   dynamic c4b = f4b{dynamic}.call<self::Class4int>();
   self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
@@ -182,7 +182,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -197,9 +197,14 @@
 }
 
 constants  {
-  #C1 = static-tearoff self::Class1::_#new#tearOff
-  #C2 = static-tearoff self::Class2::_#new#tearOff
-  #C3 = static-tearoff self::Class3::_#new#tearOff
-  #C4 = static-tearoff self::Class4::_#new#tearOff
-  #C5 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
index abfa7c0..66ac229 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.expect
@@ -6,7 +6,7 @@
 typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
 typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -22,51 +22,51 @@
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
-static const field () → self::A<core::int> f1a = #C2;
-static const field () → self::A<core::int> f1b = #C2;
-static const field () → self::A<core::int> f1c = #C2;
-static const field () → self::A<core::int> f1d = #C4;
-static const field () → self::A<core::int> f1e = #C4;
-static const field () → self::A<core::int> f1f = #C4;
-static const field () → self::A<core::int> f1g = #C6;
-static const field () → self::A<core::int> f1h = #C6;
-static const field () → self::A<core::int> f1i = #C6;
-static const field () → self::A<core::int> g1a = #C2;
-static const field () → self::A<core::int> g1b = #C2;
-static const field () → self::A<core::int> g1c = #C2;
-static const field () → self::A<core::int> h1a = #C2;
-static const field () → self::A<core::int> h1b = #C2;
-static const field () → self::A<core::int> h1c = #C2;
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
 static method main() → dynamic {
   self::test<core::int>();
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C4, #C4);
-  core::identical(#C4, #C4);
-  core::identical(#C6, #C6);
-  core::identical(#C6, #C6);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
 }
 static method test<T extends core::num>() → dynamic {
-  () → self::A<self::test::T> f2a = #C1<self::test::T>;
-  () → self::A<self::test::T> f2b = #C1<self::test::T>;
-  () → self::A<self::test::T> f2c = #C1<self::test::T>;
-  () → self::A<self::test::T> f2d = #C3<self::test::T>;
-  () → self::A<self::test::T> f2e = #C3<self::test::T>;
-  () → self::A<self::test::T> f2f = #C3<self::test::T>;
-  () → self::A<self::test::T> f2g = #C5<self::test::T>;
-  () → self::A<self::test::T> f2h = #C5<self::test::T>;
-  () → self::A<self::test::T> f2i = #C5<self::test::T>;
-  () → self::A<core::int> g2a = #C2;
-  () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C2;
-  () → self::A<self::test::T> h2a = #C1<self::test::T>;
-  () → self::A<self::test::T> h2b = #C1<self::test::T>;
-  () → self::A<self::test::T> h2c = #C1<self::test::T>;
-  self::expect(#C2, g2a);
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
   self::expect(g2a, g2b);
   if(self::inSoundMode) {
     self::expect(g2a, g2c);
@@ -96,10 +96,11 @@
   return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
 
 constants  {
-  #C1 = static-tearoff self::A::_#new#tearOff
-  #C2 = instantiation self::A::_#new#tearOff <core::int>
-  #C3 = static-tearoff self::A::_#fact#tearOff
-  #C4 = instantiation self::A::_#fact#tearOff <core::int>
-  #C5 = static-tearoff self::A::_#redirect#tearOff
-  #C6 = instantiation self::A::_#redirect#tearOff <core::int>
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
index e5c1801..6d90c84 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
 typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
 typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -22,51 +22,51 @@
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
-static const field () → self::A<core::int> f1a = #C2;
-static const field () → self::A<core::int> f1b = #C2;
-static const field () → self::A<core::int> f1c = #C2;
-static const field () → self::A<core::int> f1d = #C4;
-static const field () → self::A<core::int> f1e = #C4;
-static const field () → self::A<core::int> f1f = #C4;
-static const field () → self::A<core::int> f1g = #C6;
-static const field () → self::A<core::int> f1h = #C6;
-static const field () → self::A<core::int> f1i = #C6;
-static const field () → self::A<core::int> g1a = #C2;
-static const field () → self::A<core::int> g1b = #C2;
-static const field () → self::A<core::int> g1c = #C2;
-static const field () → self::A<core::int> h1a = #C2;
-static const field () → self::A<core::int> h1b = #C2;
-static const field () → self::A<core::int> h1c = #C2;
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
 static method main() → dynamic {
   self::test<core::int>();
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C4, #C4);
-  core::identical(#C4, #C4);
-  core::identical(#C6, #C6);
-  core::identical(#C6, #C6);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
 }
 static method test<T extends core::num>() → dynamic {
-  () → self::A<self::test::T> f2a = #C1<self::test::T>;
-  () → self::A<self::test::T> f2b = #C1<self::test::T>;
-  () → self::A<self::test::T> f2c = #C1<self::test::T>;
-  () → self::A<self::test::T> f2d = #C3<self::test::T>;
-  () → self::A<self::test::T> f2e = #C3<self::test::T>;
-  () → self::A<self::test::T> f2f = #C3<self::test::T>;
-  () → self::A<self::test::T> f2g = #C5<self::test::T>;
-  () → self::A<self::test::T> f2h = #C5<self::test::T>;
-  () → self::A<self::test::T> f2i = #C5<self::test::T>;
-  () → self::A<core::int> g2a = #C2;
-  () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C2;
-  () → self::A<self::test::T> h2a = #C1<self::test::T>;
-  () → self::A<self::test::T> h2b = #C1<self::test::T>;
-  () → self::A<self::test::T> h2c = #C1<self::test::T>;
-  self::expect(#C2, g2a);
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
   self::expect(g2a, g2b);
   if(self::inSoundMode) {
     self::expect(g2a, g2c);
@@ -96,12 +96,13 @@
   return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
 
 constants  {
-  #C1 = static-tearoff self::A::_#new#tearOff
-  #C2 = instantiation self::A::_#new#tearOff <core::int>
-  #C3 = static-tearoff self::A::_#fact#tearOff
-  #C4 = instantiation self::A::_#fact#tearOff <core::int>
-  #C5 = static-tearoff self::A::_#redirect#tearOff
-  #C6 = instantiation self::A::_#redirect#tearOff <core::int>
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int>
 }
 
 Extra constant evaluation status:
@@ -115,4 +116,4 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:48:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:50:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:51:3 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 59, effectively constant: 10
+Extra constant evaluation: evaluated: 58, effectively constant: 10
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
index 942bbe6..6075c15 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.expect
@@ -6,7 +6,7 @@
 typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
 typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -22,51 +22,51 @@
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
-static const field () → self::A<core::int> f1a = #C2;
-static const field () → self::A<core::int> f1b = #C2;
-static const field () → self::A<core::int> f1c = #C2;
-static const field () → self::A<core::int> f1d = #C4;
-static const field () → self::A<core::int> f1e = #C4;
-static const field () → self::A<core::int> f1f = #C4;
-static const field () → self::A<core::int> f1g = #C6;
-static const field () → self::A<core::int> f1h = #C6;
-static const field () → self::A<core::int> f1i = #C6;
-static const field () → self::A<core::int> g1a = #C2;
-static const field () → self::A<core::int> g1b = #C2;
-static const field () → self::A<core::int> g1c = #C2;
-static const field () → self::A<core::int> h1a = #C2;
-static const field () → self::A<core::int> h1b = #C2;
-static const field () → self::A<core::int> h1c = #C2;
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
 static method main() → dynamic {
   self::test<core::int>();
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C4, #C4);
-  core::identical(#C4, #C4);
-  core::identical(#C6, #C6);
-  core::identical(#C6, #C6);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
 }
 static method test<T extends core::num>() → dynamic {
-  () → self::A<self::test::T> f2a = #C1<self::test::T>;
-  () → self::A<self::test::T> f2b = #C1<self::test::T>;
-  () → self::A<self::test::T> f2c = #C1<self::test::T>;
-  () → self::A<self::test::T> f2d = #C3<self::test::T>;
-  () → self::A<self::test::T> f2e = #C3<self::test::T>;
-  () → self::A<self::test::T> f2f = #C3<self::test::T>;
-  () → self::A<self::test::T> f2g = #C5<self::test::T>;
-  () → self::A<self::test::T> f2h = #C5<self::test::T>;
-  () → self::A<self::test::T> f2i = #C5<self::test::T>;
-  () → self::A<core::int> g2a = #C2;
-  () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C2;
-  () → self::A<self::test::T> h2a = #C1<self::test::T>;
-  () → self::A<self::test::T> h2b = #C1<self::test::T>;
-  () → self::A<self::test::T> h2c = #C1<self::test::T>;
-  self::expect(#C2, g2a);
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
   self::expect(g2a, g2b);
   if(self::inSoundMode) {
     self::expect(g2a, g2c);
@@ -96,10 +96,11 @@
   return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
 
 constants  {
-  #C1 = static-tearoff self::A::_#new#tearOff
-  #C2 = instantiation self::A::_#new#tearOff <core::int*>
-  #C3 = static-tearoff self::A::_#fact#tearOff
-  #C4 = instantiation self::A::_#fact#tearOff <core::int*>
-  #C5 = static-tearoff self::A::_#redirect#tearOff
-  #C6 = instantiation self::A::_#redirect#tearOff <core::int*>
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
index feba408..1d3da75 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.outline.expect
@@ -23,19 +23,19 @@
 static final field core::bool inSoundMode;
 static const field () → self::A<core::int> f1a = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> f1b = self::A::_#new#tearOff<core::int>;
-static const field () → self::A<core::int> f1c = self::_#F#new#tearOff<core::int>;
+static const field () → self::A<core::int> f1c = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> f1d = self::A::_#fact#tearOff<core::int>;
 static const field () → self::A<core::int> f1e = self::A::_#fact#tearOff<core::int>;
-static const field () → self::A<core::int> f1f = self::_#F#fact#tearOff<core::int>;
+static const field () → self::A<core::int> f1f = self::A::_#fact#tearOff<core::int>;
 static const field () → self::A<core::int> f1g = self::A::_#redirect#tearOff<core::int>;
 static const field () → self::A<core::int> f1h = self::A::_#redirect#tearOff<core::int>;
-static const field () → self::A<core::int> f1i = self::_#F#redirect#tearOff<core::int>;
+static const field () → self::A<core::int> f1i = self::A::_#redirect#tearOff<core::int>;
 static const field () → self::A<core::int> g1a = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> g1b = self::A::_#new#tearOff<core::int>;
-static const field () → self::A<core::int> g1c = self::_#G#new#tearOff<dynamic>;
+static const field () → self::A<core::int> g1c = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> h1a = self::A::_#new#tearOff<core::int>;
 static const field () → self::A<core::int> h1b = self::A::_#new#tearOff<core::int>;
-static const field () → self::A<core::int> h1c = self::_#H#new#tearOff<core::int, dynamic>;
+static const field () → self::A<core::int> h1c = self::A::_#new#tearOff<core::int>;
 static method main() → dynamic
   ;
 static method test<T extends core::num>() → dynamic
@@ -63,19 +63,20 @@
 
 
 Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///inferred_non_proper_rename.dart:7:7 -> ConstructorTearOffConstant(A.redirect)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:17:13 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:18:13 -> InstantiationConstant(A._#new#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:19:31 -> InstantiationConstant(A._#new#tearOff<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:19:25 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:20:13 -> InstantiationConstant(A._#fact#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:21:13 -> InstantiationConstant(A._#fact#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:22:31 -> InstantiationConstant(A._#fact#tearOff<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:22:25 -> InstantiationConstant(A._#fact#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:23:13 -> InstantiationConstant(A._#redirect#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:24:13 -> InstantiationConstant(A._#redirect#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:25:31 -> InstantiationConstant(A._#redirect#tearOff<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:25:25 -> InstantiationConstant(A._#redirect#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:27:13 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:28:13 -> InstantiationConstant(A._#new#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:29:31 -> InstantiationConstant(A._#new#tearOff<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:29:25 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:31:13 -> InstantiationConstant(A._#new#tearOff<int*>)
 Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:32:13 -> InstantiationConstant(A._#new#tearOff<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:33:31 -> InstantiationConstant(A._#new#tearOff<int*>)
-Extra constant evaluation: evaluated: 30, effectively constant: 15
+Evaluated: Instantiation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:33:25 -> InstantiationConstant(A._#new#tearOff<int*>)
+Extra constant evaluation: evaluated: 30, effectively constant: 16
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
index 3d86e63..f1ac2a0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
 typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -22,51 +22,51 @@
     return new self::A::•<self::A::_#redirect#tearOff::T%>();
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
-static const field () → self::A<core::int> f1a = #C2;
-static const field () → self::A<core::int> f1b = #C2;
-static const field () → self::A<core::int> f1c = #C2;
-static const field () → self::A<core::int> f1d = #C4;
-static const field () → self::A<core::int> f1e = #C4;
-static const field () → self::A<core::int> f1f = #C4;
-static const field () → self::A<core::int> f1g = #C6;
-static const field () → self::A<core::int> f1h = #C6;
-static const field () → self::A<core::int> f1i = #C6;
-static const field () → self::A<core::int> g1a = #C2;
-static const field () → self::A<core::int> g1b = #C2;
-static const field () → self::A<core::int> g1c = #C2;
-static const field () → self::A<core::int> h1a = #C2;
-static const field () → self::A<core::int> h1b = #C2;
-static const field () → self::A<core::int> h1c = #C2;
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
 static method main() → dynamic {
   self::test<core::int>();
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C4, #C4);
-  core::identical(#C4, #C4);
-  core::identical(#C6, #C6);
-  core::identical(#C6, #C6);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
-  core::identical(#C2, #C2);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
 }
 static method test<T extends core::num>() → dynamic {
-  () → self::A<self::test::T> f2a = #C1<self::test::T>;
-  () → self::A<self::test::T> f2b = #C1<self::test::T>;
-  () → self::A<self::test::T> f2c = #C1<self::test::T>;
-  () → self::A<self::test::T> f2d = #C3<self::test::T>;
-  () → self::A<self::test::T> f2e = #C3<self::test::T>;
-  () → self::A<self::test::T> f2f = #C3<self::test::T>;
-  () → self::A<self::test::T> f2g = #C5<self::test::T>;
-  () → self::A<self::test::T> f2h = #C5<self::test::T>;
-  () → self::A<self::test::T> f2i = #C5<self::test::T>;
-  () → self::A<core::int> g2a = #C2;
-  () → self::A<core::int> g2b = #C2;
-  () → self::A<core::int> g2c = #C2;
-  () → self::A<self::test::T> h2a = #C1<self::test::T>;
-  () → self::A<self::test::T> h2b = #C1<self::test::T>;
-  () → self::A<self::test::T> h2c = #C1<self::test::T>;
-  self::expect(#C2, g2a);
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
   self::expect(g2a, g2b);
   if(self::inSoundMode) {
     self::expect(g2a, g2c);
@@ -96,12 +96,13 @@
   return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
 
 constants  {
-  #C1 = static-tearoff self::A::_#new#tearOff
-  #C2 = instantiation self::A::_#new#tearOff <core::int*>
-  #C3 = static-tearoff self::A::_#fact#tearOff
-  #C4 = instantiation self::A::_#fact#tearOff <core::int*>
-  #C5 = static-tearoff self::A::_#redirect#tearOff
-  #C6 = instantiation self::A::_#redirect#tearOff <core::int*>
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int*>
 }
 
 Extra constant evaluation status:
@@ -115,4 +116,4 @@
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:48:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:50:3 -> BoolConstant(true)
 Evaluated: StaticInvocation @ org-dartlang-testcase:///inferred_non_proper_rename.dart:51:3 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 59, effectively constant: 10
+Extra constant evaluation: evaluated: 58, effectively constant: 10
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
index 254bc55..ddcf3b9 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
@@ -56,7 +56,7 @@
   #C4 = static-tearoff self::_#G#new#tearOff
   #C5 = static-tearoff self::A::_#named#tearOff
   #C6 = static-tearoff self::B::_#named#tearOff
-  #C7 = instantiation self::B::_#named#tearOff <core::int>
+  #C7 = instantiation #C6 <core::int>
   #C8 = static-tearoff self::_#F#named#tearOff
-  #C9 = instantiation self::B::_#named#tearOff <dynamic>
+  #C9 = instantiation #C6 <dynamic>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
index 254bc55..ddcf3b9 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
   #C4 = static-tearoff self::_#G#new#tearOff
   #C5 = static-tearoff self::A::_#named#tearOff
   #C6 = static-tearoff self::B::_#named#tearOff
-  #C7 = instantiation self::B::_#named#tearOff <core::int>
+  #C7 = instantiation #C6 <core::int>
   #C8 = static-tearoff self::_#F#named#tearOff
-  #C9 = instantiation self::B::_#named#tearOff <dynamic>
+  #C9 = instantiation #C6 <dynamic>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
index b80b9d5..3414686 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
@@ -56,7 +56,7 @@
   #C4 = static-tearoff self::_#G#new#tearOff
   #C5 = static-tearoff self::A::_#named#tearOff
   #C6 = static-tearoff self::B::_#named#tearOff
-  #C7 = instantiation self::B::_#named#tearOff <core::int*>
+  #C7 = instantiation #C6 <core::int*>
   #C8 = static-tearoff self::_#F#named#tearOff
-  #C9 = instantiation self::B::_#named#tearOff <dynamic>
+  #C9 = instantiation #C6 <dynamic>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
index b80b9d5..3414686 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
@@ -56,7 +56,7 @@
   #C4 = static-tearoff self::_#G#new#tearOff
   #C5 = static-tearoff self::A::_#named#tearOff
   #C6 = static-tearoff self::B::_#named#tearOff
-  #C7 = instantiation self::B::_#named#tearOff <core::int*>
+  #C7 = instantiation #C6 <core::int*>
   #C8 = static-tearoff self::_#F#named#tearOff
-  #C9 = instantiation self::B::_#named#tearOff <dynamic>
+  #C9 = instantiation #C6 <dynamic>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart
new file mode 100644
index 0000000..17b9e38
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef MyList<T extends num> = List<T>;
+
+main() {
+  const c1 = MyList<num>.filled;
+  const c2 = MyList<num>.filled;
+  const c3 = (MyList.filled)<num>;
+
+  const c4 = identical(c1, c2);
+  const c5 = identical(c1, c3);
+
+  expect(true, c4);
+  expect(false, c5);
+
+  expect(true, identical(c1, c2));
+  expect(false, identical(c1, c3));
+
+  var v1 = MyList<num>.filled;
+  var v2 = MyList<num>.filled;
+  var v3 = (MyList.filled)<num>;
+
+  var v4 = identical(v1, v2);
+  var v5 = identical(v1, v3);
+
+  expect(true, v4);
+  expect(false, v5);
+
+  expect(true, identical(v1, v2));
+  expect(false, identical(v1, v3));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.expect
new file mode 100644
index 0000000..672dbca
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num>
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.transformed.expect
new file mode 100644
index 0000000..36b8a3e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.strong.transformed.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::_List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num>
+  #C7 = null
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:18:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:19:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 52, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline.expect
new file mode 100644
index 0000000..f4c644d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+typedef MyList<T extends num> = List<T>;
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f083298
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+expect(expected, actual) {}
+main() {}
+typedef MyList<T extends num> = List<T>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.expect
new file mode 100644
index 0000000..2a6bd0b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect
new file mode 100644
index 0000000..b89a67b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.transformed.expect
new file mode 100644
index 0000000..9e2f5a1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.transformed.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::_List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:18:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:19:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 52, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect
index 1970258..309b5f6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.expect
@@ -47,7 +47,7 @@
 
 typedef B<T extends core::num> = self::A<T>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -110,3 +110,7 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect
index 1970258..309b5f6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
 
 typedef B<T extends core::num> = self::A<T>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -110,3 +110,7 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect
index 1970258..309b5f6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.expect
@@ -47,7 +47,7 @@
 
 typedef B<T extends core::num> = self::A<T>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -110,3 +110,7 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect
index ae23513..cfe8fea 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.outline.expect
@@ -34,3 +34,8 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///misplaced_type_arguments.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
+Extra constant evaluation: evaluated: 11, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect
index 1970258..309b5f6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.transformed.expect
@@ -47,7 +47,7 @@
 
 typedef B<T extends core::num> = self::A<T>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
@@ -110,3 +110,7 @@
   return self::A::fact<self::_#B#fact#tearOff::T>();
 static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
   return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
index cd54bc8..f19d273 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.expect
@@ -15,7 +15,7 @@
 
 class Class extends core::Object {
   static field () → self::Class field = () → self::Class => new self::Class::_();
-  static final field dynamic _redirecting# = <dynamic>[self::Class::a, self::Class::b]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor _() → self::Class
     : super core::Object::•()
     ;
@@ -35,3 +35,8 @@
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
index cd54bc8..f19d273 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
 
 class Class extends core::Object {
   static field () → self::Class field = () → self::Class => new self::Class::_();
-  static final field dynamic _redirecting# = <dynamic>[self::Class::a, self::Class::b]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor _() → self::Class
     : super core::Object::•()
     ;
@@ -35,3 +35,8 @@
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
index cd54bc8..f19d273 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.expect
@@ -15,7 +15,7 @@
 
 class Class extends core::Object {
   static field () → self::Class field = () → self::Class => new self::Class::_();
-  static final field dynamic _redirecting# = <dynamic>[self::Class::a, self::Class::b]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor _() → self::Class
     : super core::Object::•()
     ;
@@ -35,3 +35,8 @@
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
index 173ec34..bc12784 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.outline.expect
@@ -35,3 +35,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///missing_redirecting_target.dart:5:7 -> ConstructorTearOffConstant(Class.a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///missing_redirecting_target.dart:5:7 -> ConstructorTearOffConstant(Class.b)
+Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
index cd54bc8..f19d273 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
 
 class Class extends core::Object {
   static field () → self::Class field = () → self::Class => new self::Class::_();
-  static final field dynamic _redirecting# = <dynamic>[self::Class::a, self::Class::b]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor _() → self::Class
     : super core::Object::•()
     ;
@@ -35,3 +35,8 @@
   static method _#b#tearOff() → self::Class;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
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 168005c..4acef90 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
@@ -41,8 +41,8 @@
 }
 class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
   field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
     ;
   constructor named(core::int field) → self::Class<self::Class::T%>
@@ -51,7 +51,7 @@
   constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
     : this self::Class::•(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C1]) → self::Class<self::Class::_#new#tearOff::T%>
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
@@ -63,13 +63,13 @@
     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%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
-  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C1) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+  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);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
 class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
-  synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
@@ -86,7 +86,7 @@
     return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
 }
 abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
-  synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
@@ -96,9 +96,9 @@
     : super self::Class::redirectingGenerative(field)
     ;
 }
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
   NamedMixinApplication.fact;
@@ -123,23 +123,24 @@
                                 ^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
-  #C5;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
   #C6;
   #C7;
+  #C8;
   ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
 }
 
 constants  {
-  #C1 = 0
-  #C2 = static-tearoff self::NamedMixinApplication::_#new#tearOff
-  #C3 = static-tearoff self::NamedMixinApplication::_#named#tearOff
-  #C4 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
-  #C5 = instantiation self::NamedMixinApplication::_#new#tearOff <core::int, core::String>
-  #C6 = instantiation self::NamedMixinApplication::_#named#tearOff <core::int, core::String>
-  #C7 = instantiation self::NamedMixinApplication::_#redirectingGenerative#tearOff <core::int, core::String>
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int, core::String>
+  #C7 = instantiation #C4 <core::int, core::String>
+  #C8 = instantiation #C5 <core::int, core::String>
 }
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 3d96732..e793729 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
@@ -41,8 +41,8 @@
 }
 class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
   field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
     ;
   constructor named(core::int field) → self::Class<self::Class::T%>
@@ -51,7 +51,7 @@
   constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
     : this self::Class::•(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C1]) → self::Class<self::Class::_#new#tearOff::T%>
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
@@ -63,13 +63,13 @@
     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%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
-  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C1) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+  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);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
 class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
@@ -86,7 +86,7 @@
     return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
 }
 abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
@@ -96,9 +96,9 @@
     : super self::Class::redirectingGenerative(field)
     ;
 }
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
   NamedMixinApplication.fact;
@@ -123,23 +123,24 @@
                                 ^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
-  #C5;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
   #C6;
   #C7;
+  #C8;
   ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
 }
 
 constants  {
-  #C1 = 0
-  #C2 = static-tearoff self::NamedMixinApplication::_#new#tearOff
-  #C3 = static-tearoff self::NamedMixinApplication::_#named#tearOff
-  #C4 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
-  #C5 = instantiation self::NamedMixinApplication::_#new#tearOff <core::int, core::String>
-  #C6 = instantiation self::NamedMixinApplication::_#named#tearOff <core::int, core::String>
-  #C7 = instantiation self::NamedMixinApplication::_#redirectingGenerative#tearOff <core::int, core::String>
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int, core::String>
+  #C7 = instantiation #C4 <core::int, core::String>
+  #C8 = instantiation #C5 <core::int, core::String>
 }
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 54437d8..841838c 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
@@ -41,8 +41,8 @@
 }
 class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
   field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
     ;
   constructor named(core::int field) → self::Class<self::Class::T%>
@@ -51,7 +51,7 @@
   constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
     : this self::Class::•(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C1]) → self::Class<self::Class::_#new#tearOff::T%>
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
@@ -63,13 +63,13 @@
     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%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
-  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C1) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+  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);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
 class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
-  synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
@@ -86,7 +86,7 @@
     return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
 }
 abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
-  synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
@@ -96,9 +96,9 @@
     : super self::Class::redirectingGenerative(field)
     ;
 }
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
   NamedMixinApplication.fact;
@@ -123,23 +123,24 @@
                                 ^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
-  #C5;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
   #C6;
   #C7;
+  #C8;
   ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
 }
 
 constants  {
-  #C1 = 0
-  #C2 = static-tearoff self::NamedMixinApplication::_#new#tearOff
-  #C3 = static-tearoff self::NamedMixinApplication::_#named#tearOff
-  #C4 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
-  #C5 = instantiation self::NamedMixinApplication::_#new#tearOff <core::int*, core::String*>
-  #C6 = instantiation self::NamedMixinApplication::_#named#tearOff <core::int*, core::String*>
-  #C7 = instantiation self::NamedMixinApplication::_#redirectingGenerative#tearOff <core::int*, core::String*>
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect
index fbdc213..6aab2c5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect
@@ -68,3 +68,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///named_mixin_application.dart:9:7 -> ConstructorTearOffConstant(Class.redirectingFactory)
+Extra constant evaluation: evaluated: 26, effectively constant: 1
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 9786626..742d873 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
@@ -41,8 +41,8 @@
 }
 class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
   field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
     ;
   constructor named(core::int field) → self::Class<self::Class::T%>
@@ -51,7 +51,7 @@
   constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
     : this self::Class::•(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C1]) → self::Class<self::Class::_#new#tearOff::T%>
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
@@ -63,13 +63,13 @@
     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%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
-  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C1) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+  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);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
 class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
@@ -86,7 +86,7 @@
     return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
 }
 abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
@@ -96,9 +96,9 @@
     : super self::Class::redirectingGenerative(field)
     ;
 }
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
   NamedMixinApplication.fact;
@@ -123,23 +123,24 @@
                                 ^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
-  #C5;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
   #C6;
   #C7;
+  #C8;
   ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
 }
 
 constants  {
-  #C1 = 0
-  #C2 = static-tearoff self::NamedMixinApplication::_#new#tearOff
-  #C3 = static-tearoff self::NamedMixinApplication::_#named#tearOff
-  #C4 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
-  #C5 = instantiation self::NamedMixinApplication::_#new#tearOff <core::int*, core::String*>
-  #C6 = instantiation self::NamedMixinApplication::_#named#tearOff <core::int*, core::String*>
-  #C7 = instantiation self::NamedMixinApplication::_#redirectingGenerative#tearOff <core::int*, core::String*>
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.expect
index b6e38f4..9d31f32 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.expect
@@ -89,20 +89,20 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::B::_#new#tearOff
-  #C3 = instantiation self::B::_#new#tearOff <dynamic>
-  #C4 = instantiation self::B::_#new#tearOff <core::int>
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int>
   #C5 = static-tearoff self::_#G3#new#tearOff
   #C6 = static-tearoff self::C::_#new#tearOff
-  #C7 = instantiation self::C::_#new#tearOff <dynamic, dynamic>
-  #C8 = instantiation self::C::_#new#tearOff <core::int, core::String>
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int, core::String>
   #C9 = static-tearoff self::_#H2#new#tearOff
-  #C10 = instantiation self::C::_#new#tearOff <core::int, core::int>
+  #C10 = instantiation #C6 <core::int, core::int>
   #C11 = static-tearoff self::_#H4#new#tearOff
-  #C12 = instantiation self::C::_#new#tearOff <core::String, core::int>
+  #C12 = instantiation #C6 <core::String, core::int>
   #C13 = static-tearoff self::_#H5#new#tearOff
   #C14 = static-tearoff self::_#H6#new#tearOff
   #C15 = static-tearoff self::D::_#new#tearOff
-  #C16 = instantiation self::D::_#new#tearOff <core::num>
-  #C17 = instantiation self::D::_#new#tearOff <core::int>
+  #C16 = instantiation #C15 <core::num>
+  #C17 = instantiation #C15 <core::int>
   #C18 = static-tearoff self::_#I3#new#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.transformed.expect
index b6e38f4..9d31f32 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.strong.transformed.expect
@@ -89,20 +89,20 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::B::_#new#tearOff
-  #C3 = instantiation self::B::_#new#tearOff <dynamic>
-  #C4 = instantiation self::B::_#new#tearOff <core::int>
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int>
   #C5 = static-tearoff self::_#G3#new#tearOff
   #C6 = static-tearoff self::C::_#new#tearOff
-  #C7 = instantiation self::C::_#new#tearOff <dynamic, dynamic>
-  #C8 = instantiation self::C::_#new#tearOff <core::int, core::String>
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int, core::String>
   #C9 = static-tearoff self::_#H2#new#tearOff
-  #C10 = instantiation self::C::_#new#tearOff <core::int, core::int>
+  #C10 = instantiation #C6 <core::int, core::int>
   #C11 = static-tearoff self::_#H4#new#tearOff
-  #C12 = instantiation self::C::_#new#tearOff <core::String, core::int>
+  #C12 = instantiation #C6 <core::String, core::int>
   #C13 = static-tearoff self::_#H5#new#tearOff
   #C14 = static-tearoff self::_#H6#new#tearOff
   #C15 = static-tearoff self::D::_#new#tearOff
-  #C16 = instantiation self::D::_#new#tearOff <core::num>
-  #C17 = instantiation self::D::_#new#tearOff <core::int>
+  #C16 = instantiation #C15 <core::num>
+  #C17 = instantiation #C15 <core::int>
   #C18 = static-tearoff self::_#I3#new#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.expect
index 2d72357..b2e567f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.expect
@@ -89,20 +89,20 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::B::_#new#tearOff
-  #C3 = instantiation self::B::_#new#tearOff <dynamic>
-  #C4 = instantiation self::B::_#new#tearOff <core::int*>
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int*>
   #C5 = static-tearoff self::_#G3#new#tearOff
   #C6 = static-tearoff self::C::_#new#tearOff
-  #C7 = instantiation self::C::_#new#tearOff <dynamic, dynamic>
-  #C8 = instantiation self::C::_#new#tearOff <core::int*, core::String*>
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int*, core::String*>
   #C9 = static-tearoff self::_#H2#new#tearOff
-  #C10 = instantiation self::C::_#new#tearOff <core::int*, core::int*>
+  #C10 = instantiation #C6 <core::int*, core::int*>
   #C11 = static-tearoff self::_#H4#new#tearOff
-  #C12 = instantiation self::C::_#new#tearOff <core::String*, core::int*>
+  #C12 = instantiation #C6 <core::String*, core::int*>
   #C13 = static-tearoff self::_#H5#new#tearOff
   #C14 = static-tearoff self::_#H6#new#tearOff
   #C15 = static-tearoff self::D::_#new#tearOff
-  #C16 = instantiation self::D::_#new#tearOff <core::num*>
-  #C17 = instantiation self::D::_#new#tearOff <core::int*>
+  #C16 = instantiation #C15 <core::num*>
+  #C17 = instantiation #C15 <core::int*>
   #C18 = static-tearoff self::_#I3#new#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.transformed.expect
index 2d72357..b2e567f 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.transformed.expect
@@ -89,20 +89,20 @@
 constants  {
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::B::_#new#tearOff
-  #C3 = instantiation self::B::_#new#tearOff <dynamic>
-  #C4 = instantiation self::B::_#new#tearOff <core::int*>
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int*>
   #C5 = static-tearoff self::_#G3#new#tearOff
   #C6 = static-tearoff self::C::_#new#tearOff
-  #C7 = instantiation self::C::_#new#tearOff <dynamic, dynamic>
-  #C8 = instantiation self::C::_#new#tearOff <core::int*, core::String*>
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int*, core::String*>
   #C9 = static-tearoff self::_#H2#new#tearOff
-  #C10 = instantiation self::C::_#new#tearOff <core::int*, core::int*>
+  #C10 = instantiation #C6 <core::int*, core::int*>
   #C11 = static-tearoff self::_#H4#new#tearOff
-  #C12 = instantiation self::C::_#new#tearOff <core::String*, core::int*>
+  #C12 = instantiation #C6 <core::String*, core::int*>
   #C13 = static-tearoff self::_#H5#new#tearOff
   #C14 = static-tearoff self::_#H6#new#tearOff
   #C15 = static-tearoff self::D::_#new#tearOff
-  #C16 = instantiation self::D::_#new#tearOff <core::num*>
-  #C17 = instantiation self::D::_#new#tearOff <core::int*>
+  #C16 = instantiation #C15 <core::num*>
+  #C17 = instantiation #C15 <core::int*>
   #C18 = static-tearoff self::_#I3#new#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
index c74b167..214d583 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -75,7 +75,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -88,44 +88,44 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -136,7 +136,7 @@
     return new self::Class7a::•();
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
@@ -154,7 +154,7 @@
     return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
@@ -171,23 +171,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C11;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C12;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C12;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C13;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -199,12 +199,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C13;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C14;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -215,9 +215,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C14;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -233,10 +233,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C15;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -264,16 +264,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C16;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C17;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -281,7 +281,7 @@
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
   self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C10;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
   self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -294,7 +294,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -309,15 +309,24 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = static-tearoff self::Class1::_#new#tearOff
-  #C3 = static-tearoff self::Class2::_#named#tearOff
-  #C4 = static-tearoff self::Class3::_#new#tearOff
-  #C5 = static-tearoff self::Class4::_#new#tearOff
-  #C6 = static-tearoff self::Class5::_#new#tearOff
-  #C7 = static-tearoff self::Class6::_#new#tearOff
-  #C8 = static-tearoff self::Class7b::_#new#tearOff
-  #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = static-tearoff self::Class8b::_#fact#tearOff
-  #C11 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
index 46d6ccc..dcb045d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -75,7 +75,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -88,44 +88,44 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -136,7 +136,7 @@
     return new self::Class7a::•();
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
@@ -154,7 +154,7 @@
     return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
@@ -171,23 +171,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C11;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C12;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C12;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C13;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -199,12 +199,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C13;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C14;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -215,9 +215,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C14;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -233,10 +233,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C15;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -264,16 +264,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C16;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C17;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -281,7 +281,7 @@
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
   self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C10;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
   self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -294,7 +294,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -309,15 +309,24 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = static-tearoff self::Class1::_#new#tearOff
-  #C3 = static-tearoff self::Class2::_#named#tearOff
-  #C4 = static-tearoff self::Class3::_#new#tearOff
-  #C5 = static-tearoff self::Class4::_#new#tearOff
-  #C6 = static-tearoff self::Class5::_#new#tearOff
-  #C7 = static-tearoff self::Class6::_#new#tearOff
-  #C8 = static-tearoff self::Class7b::_#new#tearOff
-  #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = static-tearoff self::Class8b::_#fact#tearOff
-  #C11 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
index c74b167..214d583 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -75,7 +75,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -88,44 +88,44 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -136,7 +136,7 @@
     return new self::Class7a::•();
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
@@ -154,7 +154,7 @@
     return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
@@ -171,23 +171,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C11;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C12;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C12;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C13;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -199,12 +199,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C13;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C14;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -215,9 +215,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C14;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -233,10 +233,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C15;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -264,16 +264,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C16;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C17;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -281,7 +281,7 @@
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
   self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C10;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
   self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -294,7 +294,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -309,15 +309,24 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = static-tearoff self::Class1::_#new#tearOff
-  #C3 = static-tearoff self::Class2::_#named#tearOff
-  #C4 = static-tearoff self::Class3::_#new#tearOff
-  #C5 = static-tearoff self::Class4::_#new#tearOff
-  #C6 = static-tearoff self::Class5::_#new#tearOff
-  #C7 = static-tearoff self::Class6::_#new#tearOff
-  #C8 = static-tearoff self::Class7b::_#new#tearOff
-  #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = static-tearoff self::Class8b::_#fact#tearOff
-  #C11 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
index a5fb580..c867d2c 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -124,3 +124,16 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:13:7 -> ConstructorTearOffConstant(Class1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:18:7 -> ConstructorTearOffConstant(Class2.named)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:46:7 -> ConstructorTearOffConstant(Class3.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:53:7 -> ConstructorTearOffConstant(Class4.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:60:7 -> ConstructorTearOffConstant(Class5.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:68:7 -> ConstructorTearOffConstant(Class6.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:82:7 -> ConstructorTearOffConstant(Class7b.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:91:7 -> ConstructorTearOffConstant(Class8b.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:91:7 -> ConstructorTearOffConstant(Class8b.fact)
+Extra constant evaluation: evaluated: 66, effectively constant: 9
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
index 46d6ccc..dcb045d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -75,7 +75,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -88,44 +88,44 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
-  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
-  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
-  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -136,7 +136,7 @@
     return new self::Class7a::•();
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
   static method _#new#tearOff() → self::Class7b
@@ -154,7 +154,7 @@
     return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•, self::Class8b::fact]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
   static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
@@ -171,23 +171,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C11;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C12;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C12;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C13;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -199,12 +199,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C13;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C14;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -215,9 +215,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C14;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -233,10 +233,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C15;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -264,16 +264,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C16;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C17;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -281,7 +281,7 @@
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
   self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
   self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C10;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
   self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -294,7 +294,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -309,15 +309,24 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = static-tearoff self::Class1::_#new#tearOff
-  #C3 = static-tearoff self::Class2::_#named#tearOff
-  #C4 = static-tearoff self::Class3::_#new#tearOff
-  #C5 = static-tearoff self::Class4::_#new#tearOff
-  #C6 = static-tearoff self::Class5::_#new#tearOff
-  #C7 = static-tearoff self::Class6::_#new#tearOff
-  #C8 = static-tearoff self::Class7b::_#new#tearOff
-  #C9 = static-tearoff self::Class8b::_#new#tearOff
-  #C10 = static-tearoff self::Class8b::_#fact#tearOff
-  #C11 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
 }
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 c7984a5..8c398fe 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
@@ -17,28 +17,28 @@
 
 class Class1 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
-  constructor _([core::int field = #C1]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int field = #C1]) → self::Class1
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C2]) → self::Class1
+  static factory •([core::int field = #C3]) → self::Class1
     return new self::Class1::_(field);
-  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+  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>[self::Class2::•]/*isLegacy*/;
-  constructor _({core::int field = #C1}) → self::Class2
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff({core::int field = #C1}) → self::Class2
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C2}) → self::Class2
+  static factory •({core::int field = #C3}) → self::Class2
     return new self::Class2::_(field: field);
-  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C3;
+  ([core::int]) → self::Class1 f1a = #C5;
   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 = #C3;
+  dynamic f1b = #C5;
   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 = #C4;
+  ({field: core::int}) → self::Class2 f2a = #C6;
   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 = #C4;
+  dynamic f2b = #C6;
   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 = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -101,9 +101,11 @@
 }
 
 constants  {
-  #C1 = 42
-  #C2 = null
-  #C3 = static-tearoff self::Class1::_#new#tearOff
-  #C4 = static-tearoff self::Class2::_#new#tearOff
-  #C5 = false
+  #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
 }
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 9f46561..cc59901 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
@@ -17,28 +17,28 @@
 
 class Class1 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
-  constructor _([core::int field = #C1]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int field = #C1]) → self::Class1
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C2]) → self::Class1
+  static factory •([core::int field = #C3]) → self::Class1
     return new self::Class1::_(field);
-  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+  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>[self::Class2::•]/*isLegacy*/;
-  constructor _({core::int field = #C1}) → self::Class2
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff({core::int field = #C1}) → self::Class2
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C2}) → self::Class2
+  static factory •({core::int field = #C3}) → self::Class2
     return new self::Class2::_(field: field);
-  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C3;
+  ([core::int]) → self::Class1 f1a = #C5;
   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 = #C3;
+  dynamic f1b = #C5;
   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 = #C4;
+  ({field: core::int}) → self::Class2 f2a = #C6;
   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 = #C4;
+  dynamic f2b = #C6;
   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 = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -101,9 +101,11 @@
 }
 
 constants  {
-  #C1 = 42
-  #C2 = null
-  #C3 = static-tearoff self::Class1::_#new#tearOff
-  #C4 = static-tearoff self::Class2::_#new#tearOff
-  #C5 = false
+  #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
 }
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 c7984a5..8c398fe 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
@@ -17,28 +17,28 @@
 
 class Class1 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
-  constructor _([core::int field = #C1]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int field = #C1]) → self::Class1
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C2]) → self::Class1
+  static factory •([core::int field = #C3]) → self::Class1
     return new self::Class1::_(field);
-  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+  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>[self::Class2::•]/*isLegacy*/;
-  constructor _({core::int field = #C1}) → self::Class2
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff({core::int field = #C1}) → self::Class2
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C2}) → self::Class2
+  static factory •({core::int field = #C3}) → self::Class2
     return new self::Class2::_(field: field);
-  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
 }
 static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C3;
+  ([core::int]) → self::Class1 f1a = #C5;
   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 = #C3;
+  dynamic f1b = #C5;
   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 = #C4;
+  ({field: core::int}) → self::Class2 f2a = #C6;
   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 = #C4;
+  dynamic f2b = #C6;
   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 = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -101,9 +101,11 @@
 }
 
 constants  {
-  #C1 = 42
-  #C2 = null
-  #C3 = static-tearoff self::Class1::_#new#tearOff
-  #C4 = static-tearoff self::Class2::_#new#tearOff
-  #C5 = false
+  #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
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
index 1cd9ef2..20f744e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
@@ -35,3 +35,9 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values.dart:12:7 -> ConstructorTearOffConstant(Class1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values.dart:19:7 -> ConstructorTearOffConstant(Class2.)
+Extra constant evaluation: evaluated: 16, effectively constant: 2
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 9f46561..cc59901 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
@@ -17,28 +17,28 @@
 
 class Class1 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
-  constructor _([core::int field = #C1]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff([core::int field = #C1]) → self::Class1
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C2]) → self::Class1
+  static factory •([core::int field = #C3]) → self::Class1
     return new self::Class1::_(field);
-  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+  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>[self::Class2::•]/*isLegacy*/;
-  constructor _({core::int field = #C1}) → self::Class2
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  static method _#_#tearOff({core::int field = #C1}) → self::Class2
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C2}) → self::Class2
+  static factory •({core::int field = #C3}) → self::Class2
     return new self::Class2::_(field: field);
-  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
 }
 static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C3;
+  ([core::int]) → self::Class1 f1a = #C5;
   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 = #C3;
+  dynamic f1b = #C5;
   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 = #C4;
+  ({field: core::int}) → self::Class2 f2a = #C6;
   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 = #C4;
+  dynamic f2b = #C6;
   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 = #C5}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -101,9 +101,11 @@
 }
 
 constants  {
-  #C1 = 42
-  #C2 = null
-  #C3 = static-tearoff self::Class1::_#new#tearOff
-  #C4 = static-tearoff self::Class2::_#new#tearOff
-  #C5 = false
+  #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
 }
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 c019108..aa8c2df 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
@@ -43,44 +43,44 @@
 class Class1 extends core::Object {
   final field core::int field1;
   final field core::int field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
-  constructor positional([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  constructor named({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  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 = #C3, core::int field2 = #C3]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  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 = #C3]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
     return new self::Class1::positional(field1);
-  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  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 = #C3, core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  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 = #C3, core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
+  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 = #C3}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2);
-  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
     return new self::Class1::named();
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C4;
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
   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 = #C5;
+  ([core::int]) → self::Class1 f1b = #C13;
   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 = #C6;
+  () → self::Class1 f1c = #C14;
   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 = #C7;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
   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 = #C8;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
   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 = #C9;
+  ({field1: core::int}) → self::Class1 f2c = #C17;
   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 = #C10;
+  ({field2: core::int}) → self::Class1 f2d = #C18;
   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 = #C11;
+  () → self::Class1 f2e = #C19;
   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 = #C12}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -221,16 +221,24 @@
 }
 
 constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = null
-  #C4 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C5 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C6 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C7 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C8 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C9 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C10 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C11 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C12 = false
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #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
 }
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 ffa443b..aa4af4d 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
@@ -43,44 +43,44 @@
 class Class1 extends core::Object {
   final field core::int field1;
   final field core::int field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
-  constructor positional([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  constructor named({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  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 = #C3, core::int field2 = #C3]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  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 = #C3]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
     return new self::Class1::positional(field1);
-  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  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 = #C3, core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  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 = #C3, core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
+  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 = #C3}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2);
-  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
     return new self::Class1::named();
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C4;
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
   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 = #C5;
+  ([core::int]) → self::Class1 f1b = #C13;
   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 = #C6;
+  () → self::Class1 f1c = #C14;
   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 = #C7;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
   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 = #C8;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
   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 = #C9;
+  ({field1: core::int}) → self::Class1 f2c = #C17;
   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 = #C10;
+  ({field2: core::int}) → self::Class1 f2d = #C18;
   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 = #C11;
+  () → self::Class1 f2e = #C19;
   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 = #C12}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -221,16 +221,24 @@
 }
 
 constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = null
-  #C4 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C5 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C6 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C7 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C8 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C9 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C10 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C11 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C12 = false
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #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
 }
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 c019108..aa8c2df 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
@@ -43,44 +43,44 @@
 class Class1 extends core::Object {
   final field core::int field1;
   final field core::int field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
-  constructor positional([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  constructor named({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  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 = #C3, core::int field2 = #C3]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  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 = #C3]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
     return new self::Class1::positional(field1);
-  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  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 = #C3, core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  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 = #C3, core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
+  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 = #C3}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2);
-  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
     return new self::Class1::named();
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C4;
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
   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 = #C5;
+  ([core::int]) → self::Class1 f1b = #C13;
   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 = #C6;
+  () → self::Class1 f1c = #C14;
   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 = #C7;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
   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 = #C8;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
   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 = #C9;
+  ({field1: core::int}) → self::Class1 f2c = #C17;
   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 = #C10;
+  ({field2: core::int}) → self::Class1 f2d = #C18;
   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 = #C11;
+  () → self::Class1 f2e = #C19;
   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 = #C12}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -221,16 +221,24 @@
 }
 
 constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = null
-  #C4 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C5 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C6 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C7 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C8 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C9 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C10 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C11 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C12 = false
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #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
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
index c33110b..7cf24c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
@@ -56,3 +56,15 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectPositionalSame)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectPositionalFewer1)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectPositionalFewer2)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedSame)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedReorder)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedFewer1)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedFewer2)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off_default_values_complex.dart:12:7 -> ConstructorTearOffConstant(Class1.redirectNamedFewer3)
+Extra constant evaluation: evaluated: 49, effectively constant: 8
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 ffa443b..aa4af4d 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
@@ -43,44 +43,44 @@
 class Class1 extends core::Object {
   final field core::int field1;
   final field core::int field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::redirectPositionalSame, self::Class1::redirectPositionalFewer1, self::Class1::redirectPositionalFewer2, self::Class1::redirectNamedSame, self::Class1::redirectNamedReorder, self::Class1::redirectNamedFewer1, self::Class1::redirectNamedFewer2, self::Class1::redirectNamedFewer3]/*isLegacy*/;
-  constructor positional([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  constructor named({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
     ;
-  static method _#positional#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  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 = #C3, core::int field2 = #C3]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static method _#redirectPositionalSame#tearOff([core::int field1 = #C1, core::int field2 = #C2]) → self::Class1
+  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 = #C3]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
     return new self::Class1::positional(field1);
-  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C1]) → self::Class1
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static factory redirectPositionalFewer2() → self::Class1
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  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 = #C3, core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static method _#redirectNamedSame#tearOff({core::int field1 = #C1, core::int field2 = #C2}) → self::Class1
+  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 = #C3, core::int field1 = #C3}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static method _#redirectNamedReorder#tearOff({core::int field2 = #C2, core::int field1 = #C1}) → self::Class1
+  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 = #C3}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C1}) → self::Class1
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C3}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
     return new self::Class1::named(field2: field2);
-  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C2}) → self::Class1
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static factory redirectNamedFewer3() → self::Class1
     return new self::Class1::named();
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C4;
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
   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 = #C5;
+  ([core::int]) → self::Class1 f1b = #C13;
   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 = #C6;
+  () → self::Class1 f1c = #C14;
   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 = #C7;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
   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 = #C8;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
   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 = #C9;
+  ({field1: core::int}) → self::Class1 f2c = #C17;
   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 = #C10;
+  ({field2: core::int}) → self::Class1 f2d = #C18;
   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 = #C11;
+  () → self::Class1 f2e = #C19;
   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 = #C12}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -221,16 +221,24 @@
 }
 
 constants  {
-  #C1 = 1
-  #C2 = 2
-  #C3 = null
-  #C4 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C5 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C6 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C7 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C8 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C9 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C10 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C11 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C12 = false
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #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
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
index 3f74e4e..01b742d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
@@ -7,20 +7,20 @@
 part typedef_from_part.dart;
 typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
 class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -28,10 +28,10 @@
     return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
-  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
-  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
-  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
   aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
   aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
   aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
@@ -56,10 +56,10 @@
   aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
-  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
-  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
-  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
-  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
   bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
   bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
   bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
@@ -87,9 +87,9 @@
 }
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -104,22 +104,23 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
 
 constants  {
-  #C1 = null
-  #C2 = 42
-  #C3 = static-tearoff self2::_#A#new#tearOff
-  #C4 = static-tearoff self2::_#A#named#tearOff
-  #C5 = static-tearoff self2::_#A#fact#tearOff
-  #C6 = static-tearoff self2::_#A#redirect#tearOff
-  #C7 = static-tearoff self::_#B#new#tearOff
-  #C8 = static-tearoff self::_#B#named#tearOff
-  #C9 = static-tearoff self::_#B#fact#tearOff
-  #C10 = static-tearoff self::_#B#redirect#tearOff
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
index 3f74e4e..01b742d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
@@ -7,20 +7,20 @@
 part typedef_from_part.dart;
 typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
 class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -28,10 +28,10 @@
     return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
-  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
-  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
-  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
   aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
   aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
   aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
@@ -56,10 +56,10 @@
   aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
-  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
-  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
-  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
-  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
   bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
   bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
   bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
@@ -87,9 +87,9 @@
 }
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -104,22 +104,23 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
 
 constants  {
-  #C1 = null
-  #C2 = 42
-  #C3 = static-tearoff self2::_#A#new#tearOff
-  #C4 = static-tearoff self2::_#A#named#tearOff
-  #C5 = static-tearoff self2::_#A#fact#tearOff
-  #C6 = static-tearoff self2::_#A#redirect#tearOff
-  #C7 = static-tearoff self::_#B#new#tearOff
-  #C8 = static-tearoff self::_#B#named#tearOff
-  #C9 = static-tearoff self::_#B#fact#tearOff
-  #C10 = static-tearoff self::_#B#redirect#tearOff
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
index 3f74e4e..01b742d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
@@ -7,20 +7,20 @@
 part typedef_from_part.dart;
 typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
 class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -28,10 +28,10 @@
     return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
-  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
-  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
-  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
   aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
   aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
   aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
@@ -56,10 +56,10 @@
   aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
-  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
-  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
-  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
-  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
   bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
   bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
   bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
@@ -87,9 +87,9 @@
 }
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -104,22 +104,23 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
 
 constants  {
-  #C1 = null
-  #C2 = 42
-  #C3 = static-tearoff self2::_#A#new#tearOff
-  #C4 = static-tearoff self2::_#A#named#tearOff
-  #C5 = static-tearoff self2::_#A#fact#tearOff
-  #C6 = static-tearoff self2::_#A#redirect#tearOff
-  #C7 = static-tearoff self::_#B#new#tearOff
-  #C8 = static-tearoff self::_#B#named#tearOff
-  #C9 = static-tearoff self::_#B#fact#tearOff
-  #C10 = static-tearoff self::_#B#redirect#tearOff
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
index d0d9059..9f1b30a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
@@ -52,3 +52,8 @@
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///typedef_from.dart:75:7 -> ConstructorTearOffConstant(Class.redirect)
+Extra constant evaluation: evaluated: 43, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
index 3f74e4e..01b742d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
@@ -7,20 +7,20 @@
 part typedef_from_part.dart;
 typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
 class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
     : super core::Object::•()
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -28,10 +28,10 @@
     return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
-  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
-  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
-  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
   aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
   aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
   aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
@@ -56,10 +56,10 @@
   aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
   aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
-  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
-  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
-  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
-  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
   bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
   bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
   bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
@@ -87,9 +87,9 @@
 }
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -104,22 +104,23 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
 
 constants  {
-  #C1 = null
-  #C2 = 42
-  #C3 = static-tearoff self2::_#A#new#tearOff
-  #C4 = static-tearoff self2::_#A#named#tearOff
-  #C5 = static-tearoff self2::_#A#fact#tearOff
-  #C6 = static-tearoff self2::_#A#redirect#tearOff
-  #C7 = static-tearoff self::_#B#new#tearOff
-  #C8 = static-tearoff self::_#B#named#tearOff
-  #C9 = static-tearoff self::_#B#fact#tearOff
-  #C10 = static-tearoff self::_#B#redirect#tearOff
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
index 90eb13b..402ad31 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field dynamic F_named_lib = #C6;
 static field dynamic F_fact_lib = #C7;
 static field dynamic F_redirect_lib = #C8;
-static field dynamic G_new_lib = #C11;
-static field dynamic G_named_lib = #C12;
-static field dynamic G_fact_lib = #C13;
-static field dynamic G_redirect_lib = #C14;
+static field dynamic G_new_lib = #C12;
+static field dynamic G_named_lib = #C13;
+static field dynamic G_fact_lib = #C14;
+static field dynamic G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#new#tearOff::Y%>
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<mai::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff mai::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff mai::_#G#new#tearOff
-  #C12 = static-tearoff mai::_#G#named#tearOff
-  #C13 = static-tearoff mai::_#G#fact#tearOff
-  #C14 = static-tearoff mai::_#G#redirect#tearOff
+  #C11 = constructor-tearoff mai::A::redirect
+  #C12 = static-tearoff mai::_#G#new#tearOff
+  #C13 = static-tearoff mai::_#G#named#tearOff
+  #C14 = static-tearoff mai::_#G#fact#tearOff
+  #C15 = static-tearoff mai::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
index 90eb13b..402ad31 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field dynamic F_named_lib = #C6;
 static field dynamic F_fact_lib = #C7;
 static field dynamic F_redirect_lib = #C8;
-static field dynamic G_new_lib = #C11;
-static field dynamic G_named_lib = #C12;
-static field dynamic G_fact_lib = #C13;
-static field dynamic G_redirect_lib = #C14;
+static field dynamic G_new_lib = #C12;
+static field dynamic G_named_lib = #C13;
+static field dynamic G_fact_lib = #C14;
+static field dynamic G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#new#tearOff::Y%>
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<mai::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff mai::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff mai::_#G#new#tearOff
-  #C12 = static-tearoff mai::_#G#named#tearOff
-  #C13 = static-tearoff mai::_#G#fact#tearOff
-  #C14 = static-tearoff mai::_#G#redirect#tearOff
+  #C11 = constructor-tearoff mai::A::redirect
+  #C12 = static-tearoff mai::_#G#new#tearOff
+  #C13 = static-tearoff mai::_#G#named#tearOff
+  #C14 = static-tearoff mai::_#G#fact#tearOff
+  #C15 = static-tearoff mai::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
index 90eb13b..402ad31 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field dynamic F_named_lib = #C6;
 static field dynamic F_fact_lib = #C7;
 static field dynamic F_redirect_lib = #C8;
-static field dynamic G_new_lib = #C11;
-static field dynamic G_named_lib = #C12;
-static field dynamic G_fact_lib = #C13;
-static field dynamic G_redirect_lib = #C14;
+static field dynamic G_new_lib = #C12;
+static field dynamic G_named_lib = #C13;
+static field dynamic G_fact_lib = #C14;
+static field dynamic G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#new#tearOff::Y%>
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<mai::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff mai::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff mai::_#G#new#tearOff
-  #C12 = static-tearoff mai::_#G#named#tearOff
-  #C13 = static-tearoff mai::_#G#fact#tearOff
-  #C14 = static-tearoff mai::_#G#redirect#tearOff
+  #C11 = constructor-tearoff mai::A::redirect
+  #C12 = static-tearoff mai::_#G#new#tearOff
+  #C13 = static-tearoff mai::_#G#named#tearOff
+  #C14 = static-tearoff mai::_#G#fact#tearOff
+  #C15 = static-tearoff mai::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
index 0e4f276..6e66217 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
@@ -34,7 +34,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     ;
   constructor named(mai::A::T% a, [core::int? b]) → mai::A<mai::A::T%>
@@ -76,3 +76,7 @@
   return mai::A::fact<mai::_#G#fact#tearOff::Y%>(a, b: b, c: c);
 static method _#G#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#G#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<mai::_#G#redirect#tearOff::Y%>();
+
+constants  {
+  #C1 = constructor-tearoff mai::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
index 90eb13b..402ad31 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[mai::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field dynamic F_named_lib = #C6;
 static field dynamic F_fact_lib = #C7;
 static field dynamic F_redirect_lib = #C8;
-static field dynamic G_new_lib = #C11;
-static field dynamic G_named_lib = #C12;
-static field dynamic G_fact_lib = #C13;
-static field dynamic G_redirect_lib = #C14;
+static field dynamic G_new_lib = #C12;
+static field dynamic G_named_lib = #C13;
+static field dynamic G_fact_lib = #C14;
+static field dynamic G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#new#tearOff::Y%>
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<mai::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff mai::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff mai::_#G#new#tearOff
-  #C12 = static-tearoff mai::_#G#named#tearOff
-  #C13 = static-tearoff mai::_#G#fact#tearOff
-  #C14 = static-tearoff mai::_#G#redirect#tearOff
+  #C11 = constructor-tearoff mai::A::redirect
+  #C12 = static-tearoff mai::_#G#new#tearOff
+  #C13 = static-tearoff mai::_#G#named#tearOff
+  #C14 = static-tearoff mai::_#G#fact#tearOff
+  #C15 = static-tearoff mai::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
index 81462df..6da94c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C11;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C12;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C13;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff typ::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff typ::_#G#new#tearOff
-  #C12 = static-tearoff typ::_#G#named#tearOff
-  #C13 = static-tearoff typ::_#G#fact#tearOff
-  #C14 = static-tearoff typ::_#G#redirect#tearOff
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
index 81462df..6da94c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C11;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C12;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C13;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff typ::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff typ::_#G#new#tearOff
-  #C12 = static-tearoff typ::_#G#named#tearOff
-  #C13 = static-tearoff typ::_#G#fact#tearOff
-  #C14 = static-tearoff typ::_#G#redirect#tearOff
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
index 81462df..6da94c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C11;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C12;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C13;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff typ::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff typ::_#G#new#tearOff
-  #C12 = static-tearoff typ::_#G#named#tearOff
-  #C13 = static-tearoff typ::_#G#fact#tearOff
-  #C14 = static-tearoff typ::_#G#redirect#tearOff
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
index b6ebfa4..2fdb0b1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
@@ -76,3 +76,8 @@
   return typ::A::fact<typ::_#G#fact#tearOff::Y%>(a, b: b, c: c);
 static method _#G#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#G#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<typ::_#G#redirect#tearOff::Y%>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///typedef_identical_lib.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
+Extra constant evaluation: evaluated: 39, effectively constant: 1
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
index 81462df..6da94c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
@@ -84,7 +84,7 @@
 typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
 class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     : super core::Object::•()
     ;
@@ -108,10 +108,10 @@
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
 static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C11;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C12;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C13;
-static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
 static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
@@ -140,8 +140,9 @@
   #C8 = static-tearoff typ::_#F#redirect#tearOff
   #C9 = null
   #C10 = 42
-  #C11 = static-tearoff typ::_#G#new#tearOff
-  #C12 = static-tearoff typ::_#G#named#tearOff
-  #C13 = static-tearoff typ::_#G#fact#tearOff
-  #C14 = static-tearoff typ::_#G#redirect#tearOff
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.expect
index 2e24a01..109a904 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.expect
@@ -319,11 +319,11 @@
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::_#DA2#new#tearOff
   #C3 = static-tearoff self::B::_#new#tearOff
-  #C4 = instantiation self::B::_#new#tearOff <core::String>
+  #C4 = instantiation #C3 <core::String>
   #C5 = static-tearoff self::B::_#foo#tearOff
-  #C6 = instantiation self::B::_#foo#tearOff <core::String>
+  #C6 = instantiation #C5 <core::String>
   #C7 = static-tearoff self::B::_#bar#tearOff
-  #C8 = instantiation self::B::_#bar#tearOff <core::String>
+  #C8 = instantiation #C7 <core::String>
   #C9 = static-tearoff self::_#DB2#new#tearOff
   #C10 = static-tearoff self::_#DB3#new#tearOff
   #C11 = false
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.transformed.expect
index 64496be..71410d3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.strong.transformed.expect
@@ -319,11 +319,11 @@
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::_#DA2#new#tearOff
   #C3 = static-tearoff self::B::_#new#tearOff
-  #C4 = instantiation self::B::_#new#tearOff <core::String>
+  #C4 = instantiation #C3 <core::String>
   #C5 = static-tearoff self::B::_#foo#tearOff
-  #C6 = instantiation self::B::_#foo#tearOff <core::String>
+  #C6 = instantiation #C5 <core::String>
   #C7 = static-tearoff self::B::_#bar#tearOff
-  #C8 = instantiation self::B::_#bar#tearOff <core::String>
+  #C8 = instantiation #C7 <core::String>
   #C9 = static-tearoff self::_#DB2#new#tearOff
   #C10 = static-tearoff self::_#DB3#new#tearOff
   #C11 = false
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.expect
index b0722a9..9e50e01 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.expect
@@ -319,11 +319,11 @@
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::_#DA2#new#tearOff
   #C3 = static-tearoff self::B::_#new#tearOff
-  #C4 = instantiation self::B::_#new#tearOff <core::String*>
+  #C4 = instantiation #C3 <core::String*>
   #C5 = static-tearoff self::B::_#foo#tearOff
-  #C6 = instantiation self::B::_#foo#tearOff <core::String*>
+  #C6 = instantiation #C5 <core::String*>
   #C7 = static-tearoff self::B::_#bar#tearOff
-  #C8 = instantiation self::B::_#bar#tearOff <core::String*>
+  #C8 = instantiation #C7 <core::String*>
   #C9 = static-tearoff self::_#DB2#new#tearOff
   #C10 = static-tearoff self::_#DB3#new#tearOff
   #C11 = false
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.transformed.expect
index 3242407..f1fcdc5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.transformed.expect
@@ -319,11 +319,11 @@
   #C1 = static-tearoff self::A::_#new#tearOff
   #C2 = static-tearoff self::_#DA2#new#tearOff
   #C3 = static-tearoff self::B::_#new#tearOff
-  #C4 = instantiation self::B::_#new#tearOff <core::String*>
+  #C4 = instantiation #C3 <core::String*>
   #C5 = static-tearoff self::B::_#foo#tearOff
-  #C6 = instantiation self::B::_#foo#tearOff <core::String*>
+  #C6 = instantiation #C5 <core::String*>
   #C7 = static-tearoff self::B::_#bar#tearOff
-  #C8 = instantiation self::B::_#bar#tearOff <core::String*>
+  #C8 = instantiation #C7 <core::String*>
   #C9 = static-tearoff self::_#DB2#new#tearOff
   #C10 = static-tearoff self::_#DB3#new#tearOff
   #C11 = 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 47537c5..713b894 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
@@ -41,8 +41,8 @@
 }
 class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
   field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
     ;
   constructor named(core::int field) → self::Class<self::Class::T%>
@@ -59,7 +59,7 @@
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
 class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
-  synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
@@ -70,7 +70,7 @@
     ;
 }
 abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
-  synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
@@ -80,9 +80,9 @@
     : super self::Class::redirectingGenerative(field)
     ;
 }
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
   NamedMixinApplication.fact;
@@ -107,23 +107,24 @@
                                 ^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
-  #C5;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
   #C6;
   #C7;
+  #C8;
   ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
 }
 
 constants  {
-  #C1 = 0
-  #C2 = constructor-tearoff self::NamedMixinApplication::•
-  #C3 = constructor-tearoff self::NamedMixinApplication::named
-  #C4 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
-  #C5 = instantiation self::NamedMixinApplication::• <core::int, core::String>
-  #C6 = instantiation self::NamedMixinApplication::named <core::int, core::String>
-  #C7 = instantiation self::NamedMixinApplication::redirectingGenerative <core::int, core::String>
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int, core::String>
+  #C7 = instantiation #C4 <core::int, core::String>
+  #C8 = instantiation #C5 <core::int, core::String>
 }
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 6e9a6ef..e1f62d1 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
@@ -41,8 +41,8 @@
 }
 class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
   field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
     ;
   constructor named(core::int field) → self::Class<self::Class::T%>
@@ -59,7 +59,7 @@
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
 class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
@@ -70,7 +70,7 @@
     ;
 }
 abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
@@ -80,9 +80,9 @@
     : super self::Class::redirectingGenerative(field)
     ;
 }
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
   NamedMixinApplication.fact;
@@ -107,23 +107,24 @@
                                 ^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
-  #C5;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
   #C6;
   #C7;
+  #C8;
   ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
 }
 
 constants  {
-  #C1 = 0
-  #C2 = constructor-tearoff self::NamedMixinApplication::•
-  #C3 = constructor-tearoff self::NamedMixinApplication::named
-  #C4 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
-  #C5 = instantiation self::NamedMixinApplication::• <core::int, core::String>
-  #C6 = instantiation self::NamedMixinApplication::named <core::int, core::String>
-  #C7 = instantiation self::NamedMixinApplication::redirectingGenerative <core::int, core::String>
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int, core::String>
+  #C7 = instantiation #C4 <core::int, core::String>
+  #C8 = instantiation #C5 <core::int, core::String>
 }
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 7db9ced..911cbda 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
@@ -41,8 +41,8 @@
 }
 class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
   field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
     ;
   constructor named(core::int field) → self::Class<self::Class::T%>
@@ -59,7 +59,7 @@
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
 class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
-  synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
@@ -70,7 +70,7 @@
     ;
 }
 abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
-  synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
@@ -80,9 +80,9 @@
     : super self::Class::redirectingGenerative(field)
     ;
 }
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
   NamedMixinApplication.fact;
@@ -107,23 +107,24 @@
                                 ^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
-  #C5;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
   #C6;
   #C7;
+  #C8;
   ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
 }
 
 constants  {
-  #C1 = 0
-  #C2 = constructor-tearoff self::NamedMixinApplication::•
-  #C3 = constructor-tearoff self::NamedMixinApplication::named
-  #C4 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
-  #C5 = instantiation self::NamedMixinApplication::• <core::int*, core::String*>
-  #C6 = instantiation self::NamedMixinApplication::named <core::int*, core::String*>
-  #C7 = instantiation self::NamedMixinApplication::redirectingGenerative <core::int*, core::String*>
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.outline.expect
index 74af4ae..99e5f30 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.outline.expect
@@ -52,3 +52,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///named_mixin_application.dart:9:7 -> ConstructorTearOffConstant(Class.redirectingFactory)
+Extra constant evaluation: evaluated: 10, effectively constant: 1
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 9b266ff..ec985b8 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
@@ -41,8 +41,8 @@
 }
 class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
   field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirectingFactory]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::Class<self::Class::T%>
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
     ;
   constructor named(core::int field) → self::Class<self::Class::T%>
@@ -59,7 +59,7 @@
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
 class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::NamedMixinApplication::T%> implements self::Mixin<self::NamedMixinApplication::S%> /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int field = #C1]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
@@ -70,7 +70,7 @@
     ;
 }
 abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends self::Class<self::AbstractNamedMixinApplication::T%> implements self::Mixin<self::AbstractNamedMixinApplication::S%> /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int field = #C1]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
     : super self::Class::•(field)
     ;
   synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
@@ -80,9 +80,9 @@
     : super self::Class::redirectingGenerative(field)
     ;
 }
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
   NamedMixinApplication.fact;
@@ -107,23 +107,24 @@
                                 ^^^^^^^^^^^^^^^^^^";
 }
 static method main() → dynamic {
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C2;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C3;
-  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C4;
-  #C5;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
   #C6;
   #C7;
+  #C8;
   ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
   (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
 }
 
 constants  {
-  #C1 = 0
-  #C2 = constructor-tearoff self::NamedMixinApplication::•
-  #C3 = constructor-tearoff self::NamedMixinApplication::named
-  #C4 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
-  #C5 = instantiation self::NamedMixinApplication::• <core::int*, core::String*>
-  #C6 = instantiation self::NamedMixinApplication::named <core::int*, core::String*>
-  #C7 = instantiation self::NamedMixinApplication::redirectingGenerative <core::int*, core::String*>
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.expect
index 952cefe..9f6be91 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.expect
@@ -57,5 +57,5 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = static-tearoff self::A::bar1
+  #C4 = constructor-tearoff self::A::bar1
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.transformed.expect
index 952cefe..9f6be91 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.strong.transformed.expect
@@ -57,5 +57,5 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = static-tearoff self::A::bar1
+  #C4 = constructor-tearoff self::A::bar1
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.expect
index 952cefe..9f6be91 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.expect
@@ -57,5 +57,5 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = static-tearoff self::A::bar1
+  #C4 = constructor-tearoff self::A::bar1
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.transformed.expect
index 952cefe..9f6be91 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.transformed.expect
@@ -57,5 +57,5 @@
   #C1 = constructor-tearoff self::A::foo1
   #C2 = constructor-tearoff self::A::foo2
   #C3 = constructor-tearoff self::A::•
-  #C4 = static-tearoff self::A::bar1
+  #C4 = constructor-tearoff self::A::bar1
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.expect
index 5d000f0..22aef61 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.expect
@@ -60,5 +60,5 @@
 constants  {
   #C1 = constructor-tearoff self::A::foo
   #C2 = constructor-tearoff self::A::•
-  #C3 = static-tearoff self::A::bar
+  #C3 = constructor-tearoff self::A::bar
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.transformed.expect
index 5d000f0..22aef61 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.strong.transformed.expect
@@ -60,5 +60,5 @@
 constants  {
   #C1 = constructor-tearoff self::A::foo
   #C2 = constructor-tearoff self::A::•
-  #C3 = static-tearoff self::A::bar
+  #C3 = constructor-tearoff self::A::bar
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.expect
index 5d000f0..22aef61 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.expect
@@ -60,5 +60,5 @@
 constants  {
   #C1 = constructor-tearoff self::A::foo
   #C2 = constructor-tearoff self::A::•
-  #C3 = static-tearoff self::A::bar
+  #C3 = constructor-tearoff self::A::bar
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.transformed.expect
index 5d000f0..22aef61 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.transformed.expect
@@ -60,5 +60,5 @@
 constants  {
   #C1 = constructor-tearoff self::A::foo
   #C2 = constructor-tearoff self::A::•
-  #C3 = static-tearoff self::A::bar
+  #C3 = constructor-tearoff self::A::bar
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
index ce55163..e0b61a8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.expect
@@ -59,8 +59,8 @@
 constants  {
   #C1 = static-tearoff self::UnresolvedClass
   #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
-  #C3 = instantiation self::UnresolvedClass <core::int>
-  #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int>
+  #C3 = instantiation #C1 <core::int>
+  #C4 = instantiation #C2 <core::int>
   #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
-  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int>
+  #C6 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
index ce55163..e0b61a8 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.strong.transformed.expect
@@ -59,8 +59,8 @@
 constants  {
   #C1 = static-tearoff self::UnresolvedClass
   #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
-  #C3 = instantiation self::UnresolvedClass <core::int>
-  #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int>
+  #C3 = instantiation #C1 <core::int>
+  #C4 = instantiation #C2 <core::int>
   #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
-  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int>
+  #C6 = instantiation #C5 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
index 07ba725..b3fb9eb 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.expect
@@ -59,8 +59,8 @@
 constants  {
   #C1 = static-tearoff self::UnresolvedClass
   #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
-  #C3 = instantiation self::UnresolvedClass <core::int*>
-  #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int*>
+  #C3 = instantiation #C1 <core::int*>
+  #C4 = instantiation #C2 <core::int*>
   #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
-  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int*>
+  #C6 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
index 07ba725..b3fb9eb 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.transformed.expect
@@ -59,8 +59,8 @@
 constants  {
   #C1 = static-tearoff self::UnresolvedClass
   #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
-  #C3 = instantiation self::UnresolvedClass <core::int*>
-  #C4 = instantiation self::unresolved_prefix::UnresolvedClass <core::int*>
+  #C3 = instantiation #C1 <core::int*>
+  #C4 = instantiation #C2 <core::int*>
   #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
-  #C6 = instantiation self::resolved_prefix::UnresolvedClass <core::int*>
+  #C6 = instantiation #C5 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
index 0ed236c..4e40f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,9 +27,9 @@
     ;
 }
 static method test() → dynamic {
-  () → self::A f1 = #C1;
-  () → self::A f2 = #C2;
-  () → self::A f3 = #C3;
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
   self::A x1 = f1(){() → self::A};
   self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
   self::A x3;
@@ -39,7 +39,10 @@
   return self::test();
 
 constants  {
-  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
-  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
-  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
index 0ed236c..4e40f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,9 +27,9 @@
     ;
 }
 static method test() → dynamic {
-  () → self::A f1 = #C1;
-  () → self::A f2 = #C2;
-  () → self::A f3 = #C3;
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
   self::A x1 = f1(){() → self::A};
   self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
   self::A x3;
@@ -39,7 +39,10 @@
   return self::test();
 
 constants  {
-  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
-  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
-  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
index 0ed236c..4e40f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,9 +27,9 @@
     ;
 }
 static method test() → dynamic {
-  () → self::A f1 = #C1;
-  () → self::A f2 = #C2;
-  () → self::A f3 = #C3;
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
   self::A x1 = f1(){() → self::A};
   self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
   self::A x3;
@@ -39,7 +39,10 @@
   return self::test();
 
 constants  {
-  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
-  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
-  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
index 0b5088f..91c4c77 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
@@ -21,3 +21,10 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructors.dart:5:7 -> ConstructorTearOffConstant(A.redirectingFactory)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructors.dart:5:7 -> ConstructorTearOffConstant(A.redirectingFactoryChild)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructors.dart:5:7 -> ConstructorTearOffConstant(A.redirectingTwice)
+Extra constant evaluation: evaluated: 7, effectively constant: 3
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
index 0ed236c..4e40f0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,9 +27,9 @@
     ;
 }
 static method test() → dynamic {
-  () → self::A f1 = #C1;
-  () → self::A f2 = #C2;
-  () → self::A f3 = #C3;
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
   self::A x1 = f1(){() → self::A};
   self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
   self::A x3;
@@ -39,7 +39,10 @@
   return self::test();
 
 constants  {
-  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
-  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
-  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
index 1ff3758..05e5e9d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -54,7 +54,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -65,7 +65,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -74,32 +74,32 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -108,7 +108,7 @@
     ;
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
 }
@@ -118,7 +118,7 @@
     ;
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
 }
@@ -129,23 +129,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C10;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C10;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C11;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C11;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C12;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -157,12 +157,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C12;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C13;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -173,9 +173,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C13;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -191,10 +191,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C14;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -222,16 +222,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C15;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C16;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -244,7 +244,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -259,14 +259,22 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = redirecting-factory-tearoff self::Class1::•
-  #C3 = redirecting-factory-tearoff self::Class2::named
-  #C4 = redirecting-factory-tearoff self::Class3::•
-  #C5 = redirecting-factory-tearoff self::Class4::•
-  #C6 = redirecting-factory-tearoff self::Class5::•
-  #C7 = redirecting-factory-tearoff self::Class6::•
-  #C8 = redirecting-factory-tearoff self::Class7b::•
-  #C9 = redirecting-factory-tearoff self::Class8b::•
-  #C10 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
index 83c7798..c321ab5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.strong.transformed.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -54,7 +54,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -65,7 +65,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -74,32 +74,32 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -108,7 +108,7 @@
     ;
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
 }
@@ -118,7 +118,7 @@
     ;
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
 }
@@ -129,23 +129,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C10;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C10;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C11;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C11;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C12;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -157,12 +157,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C12;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C13;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -173,9 +173,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C13;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -191,10 +191,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C14;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -222,16 +222,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C15;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C16;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -244,7 +244,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -259,14 +259,22 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = redirecting-factory-tearoff self::Class1::•
-  #C3 = redirecting-factory-tearoff self::Class2::named
-  #C4 = redirecting-factory-tearoff self::Class3::•
-  #C5 = redirecting-factory-tearoff self::Class4::•
-  #C6 = redirecting-factory-tearoff self::Class5::•
-  #C7 = redirecting-factory-tearoff self::Class6::•
-  #C8 = redirecting-factory-tearoff self::Class7b::•
-  #C9 = redirecting-factory-tearoff self::Class8b::•
-  #C10 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
index 1ff3758..05e5e9d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -54,7 +54,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -65,7 +65,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -74,32 +74,32 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -108,7 +108,7 @@
     ;
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
 }
@@ -118,7 +118,7 @@
     ;
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
 }
@@ -129,23 +129,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C10;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C10;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C11;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C11;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C12;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -157,12 +157,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C12;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C13;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -173,9 +173,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C13;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -191,10 +191,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C14;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -222,16 +222,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C15;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C16;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -244,7 +244,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -259,14 +259,22 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = redirecting-factory-tearoff self::Class1::•
-  #C3 = redirecting-factory-tearoff self::Class2::named
-  #C4 = redirecting-factory-tearoff self::Class3::•
-  #C5 = redirecting-factory-tearoff self::Class4::•
-  #C6 = redirecting-factory-tearoff self::Class5::•
-  #C7 = redirecting-factory-tearoff self::Class6::•
-  #C8 = redirecting-factory-tearoff self::Class7b::•
-  #C9 = redirecting-factory-tearoff self::Class8b::•
-  #C10 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
index 3714e57..7d012c0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -82,3 +82,15 @@
   ;
 static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:13:7 -> ConstructorTearOffConstant(Class1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:18:7 -> ConstructorTearOffConstant(Class2.named)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:46:7 -> ConstructorTearOffConstant(Class3.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:53:7 -> ConstructorTearOffConstant(Class4.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:60:7 -> ConstructorTearOffConstant(Class5.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:68:7 -> ConstructorTearOffConstant(Class6.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:82:7 -> ConstructorTearOffConstant(Class7b.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_tear_off.dart:90:7 -> ConstructorTearOffConstant(Class8b.)
+Extra constant evaluation: evaluated: 31, effectively constant: 8
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
index 83c7798..c321ab5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.transformed.expect
@@ -46,7 +46,7 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -54,7 +54,7 @@
     return new self::Class1::_();
 }
 class Class2 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class2::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor __() → self::Class2
     : super core::Object::•()
     ;
@@ -65,7 +65,7 @@
 }
 class Class3 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class3::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _(core::int field) → self::Class3
     : self::Class3::field = field, super core::Object::•()
     ;
@@ -74,32 +74,32 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field = #C1]) → self::Class4
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
     : self::Class4::field = field, super core::Object::•()
     ;
-  static factory •([core::int? field = #C1]) → self::Class4
+  static factory •([core::int? field = #C5]) → self::Class4
     return new self::Class4::_(field);
 }
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
     : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
     ;
-  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
     return new self::Class5::_(field1, field2);
 }
 class Class6 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
     ;
-  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
 }
 class Class7a extends core::Object implements self::Class7b {
@@ -108,7 +108,7 @@
     ;
 }
 class Class7b extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class7b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   static factory •() → self::Class7b
     return new self::Class7a::•();
 }
@@ -118,7 +118,7 @@
     ;
 }
 class Class8b<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class8b::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
     return new self::Class8a::•<self::Class8b::•::T%>();
 }
@@ -129,23 +129,23 @@
   self::testArgs();
 }
 static method testNoArgs() → dynamic {
-  () → self::Class1 f1a = #C2;
+  () → self::Class1 f1a = #C10;
   self::Class1 c1a = f1a(){() → self::Class1};
   self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
-  dynamic f1b = #C2;
+  dynamic f1b = #C10;
   dynamic c1b = f1b{dynamic}.call();
   self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
   self::expect(true, core::identical(f1a, f1b));
-  () → self::Class2 f2a = #C3;
+  () → self::Class2 f2a = #C11;
   self::Class2 c2a = f2a(){() → self::Class2};
   self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
-  dynamic f2b = #C3;
+  dynamic f2b = #C11;
   dynamic c2b = f2b{dynamic}.call();
   self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
   self::expect(true, core::identical(f2a, f2b));
 }
 static method testArgs() → dynamic {
-  (core::int) → self::Class3 f3a = #C4;
+  (core::int) → self::Class3 f3a = #C12;
   self::Class3 c3a = f3a(42){(core::int) → self::Class3};
   self::expect(42, c3a.{self::Class3::field}{core::int});
   () → Null {
@@ -157,12 +157,12 @@
     f3a(42, 87); // error
        ^" in f3a{<inapplicable>}.(42, 87);
   };
-  dynamic f3b = #C4;
+  dynamic f3b = #C12;
   dynamic c3b = f3b{dynamic}.call(87);
   self::expect(87, c3b{dynamic}.field);
   self::throws(() → dynamic => f3b{dynamic}.call());
   self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
-  ([core::int?]) → self::Class4 f4a = #C5;
+  ([core::int?]) → self::Class4 f4a = #C13;
   self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
   self::expect(null, c4a.{self::Class4::field}{core::int?});
   self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
@@ -173,9 +173,9 @@
     f4a(42, 87); // error
        ^" in f4a{<inapplicable>}.(42, 87);
   };
-  dynamic f4b = #C5;
+  dynamic f4b = #C13;
   self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
-  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
   self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
   self::expect(42, c5a.{self::Class5::field1}{core::int});
   self::expect(null, c5a.{self::Class5::field2}{core::int?});
@@ -191,10 +191,10 @@
     f5a(42, 87, 123); // error
        ^" in f5a{<inapplicable>}.(42, 87, 123);
   };
-  dynamic f5b = #C6;
+  dynamic f5b = #C14;
   self::throws(() → dynamic => f5b{dynamic}.call());
   self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
-  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
   self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
   self::expect(42, c6a.{self::Class6::field1}{core::int});
   self::expect(null, c6a.{self::Class6::field2}{core::int?});
@@ -222,16 +222,16 @@
   self::expect(87, c6c.{self::Class6::field1}{core::int});
   self::expect(123, c6c.{self::Class6::field2}{core::int?});
   self::expect(42, c6c.{self::Class6::field3}{core::int});
-  dynamic f6b = #C7;
+  dynamic f6b = #C15;
   self::throws(() → dynamic => f6b{dynamic}.call());
   self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
   self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
-  () → self::Class7b f7a = #C8;
+  () → self::Class7b f7a = #C16;
   self::Class7b c7a = f7a(){() → self::Class7b};
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
   self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
-  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C9;
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
   self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
   self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
@@ -244,7 +244,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -259,14 +259,22 @@
 }
 
 constants  {
-  #C1 = null
-  #C2 = redirecting-factory-tearoff self::Class1::•
-  #C3 = redirecting-factory-tearoff self::Class2::named
-  #C4 = redirecting-factory-tearoff self::Class3::•
-  #C5 = redirecting-factory-tearoff self::Class4::•
-  #C6 = redirecting-factory-tearoff self::Class5::•
-  #C7 = redirecting-factory-tearoff self::Class6::•
-  #C8 = redirecting-factory-tearoff self::Class7b::•
-  #C9 = redirecting-factory-tearoff self::Class8b::•
-  #C10 = false
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
index ba3e087..a3ee0a4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.expect
@@ -83,5 +83,5 @@
 
 constants  {
   #C1 = static-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
index ba3e087..a3ee0a4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.strong.transformed.expect
@@ -83,5 +83,5 @@
 
 constants  {
   #C1 = static-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int>
+  #C2 = instantiation #C1 <core::int>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
index 59bdc1d..6f79e9e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.expect
@@ -83,5 +83,5 @@
 
 constants  {
   #C1 = static-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
index 59bdc1d..6f79e9e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.transformed.expect
@@ -83,5 +83,5 @@
 
 constants  {
   #C1 = static-tearoff self::A::foo
-  #C2 = instantiation self::A::foo <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.expect
index 6c0edc7..fb71a2b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.expect
@@ -125,17 +125,17 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <>
+  #C2 = instantiation #C1 <>
   #C3 = constructor-tearoff self::B::•
-  #C4 = instantiation self::B::• <core::String>
+  #C4 = instantiation #C3 <core::String>
   #C5 = constructor-tearoff self::B::foo
-  #C6 = instantiation self::B::foo <core::String>
-  #C7 = static-tearoff self::B::bar
-  #C8 = instantiation self::B::bar <core::String>
-  #C9 = instantiation self::B::• <core::num>
-  #C10 = instantiation self::B::foo <core::num>
-  #C11 = instantiation self::B::bar <core::num>
+  #C6 = instantiation #C5 <core::String>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String>
+  #C9 = instantiation #C3 <core::num>
+  #C10 = instantiation #C5 <core::num>
+  #C11 = instantiation #C7 <core::num>
   #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
   #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
-  #C14 = instantiation self::B::• <Never>
+  #C14 = instantiation #C3 <Never>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.transformed.expect
index 9c2c674..d5b1440 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.strong.transformed.expect
@@ -125,17 +125,17 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <>
+  #C2 = instantiation #C1 <>
   #C3 = constructor-tearoff self::B::•
-  #C4 = instantiation self::B::• <core::String>
+  #C4 = instantiation #C3 <core::String>
   #C5 = constructor-tearoff self::B::foo
-  #C6 = instantiation self::B::foo <core::String>
-  #C7 = static-tearoff self::B::bar
-  #C8 = instantiation self::B::bar <core::String>
-  #C9 = instantiation self::B::• <core::num>
-  #C10 = instantiation self::B::foo <core::num>
-  #C11 = instantiation self::B::bar <core::num>
+  #C6 = instantiation #C5 <core::String>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String>
+  #C9 = instantiation #C3 <core::num>
+  #C10 = instantiation #C5 <core::num>
+  #C11 = instantiation #C7 <core::num>
   #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
   #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
-  #C14 = instantiation self::B::• <Never>
+  #C14 = instantiation #C3 <Never>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.expect
index 8de913d..f075526 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.expect
@@ -125,17 +125,17 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <>
+  #C2 = instantiation #C1 <>
   #C3 = constructor-tearoff self::B::•
-  #C4 = instantiation self::B::• <core::String*>
+  #C4 = instantiation #C3 <core::String*>
   #C5 = constructor-tearoff self::B::foo
-  #C6 = instantiation self::B::foo <core::String*>
-  #C7 = static-tearoff self::B::bar
-  #C8 = instantiation self::B::bar <core::String*>
-  #C9 = instantiation self::B::• <core::num*>
-  #C10 = instantiation self::B::foo <core::num*>
-  #C11 = instantiation self::B::bar <core::num*>
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String*>
+  #C9 = instantiation #C3 <core::num*>
+  #C10 = instantiation #C5 <core::num*>
+  #C11 = instantiation #C7 <core::num*>
   #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
   #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
-  #C14 = instantiation self::B::• <Never*>
+  #C14 = instantiation #C3 <Never*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.transformed.expect
index 82dceb0..e9462e1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.transformed.expect
@@ -125,17 +125,17 @@
 
 constants  {
   #C1 = constructor-tearoff self::A::•
-  #C2 = instantiation self::A::• <>
+  #C2 = instantiation #C1 <>
   #C3 = constructor-tearoff self::B::•
-  #C4 = instantiation self::B::• <core::String*>
+  #C4 = instantiation #C3 <core::String*>
   #C5 = constructor-tearoff self::B::foo
-  #C6 = instantiation self::B::foo <core::String*>
-  #C7 = static-tearoff self::B::bar
-  #C8 = instantiation self::B::bar <core::String*>
-  #C9 = instantiation self::B::• <core::num*>
-  #C10 = instantiation self::B::foo <core::num*>
-  #C11 = instantiation self::B::bar <core::num*>
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String*>
+  #C9 = instantiation #C3 <core::num*>
+  #C10 = instantiation #C5 <core::num*>
+  #C11 = instantiation #C7 <core::num*>
   #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
   #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
-  #C14 = instantiation self::B::• <Never*>
+  #C14 = instantiation #C3 <Never*>
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
index 87df92f..34009a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -33,20 +33,20 @@
 }
 static method test() → dynamic {
   new self::D::•(1);
-  #C2;
+  #C4;
   new self::C::•(1);
-  () → self::A f1 = #C3;
-  () → self::B f2 = #C4;
-  (core::int) → self::C f3 = #C5;
-  (core::int) → self::D f4 = #C6;
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
   f1(){() → self::A};
   f2(){() → self::B};
   f3(1){(core::int) → self::C};
   f4(1){(core::int) → self::D};
-  () → self::A g1 = #C3;
-  () → self::B g2 = #C4;
-  (core::int) → self::C g3 = #C5;
-  (core::int) → self::D g4 = #C6;
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
   g1(){() → self::A};
   g2(){() → self::B};
   g3(1){(core::int) → self::C};
@@ -55,12 +55,14 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 1
-  #C2 = self::C {x:#C1}
-  #C3 = constructor-tearoff self::A::•
-  #C4 = constructor-tearoff self::B::•
-  #C5 = constructor-tearoff self::C::•
-  #C6 = constructor-tearoff self::D::•
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
index 87df92f..34009a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -33,20 +33,20 @@
 }
 static method test() → dynamic {
   new self::D::•(1);
-  #C2;
+  #C4;
   new self::C::•(1);
-  () → self::A f1 = #C3;
-  () → self::B f2 = #C4;
-  (core::int) → self::C f3 = #C5;
-  (core::int) → self::D f4 = #C6;
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
   f1(){() → self::A};
   f2(){() → self::B};
   f3(1){(core::int) → self::C};
   f4(1){(core::int) → self::D};
-  () → self::A g1 = #C3;
-  () → self::B g2 = #C4;
-  (core::int) → self::C g3 = #C5;
-  (core::int) → self::D g4 = #C6;
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
   g1(){() → self::A};
   g2(){() → self::B};
   g3(1){(core::int) → self::C};
@@ -55,12 +55,14 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 1
-  #C2 = self::C {x:#C1}
-  #C3 = constructor-tearoff self::A::•
-  #C4 = constructor-tearoff self::B::•
-  #C5 = constructor-tearoff self::C::•
-  #C6 = constructor-tearoff self::D::•
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
index 87df92f..34009a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -33,20 +33,20 @@
 }
 static method test() → dynamic {
   new self::D::•(1);
-  #C2;
+  #C4;
   new self::C::•(1);
-  () → self::A f1 = #C3;
-  () → self::B f2 = #C4;
-  (core::int) → self::C f3 = #C5;
-  (core::int) → self::D f4 = #C6;
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
   f1(){() → self::A};
   f2(){() → self::B};
   f3(1){(core::int) → self::C};
   f4(1){(core::int) → self::D};
-  () → self::A g1 = #C3;
-  () → self::B g2 = #C4;
-  (core::int) → self::C g3 = #C5;
-  (core::int) → self::D g4 = #C6;
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
   g1(){() → self::A};
   g2(){() → self::B};
   g3(1){(core::int) → self::C};
@@ -55,12 +55,14 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 1
-  #C2 = self::C {x:#C1}
-  #C3 = constructor-tearoff self::A::•
-  #C4 = constructor-tearoff self::B::•
-  #C5 = constructor-tearoff self::C::•
-  #C6 = constructor-tearoff self::D::•
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
 }
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
index 0041523..c11e3fa 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
@@ -31,3 +31,9 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///unnamed_constructor.dart:5:7 -> ConstructorTearOffConstant(A.redirectingFactory)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///unnamed_constructor.dart:5:7 -> ConstructorTearOffConstant(A.redirectingFactoryChild)
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
index 87df92f..34009a6 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   constructor •() → self::A
     : super core::Object::•()
     ;
@@ -33,20 +33,20 @@
 }
 static method test() → dynamic {
   new self::D::•(1);
-  #C2;
+  #C4;
   new self::C::•(1);
-  () → self::A f1 = #C3;
-  () → self::B f2 = #C4;
-  (core::int) → self::C f3 = #C5;
-  (core::int) → self::D f4 = #C6;
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
   f1(){() → self::A};
   f2(){() → self::B};
   f3(1){(core::int) → self::C};
   f4(1){(core::int) → self::D};
-  () → self::A g1 = #C3;
-  () → self::B g2 = #C4;
-  (core::int) → self::C g3 = #C5;
-  (core::int) → self::D g4 = #C6;
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
   g1(){() → self::A};
   g2(){() → self::B};
   g3(1){(core::int) → self::C};
@@ -55,12 +55,14 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 1
-  #C2 = self::C {x:#C1}
-  #C3 = constructor-tearoff self::A::•
-  #C4 = constructor-tearoff self::B::•
-  #C5 = constructor-tearoff self::C::•
-  #C6 = constructor-tearoff self::D::•
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
 }
 
 
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.expect
index fb9bcc0..177dd51 100644
--- a/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.expect
@@ -19,6 +19,6 @@
 
 constants  {
   #C1 = static-tearoff self::C::_#new#tearOff
-  #C2 = instantiation self::C::_#new#tearOff <core::int>
-  #C3 = instantiation self::C::_#new#tearOff <core::String>
+  #C2 = instantiation #C1 <core::int>
+  #C3 = instantiation #C1 <core::String>
 }
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.transformed.expect
index bae63cb..acaab65 100644
--- a/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.strong.transformed.expect
@@ -19,8 +19,8 @@
 
 constants  {
   #C1 = static-tearoff self::C::_#new#tearOff
-  #C2 = instantiation self::C::_#new#tearOff <core::int>
-  #C3 = instantiation self::C::_#new#tearOff <core::String>
+  #C2 = instantiation #C1 <core::int>
+  #C3 = instantiation #C1 <core::String>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.expect
index 04f3df1..39841ce 100644
--- a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.expect
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.expect
@@ -19,6 +19,6 @@
 
 constants  {
   #C1 = static-tearoff self::C::_#new#tearOff
-  #C2 = instantiation self::C::_#new#tearOff <core::int*>
-  #C3 = instantiation self::C::_#new#tearOff <core::String*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
 }
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.transformed.expect
index 0f3b2dc..3e71f95 100644
--- a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.transformed.expect
@@ -19,8 +19,8 @@
 
 constants  {
   #C1 = static-tearoff self::C::_#new#tearOff
-  #C2 = instantiation self::C::_#new#tearOff <core::int*>
-  #C3 = instantiation self::C::_#new#tearOff <core::String*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
index 36647b1..d76d693 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.expect
@@ -25,7 +25,7 @@
     ;
 }
 abstract class B extends core::Object implements self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::B
     return invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
  - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
@@ -42,3 +42,7 @@
                 ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
index ff08754..8f5d709 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.outline.expect
@@ -32,3 +32,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///abstract_instantiation.dart:7:16 -> ConstructorTearOffConstant(B.)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
index 36647b1..d76d693 100644
--- a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
     ;
 }
 abstract class B extends core::Object implements self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::B
     return invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
  - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
@@ -42,3 +42,7 @@
                 ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
index e7b3e08..35d93a3 100644
--- a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
@@ -651,11 +651,11 @@
   #C24 = static-tearoff self3::id
   #C25 = constructor-tearoff self3::Class::•
   #C26 = <self3::Class<invalid-type>*>[]
-  #C27 = instantiation self3::Class::• <core::int*>
+  #C27 = instantiation #C25 <core::int*>
   #C28 = TypeLiteralConstant(self3::Class<invalid-type>*)
-  #C29 = instantiation self3::id <invalid-type>
-  #C30 = instantiation self3::Class::• <invalid-type>
-  #C31 = instantiation self3::id <self3::Class<invalid-type>*>
+  #C29 = instantiation #C24 <invalid-type>
+  #C30 = instantiation #C25 <invalid-type>
+  #C31 = instantiation #C24 <self3::Class<invalid-type>*>
   #C32 = <core::Type*>[#C28]
   #C33 = <(invalid-type) →* invalid-type>[#C29]
   #C34 = <self3::Class<invalid-type>*>[#C8]
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
index e7b3e08..35d93a3 100644
--- a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
@@ -651,11 +651,11 @@
   #C24 = static-tearoff self3::id
   #C25 = constructor-tearoff self3::Class::•
   #C26 = <self3::Class<invalid-type>*>[]
-  #C27 = instantiation self3::Class::• <core::int*>
+  #C27 = instantiation #C25 <core::int*>
   #C28 = TypeLiteralConstant(self3::Class<invalid-type>*)
-  #C29 = instantiation self3::id <invalid-type>
-  #C30 = instantiation self3::Class::• <invalid-type>
-  #C31 = instantiation self3::id <self3::Class<invalid-type>*>
+  #C29 = instantiation #C24 <invalid-type>
+  #C30 = instantiation #C25 <invalid-type>
+  #C31 = instantiation #C24 <self3::Class<invalid-type>*>
   #C32 = <core::Type*>[#C28]
   #C33 = <(invalid-type) →* invalid-type>[#C29]
   #C34 = <self3::Class<invalid-type>*>[#C8]
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
index 62853b9..9fa5cbe 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
@@ -630,7 +630,7 @@
   #C19 = self::ClassWithTypeArguments<core::int*, core::int*, core::int*> {}
   #C20 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
   #C21 = static-tearoff self::id1
-  #C22 = instantiation self::id1 <core::int*>
+  #C22 = instantiation #C21 <core::int*>
 }
 
 
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
index 9d9530c..37e4135 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
@@ -630,7 +630,7 @@
   #C19 = self::ClassWithTypeArguments<core::int*, core::int*, core::int*> {}
   #C20 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
   #C21 = static-tearoff self::id1
-  #C22 = instantiation self::id1 <core::int*>
+  #C22 = instantiation #C21 <core::int*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.expect
index 942009a..d4686ed 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.expect
@@ -104,7 +104,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object*)
   #C2 = static-tearoff var::id1
-  #C3 = instantiation var::id1 <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = var::Class<core::int*> {field:#C4}
   #C6 = 42
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
index 6a48cb7..43ae6e3 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
@@ -104,7 +104,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object*)
   #C2 = static-tearoff var::id1
-  #C3 = instantiation var::id1 <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = var::Class<core::int*> {field:#C4}
   #C6 = 42
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 d0e5d30..0cdd47c 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
@@ -26,23 +26,24 @@
 @#C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
-  static final field dynamic _redirecting# = <dynamic>[test::Class::redirect]/*isLegacy*/;
-  const constructor _internal({core::bool defaultValue = #C2}) → test::Class
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor _internal({core::bool defaultValue = #C3}) → test::Class
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C4}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  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 = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
   #C1 = _in::_Patch {}
-  #C2 = false
-  #C3 = true
+  #C2 = constructor-tearoff test::Class::redirect
+  #C3 = false
+  #C4 = true
 }
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
index 8534e61..639b7a5 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
@@ -35,4 +35,5 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:27 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:22:17 -> InstanceConstant(const _Patch{})
-Extra constant evaluation: evaluated: 9, effectively constant: 4
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///origin_lib.dart:5:7 -> ConstructorTearOffConstant(Class.redirect)
+Extra constant evaluation: evaluated: 9, effectively constant: 5
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 d0e5d30..0cdd47c 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
@@ -26,23 +26,24 @@
 @#C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
-  static final field dynamic _redirecting# = <dynamic>[test::Class::redirect]/*isLegacy*/;
-  const constructor _internal({core::bool defaultValue = #C2}) → test::Class
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor _internal({core::bool defaultValue = #C3}) → test::Class
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C4}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  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 = #C3}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
 constants  {
   #C1 = _in::_Patch {}
-  #C2 = false
-  #C3 = true
+  #C2 = constructor-tearoff test::Class::redirect
+  #C3 = false
+  #C4 = true
 }
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
index 1f6296f..d1b803d 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
@@ -23,5 +23,5 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
index 6aa6e81..c29de20 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
 
 constants  {
   #C1 = static-tearoff self::id
-  #C2 = instantiation self::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
index a73f4c5..6d764be 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.expect
@@ -65,7 +65,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::C*
     : super core::Object::•()
     ;
@@ -140,12 +140,12 @@
  - 'Object' is from 'dart:core'.
 Change the type of the method or the context in which it is used.
   void Function(Object) i = C.staticFunction;
-                              ^" in #C1;
+                              ^" in #C2;
   (core::Object*) →* void j = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function or the context in which it is used.
   void Function(Object) j = topLevelFunction;
-                            ^" in #C2;
+                            ^" in #C3;
   (core::Object*) →* void k = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function or the context in which it is used.
@@ -162,13 +162,14 @@
   self::D* f = new self::D::•() as{TypeError} self::D*;
   self::C* g = new self::C::nonFact();
   self::C* h = new self::C::nonFact2();
-  (core::int*) →* void i = #C1;
-  (core::int*) →* void j = #C2;
+  (core::int*) →* void i = #C2;
+  (core::int*) →* void j = #C3;
   (core::int*) →* void k = localFunction;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff self::C::staticFunction
-  #C2 = static-tearoff self::topLevelFunction
+  #C1 = constructor-tearoff self::C::fact2
+  #C2 = static-tearoff self::C::staticFunction
+  #C3 = static-tearoff self::topLevelFunction
 }
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
index 6da6ddb..fe7f848 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.outline.expect
@@ -39,3 +39,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///invalid_cast.dart:7:7 -> ConstructorTearOffConstant(C.fact2)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
index 7ea1c1e..d1ae432 100644
--- a/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.transformed.expect
@@ -65,7 +65,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::fact2];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::C*
     : super core::Object::•()
     ;
@@ -140,12 +140,12 @@
  - 'Object' is from 'dart:core'.
 Change the type of the method or the context in which it is used.
   void Function(Object) i = C.staticFunction;
-                              ^" in #C1;
+                              ^" in #C2;
   (core::Object*) →* void j = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function or the context in which it is used.
   void Function(Object) j = topLevelFunction;
-                            ^" in #C2;
+                            ^" in #C3;
   (core::Object*) →* void k = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
  - 'Object' is from 'dart:core'.
 Change the type of the function or the context in which it is used.
@@ -162,13 +162,14 @@
   self::D* f = new self::D::•();
   self::C* g = new self::C::nonFact();
   self::C* h = new self::C::nonFact2();
-  (core::int*) →* void i = #C1;
-  (core::int*) →* void j = #C2;
+  (core::int*) →* void i = #C2;
+  (core::int*) →* void j = #C3;
   (core::int*) →* void k = localFunction;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = static-tearoff self::C::staticFunction
-  #C2 = static-tearoff self::topLevelFunction
+  #C1 = constructor-tearoff self::C::fact2
+  #C2 = static-tearoff self::C::staticFunction
+  #C3 = static-tearoff self::topLevelFunction
 }
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
index bf4d0eb..c0cc024 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
     return new self::B::•<self::A::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -33,3 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+}
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
index 04afde7..6b16904 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
@@ -33,3 +33,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue34714.dart:5:7 -> ConstructorTearOffConstant(A.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
index bf4d0eb..c0cc024 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
     return new self::B::•<self::A::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -33,3 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+}
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
index d009d81..d657617 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.expect
@@ -18,7 +18,7 @@
 export "org-dartlang-testcase:///bar_lib.dart";
 
 abstract class Foo extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[foo::Foo::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   const constructor •() → foo::Foo
     : super core::Object::•()
     ;
@@ -42,6 +42,7 @@
 constants  {
   #C1 = bar::Bar<dynamic> {}
   #C2 = <foo::Foo*>{#C1}
+  #C3 = constructor-tearoff foo::Foo::bar
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
index 277bd57..c3b5d5f 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.outline.expect
@@ -44,4 +44,5 @@
 
 Extra constant evaluation status:
 Evaluated: SetLiteral @ org-dartlang-testcase:///main.dart:7:27 -> SetConstant(const <Foo*>{const Bar<dynamic>{}})
-Extra constant evaluation: evaluated: 4, effectively constant: 1
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///foo_lib.dart:9:16 -> ConstructorTearOffConstant(Foo.bar)
+Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
index d009d81..d657617 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
 export "org-dartlang-testcase:///bar_lib.dart";
 
 abstract class Foo extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[foo::Foo::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   const constructor •() → foo::Foo
     : super core::Object::•()
     ;
@@ -42,6 +42,7 @@
 constants  {
   #C1 = bar::Bar<dynamic> {}
   #C2 = <foo::Foo*>{#C1}
+  #C3 = constructor-tearoff foo::Foo::bar
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
index dcbf1e1..9e86d1c 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.expect
@@ -13,7 +13,7 @@
     ;
 }
 abstract class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor •() → self::A
     : super core::Object::•()
     ;
@@ -24,6 +24,7 @@
 
 constants  {
   #C1 = self::B<dynamic> {}
+  #C2 = constructor-tearoff self::A::foo
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
index a916713..771d13c 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.outline.expect
@@ -26,4 +26,5 @@
 
 Extra constant evaluation status:
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue45003_2.dart:6:30 -> InstanceConstant(const B<dynamic>{})
-Extra constant evaluation: evaluated: 4, effectively constant: 1
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45003_2.dart:13:16 -> ConstructorTearOffConstant(A.foo)
+Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
index dcbf1e1..9e86d1c 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
     ;
 }
 abstract class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor •() → self::A
     : super core::Object::•()
     ;
@@ -24,6 +24,7 @@
 
 constants  {
   #C1 = self::B<dynamic> {}
+  #C2 = constructor-tearoff self::A::foo
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
index 651a6e4..d517647 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
@@ -31,7 +31,7 @@
 @#C1
 @#C4
 class Array<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
+  static final field dynamic _redirecting# = <dynamic>[#C5];
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
     return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
@@ -52,6 +52,7 @@
   #C2 = "vm:entry-point"
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
+  #C5 = constructor-tearoff self2::Array::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
index 7c8d05d..f06670d 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
@@ -53,4 +53,5 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:10:1 -> InstanceConstant(const _Patch{})
 Evaluated: ConstructorInvocation @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const pragma{pragma.name: "vm:entry-point", pragma.options: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:14:17 -> InstanceConstant(const _Patch{})
-Extra constant evaluation: evaluated: 8, effectively constant: 3
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///origin_lib.dart:6:7 -> ConstructorTearOffConstant(Array.)
+Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
index 651a6e4..d517647 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
 @#C1
 @#C4
 class Array<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
+  static final field dynamic _redirecting# = <dynamic>[#C5];
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
     return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
@@ -52,6 +52,7 @@
   #C2 = "vm:entry-point"
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
+  #C5 = constructor-tearoff self2::Array::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.expect
index 2fd5dea..e0ea5d7 100644
--- a/pkg/front_end/testcases/general/issue46334.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.expect
@@ -10,10 +10,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C
     return invalid-expression "pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
   factory C() = C;
           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect
index 2ac4318..ccca97c 100644
--- a/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.outline.expect
@@ -18,3 +18,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue46334.dart:5:7 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect
index 2fd5dea..e0ea5d7 100644
--- a/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.transformed.expect
@@ -10,10 +10,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C
     return invalid-expression "pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
   factory C() = C;
           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
index e755d5a..706562c 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
@@ -9,28 +9,28 @@
     ;
 }
 class Settings extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
-  static factory •({@#C2 self::Sidebar sidebar = #C3}) → self::Settings
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C3}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
   final field self::Sidebar sidebar;
-  const constructor •({self::Sidebar sidebar = #C1}) → self::_$_SSettings
+  const constructor •({self::Sidebar sidebar = #C2}) → self::_$_SSettings
     : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[self::_SSidebar::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -42,9 +42,13 @@
 static method main() → void {}
 
 constants  {
-  #C1 = self::_$_SSidebar {}
-  #C2 = self::Default {defaultValue:#C1}
-  #C3 = null
+  #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::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
index ebe57b3..bad6433 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
@@ -44,5 +44,9 @@
 
 
 Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47036.dart:11:7 -> ConstructorTearOffConstant(Settings.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47036.dart:17:7 -> ConstructorTearOffConstant(Sidebar.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47036.dart:21:16 -> ConstructorTearOffConstant(_SSettings.)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47036.dart:26:44 -> InstanceConstant(const _$_SSidebar{})
-Extra constant evaluation: evaluated: 17, effectively constant: 1
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47036.dart:31:16 -> ConstructorTearOffConstant(_SSidebar.)
+Extra constant evaluation: evaluated: 17, effectively constant: 5
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 e755d5a..706562c 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
@@ -9,28 +9,28 @@
     ;
 }
 class Settings extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
-  static factory •({@#C2 self::Sidebar sidebar = #C3}) → self::Settings
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Sidebar::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C3}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
   final field self::Sidebar sidebar;
-  const constructor •({self::Sidebar sidebar = #C1}) → self::_$_SSettings
+  const constructor •({self::Sidebar sidebar = #C2}) → self::_$_SSettings
     : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[self::_SSidebar::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -42,9 +42,13 @@
 static method main() → void {}
 
 constants  {
-  #C1 = self::_$_SSidebar {}
-  #C2 = self::Default {defaultValue:#C1}
-  #C3 = null
+  #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::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47339.dart.weak.expect b/pkg/front_end/testcases/general/issue47339.dart.weak.expect
index eb5e9b2..02f1b57 100644
--- a/pkg/front_end/testcases/general/issue47339.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47339.dart.weak.expect
@@ -5,7 +5,7 @@
 typedef Bar = self::Foo;
 typedef BarGeneric<X extends core::Object? = dynamic> = self::FooGeneric<X%>;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::namedFactory]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   const constructor named() → self::Foo
     : super core::Object::•()
     ;
@@ -13,22 +13,24 @@
     return new self::Foo::named();
 }
 class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::FooGeneric::namedFactory]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor named() → self::FooGeneric<self::FooGeneric::X%>
     : super core::Object::•()
     ;
   static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%>
     return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
 }
-static const field self::Foo bar = #C1;
-static const field self::Foo bar2 = #C1;
-static const field self::FooGeneric<core::int> barGeneric = #C2;
-static const field self::FooGeneric<core::int> barGeneric2 = #C2;
+static const field self::Foo bar = #C3;
+static const field self::Foo bar2 = #C3;
+static const field self::FooGeneric<core::int> barGeneric = #C4;
+static const field self::FooGeneric<core::int> barGeneric2 = #C4;
 static method main() → dynamic {}
 
 constants  {
-  #C1 = self::Foo {}
-  #C2 = self::FooGeneric<core::int*> {}
+  #C1 = constructor-tearoff self::Foo::namedFactory
+  #C2 = constructor-tearoff self::FooGeneric::namedFactory
+  #C3 = self::Foo {}
+  #C4 = self::FooGeneric<core::int*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47339.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47339.dart.weak.outline.expect
index 0a83431..8e10651 100644
--- a/pkg/front_end/testcases/general/issue47339.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47339.dart.weak.outline.expect
@@ -29,8 +29,10 @@
 
 
 Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47339.dart:5:7 -> ConstructorTearOffConstant(Foo.namedFactory)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue47339.dart:16:7 -> ConstructorTearOffConstant(FooGeneric.namedFactory)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:12:11 -> InstanceConstant(const Foo{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:14:22 -> InstanceConstant(const Foo{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:23:23 -> InstanceConstant(const FooGeneric<int*>{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue47339.dart:25:48 -> InstanceConstant(const FooGeneric<int*>{})
-Extra constant evaluation: evaluated: 10, effectively constant: 4
+Extra constant evaluation: evaluated: 10, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/issue47339.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47339.dart.weak.transformed.expect
index eb5e9b2..02f1b57 100644
--- a/pkg/front_end/testcases/general/issue47339.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47339.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 typedef Bar = self::Foo;
 typedef BarGeneric<X extends core::Object? = dynamic> = self::FooGeneric<X%>;
 class Foo extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::namedFactory]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   const constructor named() → self::Foo
     : super core::Object::•()
     ;
@@ -13,22 +13,24 @@
     return new self::Foo::named();
 }
 class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::FooGeneric::namedFactory]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor named() → self::FooGeneric<self::FooGeneric::X%>
     : super core::Object::•()
     ;
   static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%>
     return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
 }
-static const field self::Foo bar = #C1;
-static const field self::Foo bar2 = #C1;
-static const field self::FooGeneric<core::int> barGeneric = #C2;
-static const field self::FooGeneric<core::int> barGeneric2 = #C2;
+static const field self::Foo bar = #C3;
+static const field self::Foo bar2 = #C3;
+static const field self::FooGeneric<core::int> barGeneric = #C4;
+static const field self::FooGeneric<core::int> barGeneric2 = #C4;
 static method main() → dynamic {}
 
 constants  {
-  #C1 = self::Foo {}
-  #C2 = self::FooGeneric<core::int*> {}
+  #C1 = constructor-tearoff self::Foo::namedFactory
+  #C2 = constructor-tearoff self::FooGeneric::namedFactory
+  #C3 = self::Foo {}
+  #C4 = self::FooGeneric<core::int*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47462.dart b/pkg/front_end/testcases/general/issue47462.dart
new file mode 100644
index 0000000..17b9e38
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef MyList<T extends num> = List<T>;
+
+main() {
+  const c1 = MyList<num>.filled;
+  const c2 = MyList<num>.filled;
+  const c3 = (MyList.filled)<num>;
+
+  const c4 = identical(c1, c2);
+  const c5 = identical(c1, c3);
+
+  expect(true, c4);
+  expect(false, c5);
+
+  expect(true, identical(c1, c2));
+  expect(false, identical(c1, c3));
+
+  var v1 = MyList<num>.filled;
+  var v2 = MyList<num>.filled;
+  var v3 = (MyList.filled)<num>;
+
+  var v4 = identical(v1, v2);
+  var v5 = identical(v1, v3);
+
+  expect(true, v4);
+  expect(false, v5);
+
+  expect(true, identical(v1, v2));
+  expect(false, identical(v1, v3));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/general/issue47462.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47462.dart.textual_outline.expect
new file mode 100644
index 0000000..f4c644d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+typedef MyList<T extends num> = List<T>;
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/general/issue47462.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47462.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f083298
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+expect(expected, actual) {}
+main() {}
+typedef MyList<T extends num> = List<T>;
diff --git a/pkg/front_end/testcases/general/issue47462.dart.weak.expect b/pkg/front_end/testcases/general/issue47462.dart.weak.expect
new file mode 100644
index 0000000..2a6bd0b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.weak.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect
new file mode 100644
index 0000000..b89a67b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
diff --git a/pkg/front_end/testcases/general/issue47462.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47462.dart.weak.transformed.expect
new file mode 100644
index 0000000..9e2f5a1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.weak.transformed.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::_List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
+
+Extra constant evaluation status:
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:18:16 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47462.dart:19:17 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 52, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.expect b/pkg/front_end/testcases/general/private_members.dart.weak.expect
index bf194cb..7d67ee2 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.expect
@@ -13,7 +13,7 @@
 class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
   field core::int _privateField = 1;
   field core::int _privateFinalField = 1;
-  static final field dynamic _redirecting# = <dynamic>[self::_Class::_privateRedirectingFactory]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _privateConstructor() → self::_Class
     : super core::Object::•()
     ;
@@ -56,3 +56,7 @@
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateGetter(lowered final core::int #this) → core::int
   return 42;
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void {}
+
+constants  {
+  #C1 = constructor-tearoff self::_Class::_privateRedirectingFactory
+}
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect b/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
index fdc9a0e..c51001d 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.outline.expect
@@ -46,3 +46,8 @@
   ;
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///private_members_part.dart:11:7 -> ConstructorTearOffConstant(_Class._privateRedirectingFactory)
+Extra constant evaluation: evaluated: 6, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect b/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
index bf194cb..7d67ee2 100644
--- a/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
 class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
   field core::int _privateField = 1;
   field core::int _privateFinalField = 1;
-  static final field dynamic _redirecting# = <dynamic>[self::_Class::_privateRedirectingFactory]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _privateConstructor() → self::_Class
     : super core::Object::•()
     ;
@@ -56,3 +56,7 @@
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateGetter(lowered final core::int #this) → core::int
   return 42;
 static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void {}
+
+constants  {
+  #C1 = constructor-tearoff self::_Class::_privateRedirectingFactory
+}
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.expect b/pkg/front_end/testcases/general/qualified.dart.weak.expect
index 4deccd1..59d3ddb 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static final field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
@@ -114,7 +114,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → lib::C<lib::C::T*>*
     : super self::C::•()
     ;
@@ -160,3 +160,8 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::b
+  #C2 = constructor-tearoff lib::C::b
+}
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
index 7528cb9..57448e6 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
@@ -143,3 +143,9 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///qualified_part.dart:7:7 -> ConstructorTearOffConstant(C.b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///qualified_lib.dart:9:7 -> ConstructorTearOffConstant(C.b)
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
index a982723..83dac20 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
@@ -74,7 +74,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static final field dynamic _redirecting# = <dynamic>[self::C::b];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
@@ -115,7 +115,7 @@
 
 typedef VoidFunction = () →* void;
 class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → lib::C<lib::C::T*>*
     : super self::C::•()
     ;
@@ -161,3 +161,8 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::b
+  #C2 = constructor-tearoff lib::C::b
+}
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
index 0173839..293f8a2 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -28,3 +28,7 @@
 static method main() → dynamic {
   new self::B::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::fisk
+}
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
index 94296d3..2ae8aaa 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
@@ -25,3 +25,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_constructor.dart:5:7 -> ConstructorTearOffConstant(A.fisk)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
index 0173839..293f8a2 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -28,3 +28,7 @@
 static method main() → dynamic {
   new self::B::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::fisk
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
index 6155d9d..ba2466c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
@@ -32,7 +32,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -86,7 +86,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[#C3];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -101,7 +101,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[#C4];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -174,3 +174,10 @@
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::FooBase::•
+  #C2 = constructor-tearoff self::Foo::•
+  #C3 = constructor-tearoff self::SimpleCase::•
+  #C4 = constructor-tearoff self::SimpleCaseImpl::•
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
index 611e0cc..6978627 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
@@ -156,3 +156,11 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:5:16 -> ConstructorTearOffConstant(FooBase.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:10:16 -> ConstructorTearOffConstant(Foo.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:27:7 -> ConstructorTearOffConstant(SimpleCase.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:31:7 -> ConstructorTearOffConstant(SimpleCaseImpl.)
+Extra constant evaluation: evaluated: 12, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
index 0f768e15..025c11c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 
 abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get x() → core::int*;
   static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
     return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
@@ -32,7 +32,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
     return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -86,7 +86,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
+  static final field dynamic _redirecting# = <dynamic>[#C3];
   static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
     return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -101,7 +101,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
+  static final field dynamic _redirecting# = <dynamic>[#C4];
   static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
     return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -174,3 +174,10 @@
   new self::SimpleCaseImpl2::•<core::int*, core::double*>();
   new self::Mix::•<core::double*>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::FooBase::•
+  #C2 = constructor-tearoff self::Foo::•
+  #C3 = constructor-tearoff self::SimpleCase::•
+  #C4 = constructor-tearoff self::SimpleCaseImpl::•
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
index 16a9cdc..e86259e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -25,3 +25,8 @@
 static method main() → dynamic {
   new self::A::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::first
+  #C2 = constructor-tearoff self::A::second
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
index 3f90310..8eeb6bc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
@@ -23,3 +23,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_chain_test.dart:10:7 -> ConstructorTearOffConstant(A.first)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_chain_test.dart:10:7 -> ConstructorTearOffConstant(A.second)
+Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
index 16a9cdc..e86259e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -25,3 +25,8 @@
 static method main() → dynamic {
   new self::A::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::first
+  #C2 = constructor-tearoff self::A::second
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
index e5a7448..3dc0b99 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     return new self::_Y::•<self::_X::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -50,7 +50,7 @@
 }
 class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
   constructor •() → self::B<self::B::T*>*
-    : super self::A::•(#C1)
+    : super self::A::•(#C2)
     ;
 }
 static method main() → dynamic {
@@ -61,7 +61,8 @@
 }
 
 constants  {
-  #C1 = self::_Y<Null> {}
+  #C1 = constructor-tearoff self::_X::•
+  #C2 = self::_Y<Null> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
index 55c2b59..23c7bac 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
@@ -53,3 +53,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_const_inference.dart:9:7 -> ConstructorTearOffConstant(_X.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
index e5a7448..3dc0b99 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
     return new self::_Y::•<self::_X::•::T*>();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -50,7 +50,7 @@
 }
 class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
   constructor •() → self::B<self::B::T*>*
-    : super self::A::•(#C1)
+    : super self::A::•(#C2)
     ;
 }
 static method main() → dynamic {
@@ -61,7 +61,8 @@
 }
 
 constants  {
-  #C1 = self::_Y<Null> {}
+  #C1 = constructor-tearoff self::_X::•
+  #C2 = self::_Y<Null> {}
 }
 
 
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 f1030db..4a74b87 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
@@ -12,8 +12,8 @@
 
 class A extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
   static factory redirect([core::int field]) → self::A
@@ -31,5 +31,6 @@
 }
 
 constants  {
-  #C1 = 42
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = 42
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
index c031d22..7669a3f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
@@ -14,3 +14,8 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_default_value.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
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 f1030db..4a74b87 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
@@ -12,8 +12,8 @@
 
 class A extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
-  constructor •([core::int field = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
   static factory redirect([core::int field]) → self::A
@@ -31,5 +31,6 @@
 }
 
 constants  {
-  #C1 = 42
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = 42
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
index 27d959b..f674d71 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.expect
@@ -101,7 +101,7 @@
 
 class Class1 extends core::Object {
   field core::int field = 0;
-  static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor _() → self::Class1
     : super core::Object::•()
     ;
@@ -184,12 +184,13 @@
     super.foo(new self::Class1::_());
     super.+(new self::Class1::_());
   }
-  method method({dynamic a = #C1}) → dynamic {}
+  method method({dynamic a = #C2}) → dynamic {}
   get call() → core::int
     return 0;
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
index 8977ba1..70bc2cc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
@@ -23,3 +23,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_invocation_in_invalid.dart:5:7 -> ConstructorTearOffConstant(Class1.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
index 39405c7..4f4319e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
@@ -18,7 +18,7 @@
 typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
 @#C1
 class Const extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor internal() → self::Const
     : super core::Object::•()
     ;
@@ -27,24 +27,24 @@
 }
 class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
   @#C1
-  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {
+  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {
     @#C1 dynamic l1;
     @#C1
-    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {}
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {}
   };
   @#C1
   constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
   @#C1
-  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
     @#C1 dynamic l1;
     @#C1
-    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
   }
   @#C1
-  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
   }
 }
 @#C1
@@ -56,46 +56,47 @@
   tearoff method2 = self::Extension|get#method2;
 }
 @#C1
-static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 };
 @#C1
-static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 };
 @#C1
-static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 }
 @#C1
-static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
 }
 @#C1
-static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 }
 static method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
-  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C2]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C3]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
 @#C1
-static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
 }
 static method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
-  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C2}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C3}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
 static method main() → dynamic {}
 
 constants  {
   #C1 = self::Const {}
-  #C2 = null
+  #C2 = constructor-tearoff self::Const::•
+  #C3 = null
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
index 777c550..ac02ea3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
@@ -80,6 +80,7 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:85:2 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:86:24 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:17:2 -> InstanceConstant(const Const{})
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:18:7 -> ConstructorTearOffConstant(Const.)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:46:14 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:56:4 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:59:4 -> InstanceConstant(const Const{})
@@ -98,4 +99,4 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:109:12 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:23:2 -> InstanceConstant(const Const{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:90:4 -> InstanceConstant(const Const{})
-Extra constant evaluation: evaluated: 41, effectively constant: 28
+Extra constant evaluation: evaluated: 41, effectively constant: 29
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
index 39405c7..4f4319e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
 typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
 @#C1
 class Const extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::Const::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   const constructor internal() → self::Const
     : super core::Object::•()
     ;
@@ -27,24 +27,24 @@
 }
 class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
   @#C1
-  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {
+  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {
     @#C1 dynamic l1;
     @#C1
-    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {}
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {}
   };
   @#C1
   constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
   @#C1
-  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
     @#C1 dynamic l1;
     @#C1
-    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
   }
   @#C1
-  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
   }
 }
 @#C1
@@ -56,46 +56,47 @@
   tearoff method2 = self::Extension|get#method2;
 }
 @#C1
-static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 };
 @#C1
-static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 };
 @#C1
-static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 }
 @#C1
-static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
 }
 @#C1
-static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → dynamic {
+static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
   @#C1 dynamic l1;
   @#C1
-  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C2]) → Null {}
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
 }
 static method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
-  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C2]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C3]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
 @#C1
-static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → dynamic {
-  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C2}) → Null {};
+static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
 }
 static method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
-  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C2}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C3}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
 static method main() → dynamic {}
 
 constants  {
   #C1 = self::Const {}
-  #C2 = null
+  #C2 = constructor-tearoff self::Const::•
+  #C3 = null
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
index 9cea1c8..9b12539 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor named(dynamic p) → self::Foo*
     : super core::Object::•()
     ;
-  @#C1
-  static factory •(@#C2 @#C3 dynamic p) → self::Foo*
+  @#C2
+  static factory •(@#C3 @#C4 dynamic p) → self::Foo*
     return new self::Foo::named(p);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -21,13 +21,14 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* forParameter = #C2;
-static const field core::int* forFactoryItself = #C1;
-static const field core::int* anotherForParameter = #C3;
+static const field core::int* forParameter = #C3;
+static const field core::int* forFactoryItself = #C2;
+static const field core::int* anotherForParameter = #C4;
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 2
-  #C2 = 1
-  #C3 = 3
+  #C1 = constructor-tearoff self::Foo::•
+  #C2 = 2
+  #C3 = 1
+  #C4 = 3
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
index f807177..69d94af 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
@@ -29,4 +29,5 @@
 
 Extra constant evaluation status:
 Evaluated: StaticGet @ org-dartlang-testcase:///redirecting_factory_metadata.dart:15:4 -> IntConstant(2)
-Extra constant evaluation: evaluated: 5, effectively constant: 1
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_metadata.dart:14:7 -> ConstructorTearOffConstant(Foo.)
+Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
index 9cea1c8..9b12539 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor named(dynamic p) → self::Foo*
     : super core::Object::•()
     ;
-  @#C1
-  static factory •(@#C2 @#C3 dynamic p) → self::Foo*
+  @#C2
+  static factory •(@#C3 @#C4 dynamic p) → self::Foo*
     return new self::Foo::named(p);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -21,13 +21,14 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* forParameter = #C2;
-static const field core::int* forFactoryItself = #C1;
-static const field core::int* anotherForParameter = #C3;
+static const field core::int* forParameter = #C3;
+static const field core::int* forFactoryItself = #C2;
+static const field core::int* anotherForParameter = #C4;
 static method main() → dynamic {}
 
 constants  {
-  #C1 = 2
-  #C2 = 1
-  #C3 = 3
+  #C1 = constructor-tearoff self::Foo::•
+  #C2 = 2
+  #C3 = 1
+  #C4 = 3
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
index ca460af..f2a4360 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -23,3 +23,7 @@
 static method main() → dynamic {
   new self::A::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
index 8549d41..20fd71c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
@@ -21,3 +21,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_simple_test.dart:10:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
index ca460af..f2a4360 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -23,3 +23,7 @@
 static method main() → dynamic {
   new self::A::•();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
index b3ec99a..16c46e9 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -48,3 +48,7 @@
 static method main() → dynamic {
   new self::B::•<self::Y*>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
index fedbec2..024a135 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
@@ -43,3 +43,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_typeargs_test.dart:15:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
index b3ec99a..16c46e9 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -48,3 +48,7 @@
 static method main() → dynamic {
   new self::B::•<self::Y*>();
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
index d5fafac..469f2af 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
@@ -23,3 +23,7 @@
 static method main() → dynamic {
   new self::A::•<core::int*, core::String*>(42, "foobar");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
index 3bf6457..795e0a9 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
@@ -21,3 +21,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_typeparam_test.dart:12:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 5, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
index d5fafac..469f2af 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
@@ -23,3 +23,7 @@
 static method main() → dynamic {
   new self::A::•<core::int*, core::String*>(42, "foobar");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
index 6b9f76b..98d4e12 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
@@ -43,3 +43,7 @@
 static method main() → dynamic {
   new self::A::•<self::X*, self::Y*>(new self::X::•(), new self::Y::•());
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
index 522c0dc..ef67ff4 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
@@ -39,3 +39,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_typeparambounds_test.dart:16:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 5, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
index 6b9f76b..98d4e12 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     ;
 }
 class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
     : super core::Object::•()
     ;
@@ -43,3 +43,7 @@
 static method main() → dynamic {
   new self::A::•<self::X*, self::Y*>(new self::X::•(), new self::Y::•());
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
index 45971e6..273bd861 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
@@ -41,3 +41,8 @@
 static method main() → dynamic {
   exp::Expect::equals("${new self::C::•<core::int*, core::num*, core::String*>()}", "int,num,String");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
index 97f2aa7..4a31e13 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
@@ -36,3 +36,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments.dart:12:7 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments.dart:17:7 -> ConstructorTearOffConstant(B.)
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
index 45971e6..273bd861 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
@@ -41,3 +41,8 @@
 static method main() → dynamic {
   exp::Expect::equals("${new self::C::•<core::int*, core::num*, core::String*>()}", "int,num,String");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
index 21aa750..516d00c 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
@@ -41,3 +41,8 @@
 static method main() → dynamic {
   exp::Expect::equals("${new self::C::•<core::int*, core::List<core::int*>*, core::Map<core::int*, core::List<core::int*>*>*>()}", "int,List<int>,Map<int, List<int>>");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
index fc699bb..2736c94 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
@@ -36,3 +36,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments_subst.dart:11:16 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments_subst.dart:16:16 -> ConstructorTearOffConstant(B.)
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
index 21aa750..516d00c 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor empty() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor empty() → self::B<self::B::U*, self::B::W*>*
     : super self::A::empty()
     ;
@@ -41,3 +41,8 @@
 static method main() → dynamic {
   exp::Expect::equals("${new self::C::•<core::int*, core::List<core::int*>*, core::Map<core::int*, core::List<core::int*>*>*>()}", "int,List<int>,Map<int, List<int>>");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
index e858e7d..be27ced 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
@@ -31,11 +31,12 @@
     return "${self::B::T*}";
 }
 static method main() → void {
-  exp::Expect::equals("${#C1}", "String");
+  exp::Expect::equals("${#C2}", "String");
 }
 
 constants  {
-  #C1 = self::B<core::String*> {}
+  #C1 = constructor-tearoff self::A::•
+  #C2 = self::B<core::String*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
index 0d1b358..7640720 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
@@ -31,3 +31,8 @@
 }
 static method main() → void
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_type_arguments.dart:10:7 -> ConstructorTearOffConstant(A.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
index e858e7d..be27ced 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   const constructor empty() → self::A*
     : super core::Object::•()
     ;
@@ -31,11 +31,12 @@
     return "${self::B::T*}";
 }
 static method main() → void {
-  exp::Expect::equals("${#C1}", "String");
+  exp::Expect::equals("${#C2}", "String");
 }
 
 constants  {
-  #C1 = self::B<core::String*> {}
+  #C1 = constructor-tearoff self::A::•
+  #C2 = self::B<core::String*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect
index 0dfa518..31bd8fe 100644
--- a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect
@@ -617,9 +617,9 @@
   #C4 = TypeLiteralConstant(invalid-type)
   #C5 = TypeLiteralConstant(self::Class<invalid-type>*)
   #C6 = constructor-tearoff self::Class::•
-  #C7 = instantiation self::Class::• <invalid-type>
+  #C7 = instantiation #C6 <invalid-type>
   #C8 = TypeLiteralConstant(self::Class<self::Class<invalid-type>*>*)
-  #C9 = instantiation self::Class::• <self::Class<invalid-type>*>
+  #C9 = instantiation #C6 <self::Class<invalid-type>*>
   #C10 = self::Class<<S extends invalid-type>() →* void> {instanceField:#C1}
 }
 
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect
index c523d09..1da87de 100644
--- a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect
@@ -617,9 +617,9 @@
   #C4 = TypeLiteralConstant(invalid-type)
   #C5 = TypeLiteralConstant(self::Class<invalid-type>*)
   #C6 = constructor-tearoff self::Class::•
-  #C7 = instantiation self::Class::• <invalid-type>
+  #C7 = instantiation #C6 <invalid-type>
   #C8 = TypeLiteralConstant(self::Class<self::Class<invalid-type>*>*)
-  #C9 = instantiation self::Class::• <self::Class<invalid-type>*>
+  #C9 = instantiation #C6 <self::Class<invalid-type>*>
   #C10 = self::Class<<S extends invalid-type>() →* void> {instanceField:#C1}
 }
 
diff --git a/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
index 39507e3..f8cb2d3 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changing_modules_8.yaml.world.1.expect
@@ -12,7 +12,7 @@
   import "package:module/lib2.dart";
 
   abstract class XSet extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib1::XSet::identity];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     static factory identity() → lib1::XSet*
       return lib2::XLinkedHashSet::identity();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -33,7 +33,7 @@
   import "package:module/lib3.dart";
 
   class XLinkedHashSet extends dart.core::Object implements lib1::XSet {
-    static final field dynamic _redirecting# = <dynamic>[lib2::XLinkedHashSet::identity];
+    static final field dynamic _redirecting# = <dynamic>[#C2];
     static factory identity() → lib2::XLinkedHashSet*
       return new lib3::XIdentityHashSet::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -68,3 +68,7 @@
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib1::XSet::identity
+  #C2 = constructor-tearoff lib2::XLinkedHashSet::identity
+}
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
index 938df3f..b30010d 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.1.expect
@@ -9,7 +9,7 @@
 //
 
   class C extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib::C::e4];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     constructor •() → lib::C*
       : super dart.core::Object::•()
       ;
@@ -35,3 +35,6 @@
     lib::C* c = new lib::C::•();
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib::C::e4
+}
diff --git a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
index 991ad94..cc3198c 100644
--- a/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/crash_test_1.yaml.world.2.expect
@@ -9,7 +9,7 @@
 //
 
   class C extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib::C::e4];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     constructor •() → lib::C*
       : super dart.core::Object::•()
       ;
@@ -36,3 +36,6 @@
     dart.core::print(c);
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib::C::e4
+}
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
index 41475f6..ff0ff25 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
@@ -51,32 +51,32 @@
       return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C13]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#new#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C17);
     static method _#_#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C19);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C20]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C22;
+      return #C24;
     static method _#new#tearOff() → foo::Baz
-      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C25);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#_#tearOff() → foo::Baz
-      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
-    static method _#__#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C27);
+    static method _#__#tearOff() → foo::Baz
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C29);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -87,25 +87,25 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C32;
+        return #C34;
       }
     }
     static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
-      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C35);
     static method _#_#tearOff() → foo::Boz
-      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C37);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///foo.dart";
 
-  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C38);
-  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C39);
-  static field foo::Bar constBar = #C42;
-  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C43);
-  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C44);
-  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C46);
+  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C40);
+  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C41);
+  static field foo::Bar constBar = #C44;
+  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C45);
+  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C46);
+  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C48);
 }
 constants  {
   #C1 = null
@@ -120,38 +120,40 @@
   #C10 = 3.0
   #C11 = 7.0
   #C12 = wid::_Location {file:#C2, line:#C10, column:#C11, name:#C5, parameterLocations:#C1}
-  #C13 = 4.0
-  #C14 = 42.0
-  #C15 = "Bar"
-  #C16 = wid::_Location {file:#C2, line:#C13, column:#C14, name:#C15, parameterLocations:#C1}
-  #C17 = 5.0
-  #C18 = wid::_Location {file:#C2, line:#C17, column:#C11, name:#C15, parameterLocations:#C1}
-  #C19 = 6.0
-  #C20 = "Baz"
-  #C21 = wid::_Location {file:#C2, line:#C19, column:#C4, name:#C20, parameterLocations:#C1}
-  #C22 = foo::Baz {_location:#C21}
-  #C23 = wid::_Location {file:#C2, line:#C19, column:#C8, name:#C20, parameterLocations:#C1}
-  #C24 = 15.0
-  #C25 = wid::_Location {file:#C2, line:#C11, column:#C24, name:#C20, parameterLocations:#C1}
-  #C26 = 8.0
-  #C27 = wid::_Location {file:#C2, line:#C26, column:#C11, name:#C20, parameterLocations:#C1}
-  #C28 = 9.0
-  #C29 = 128.0
-  #C30 = "Boz"
-  #C31 = wid::_Location {file:#C2, line:#C28, column:#C29, name:#C30, parameterLocations:#C1}
-  #C32 = foo::Boz {_location:#C31}
-  #C33 = wid::_Location {file:#C2, line:#C28, column:#C8, name:#C30, parameterLocations:#C1}
-  #C34 = 10.0
-  #C35 = wid::_Location {file:#C2, line:#C34, column:#C11, name:#C30, parameterLocations:#C1}
-  #C36 = "org-dartlang-test:///main.dart"
-  #C37 = 18.0
-  #C38 = wid::_Location {file:#C36, line:#C3, column:#C37, name:#C5, parameterLocations:#C1}
-  #C39 = wid::_Location {file:#C36, line:#C10, column:#C37, name:#C15, parameterLocations:#C1}
-  #C40 = 22.0
-  #C41 = wid::_Location {file:#C36, line:#C13, column:#C40, name:#C15, parameterLocations:#C1}
-  #C42 = foo::Bar {_location:#C41}
-  #C43 = wid::_Location {file:#C36, line:#C17, column:#C37, name:#C20, parameterLocations:#C1}
-  #C44 = wid::_Location {file:#C36, line:#C19, column:#C37, name:#C30, parameterLocations:#C1}
-  #C45 = 20.0
-  #C46 = wid::_Location {file:#C36, line:#C11, column:#C45, name:#C30, parameterLocations:#C1}
+  #C13 = constructor-tearoff foo::Bar::•
+  #C14 = 4.0
+  #C15 = 42.0
+  #C16 = "Bar"
+  #C17 = wid::_Location {file:#C2, line:#C14, column:#C15, name:#C16, parameterLocations:#C1}
+  #C18 = 5.0
+  #C19 = wid::_Location {file:#C2, line:#C18, column:#C11, name:#C16, parameterLocations:#C1}
+  #C20 = constructor-tearoff foo::Baz::_
+  #C21 = 6.0
+  #C22 = "Baz"
+  #C23 = wid::_Location {file:#C2, line:#C21, column:#C4, name:#C22, parameterLocations:#C1}
+  #C24 = foo::Baz {_location:#C23}
+  #C25 = wid::_Location {file:#C2, line:#C21, column:#C8, name:#C22, parameterLocations:#C1}
+  #C26 = 15.0
+  #C27 = wid::_Location {file:#C2, line:#C11, column:#C26, name:#C22, parameterLocations:#C1}
+  #C28 = 8.0
+  #C29 = wid::_Location {file:#C2, line:#C28, column:#C11, name:#C22, parameterLocations:#C1}
+  #C30 = 9.0
+  #C31 = 128.0
+  #C32 = "Boz"
+  #C33 = wid::_Location {file:#C2, line:#C30, column:#C31, name:#C32, parameterLocations:#C1}
+  #C34 = foo::Boz {_location:#C33}
+  #C35 = wid::_Location {file:#C2, line:#C30, column:#C8, name:#C32, parameterLocations:#C1}
+  #C36 = 10.0
+  #C37 = wid::_Location {file:#C2, line:#C36, column:#C11, name:#C32, parameterLocations:#C1}
+  #C38 = "org-dartlang-test:///main.dart"
+  #C39 = 18.0
+  #C40 = wid::_Location {file:#C38, line:#C3, column:#C39, name:#C5, parameterLocations:#C1}
+  #C41 = wid::_Location {file:#C38, line:#C10, column:#C39, name:#C16, parameterLocations:#C1}
+  #C42 = 22.0
+  #C43 = wid::_Location {file:#C38, line:#C14, column:#C42, name:#C16, parameterLocations:#C1}
+  #C44 = foo::Bar {_location:#C43}
+  #C45 = wid::_Location {file:#C38, line:#C18, column:#C39, name:#C22, parameterLocations:#C1}
+  #C46 = wid::_Location {file:#C38, line:#C21, column:#C39, name:#C32, parameterLocations:#C1}
+  #C47 = 20.0
+  #C48 = wid::_Location {file:#C38, line:#C11, column:#C47, name:#C32, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
index 6f610b2..47c45a0 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
@@ -51,32 +51,32 @@
       return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C13]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#new#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C17);
     static method _#_#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C19);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C20]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C22;
+      return #C24;
     static method _#new#tearOff() → foo::Baz
-      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C25);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#_#tearOff() → foo::Baz
-      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
-    static method _#__#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C27);
+    static method _#__#tearOff() → foo::Baz
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C29);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -87,13 +87,13 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C32;
+        return #C34;
       }
     }
     static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
-      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C35);
     static method _#_#tearOff() → foo::Boz
-      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C37);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
@@ -114,27 +114,29 @@
   #C10 = 3.0
   #C11 = 7.0
   #C12 = wid::_Location {file:#C2, line:#C10, column:#C11, name:#C5, parameterLocations:#C1}
-  #C13 = 4.0
-  #C14 = 42.0
-  #C15 = "Bar"
-  #C16 = wid::_Location {file:#C2, line:#C13, column:#C14, name:#C15, parameterLocations:#C1}
-  #C17 = 5.0
-  #C18 = wid::_Location {file:#C2, line:#C17, column:#C11, name:#C15, parameterLocations:#C1}
-  #C19 = 6.0
-  #C20 = "Baz"
-  #C21 = wid::_Location {file:#C2, line:#C19, column:#C4, name:#C20, parameterLocations:#C1}
-  #C22 = foo::Baz {_location:#C21}
-  #C23 = wid::_Location {file:#C2, line:#C19, column:#C8, name:#C20, parameterLocations:#C1}
-  #C24 = 15.0
-  #C25 = wid::_Location {file:#C2, line:#C11, column:#C24, name:#C20, parameterLocations:#C1}
-  #C26 = 8.0
-  #C27 = wid::_Location {file:#C2, line:#C26, column:#C11, name:#C20, parameterLocations:#C1}
-  #C28 = 9.0
-  #C29 = 128.0
-  #C30 = "Boz"
-  #C31 = wid::_Location {file:#C2, line:#C28, column:#C29, name:#C30, parameterLocations:#C1}
-  #C32 = foo::Boz {_location:#C31}
-  #C33 = wid::_Location {file:#C2, line:#C28, column:#C8, name:#C30, parameterLocations:#C1}
-  #C34 = 10.0
-  #C35 = wid::_Location {file:#C2, line:#C34, column:#C11, name:#C30, parameterLocations:#C1}
+  #C13 = constructor-tearoff foo::Bar::•
+  #C14 = 4.0
+  #C15 = 42.0
+  #C16 = "Bar"
+  #C17 = wid::_Location {file:#C2, line:#C14, column:#C15, name:#C16, parameterLocations:#C1}
+  #C18 = 5.0
+  #C19 = wid::_Location {file:#C2, line:#C18, column:#C11, name:#C16, parameterLocations:#C1}
+  #C20 = constructor-tearoff foo::Baz::_
+  #C21 = 6.0
+  #C22 = "Baz"
+  #C23 = wid::_Location {file:#C2, line:#C21, column:#C4, name:#C22, parameterLocations:#C1}
+  #C24 = foo::Baz {_location:#C23}
+  #C25 = wid::_Location {file:#C2, line:#C21, column:#C8, name:#C22, parameterLocations:#C1}
+  #C26 = 15.0
+  #C27 = wid::_Location {file:#C2, line:#C11, column:#C26, name:#C22, parameterLocations:#C1}
+  #C28 = 8.0
+  #C29 = wid::_Location {file:#C2, line:#C28, column:#C11, name:#C22, parameterLocations:#C1}
+  #C30 = 9.0
+  #C31 = 128.0
+  #C32 = "Boz"
+  #C33 = wid::_Location {file:#C2, line:#C30, column:#C31, name:#C32, parameterLocations:#C1}
+  #C34 = foo::Boz {_location:#C33}
+  #C35 = wid::_Location {file:#C2, line:#C30, column:#C8, name:#C32, parameterLocations:#C1}
+  #C36 = 10.0
+  #C37 = wid::_Location {file:#C2, line:#C36, column:#C11, name:#C32, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
index 41475f6..ff0ff25 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
@@ -51,32 +51,32 @@
       return new foo::Foo::_($creationLocationd_0dea112b090073317d4: #C12);
   }
   class Bar extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Bar::•]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C13]/*isLegacy*/;
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#new#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C17);
     static method _#_#tearOff() → foo::Bar
-      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C18);
+      return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C19);
   }
   class Baz extends fra::Widget /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Baz::_]/*isLegacy*/;
+    static final field dynamic _redirecting# = <dynamic>[#C20]/*isLegacy*/;
     const constructor __({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
     static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
-      return #C22;
+      return #C24;
     static method _#new#tearOff() → foo::Baz
-      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
+      return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C25);
     static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static method _#_#tearOff() → foo::Baz
-      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
-    static method _#__#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C27);
+    static method _#__#tearOff() → foo::Baz
+      return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C29);
   }
   class Boz extends fra::Widget /*hasConstConstructor*/  {
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Boz
@@ -87,25 +87,25 @@
         return new foo::Boz::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
       }
       else {
-        return #C32;
+        return #C34;
       }
     }
     static method _#new#tearOff({required dart.core::bool createNew = #C1}) → foo::Boz
-      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C33);
+      return foo::Boz::•(createNew: createNew, $creationLocationd_0dea112b090073317d4: #C35);
     static method _#_#tearOff() → foo::Boz
-      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C35);
+      return new foo::Boz::_($creationLocationd_0dea112b090073317d4: #C37);
   }
 }
 library from "org-dartlang-test:///main.dart" as main {
 
   import "org-dartlang-test:///foo.dart";
 
-  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C38);
-  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C39);
-  static field foo::Bar constBar = #C42;
-  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C43);
-  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C44);
-  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C46);
+  static field foo::Foo newFoo = foo::Foo::•($creationLocationd_0dea112b090073317d4: #C40);
+  static field foo::Bar newBar = new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C41);
+  static field foo::Bar constBar = #C44;
+  static field foo::Baz newBaz = foo::Baz::•($creationLocationd_0dea112b090073317d4: #C45);
+  static field foo::Boz newBoz = foo::Boz::•(createNew: true, $creationLocationd_0dea112b090073317d4: #C46);
+  static field foo::Boz constBoz = foo::Boz::•(createNew: false, $creationLocationd_0dea112b090073317d4: #C48);
 }
 constants  {
   #C1 = null
@@ -120,38 +120,40 @@
   #C10 = 3.0
   #C11 = 7.0
   #C12 = wid::_Location {file:#C2, line:#C10, column:#C11, name:#C5, parameterLocations:#C1}
-  #C13 = 4.0
-  #C14 = 42.0
-  #C15 = "Bar"
-  #C16 = wid::_Location {file:#C2, line:#C13, column:#C14, name:#C15, parameterLocations:#C1}
-  #C17 = 5.0
-  #C18 = wid::_Location {file:#C2, line:#C17, column:#C11, name:#C15, parameterLocations:#C1}
-  #C19 = 6.0
-  #C20 = "Baz"
-  #C21 = wid::_Location {file:#C2, line:#C19, column:#C4, name:#C20, parameterLocations:#C1}
-  #C22 = foo::Baz {_location:#C21}
-  #C23 = wid::_Location {file:#C2, line:#C19, column:#C8, name:#C20, parameterLocations:#C1}
-  #C24 = 15.0
-  #C25 = wid::_Location {file:#C2, line:#C11, column:#C24, name:#C20, parameterLocations:#C1}
-  #C26 = 8.0
-  #C27 = wid::_Location {file:#C2, line:#C26, column:#C11, name:#C20, parameterLocations:#C1}
-  #C28 = 9.0
-  #C29 = 128.0
-  #C30 = "Boz"
-  #C31 = wid::_Location {file:#C2, line:#C28, column:#C29, name:#C30, parameterLocations:#C1}
-  #C32 = foo::Boz {_location:#C31}
-  #C33 = wid::_Location {file:#C2, line:#C28, column:#C8, name:#C30, parameterLocations:#C1}
-  #C34 = 10.0
-  #C35 = wid::_Location {file:#C2, line:#C34, column:#C11, name:#C30, parameterLocations:#C1}
-  #C36 = "org-dartlang-test:///main.dart"
-  #C37 = 18.0
-  #C38 = wid::_Location {file:#C36, line:#C3, column:#C37, name:#C5, parameterLocations:#C1}
-  #C39 = wid::_Location {file:#C36, line:#C10, column:#C37, name:#C15, parameterLocations:#C1}
-  #C40 = 22.0
-  #C41 = wid::_Location {file:#C36, line:#C13, column:#C40, name:#C15, parameterLocations:#C1}
-  #C42 = foo::Bar {_location:#C41}
-  #C43 = wid::_Location {file:#C36, line:#C17, column:#C37, name:#C20, parameterLocations:#C1}
-  #C44 = wid::_Location {file:#C36, line:#C19, column:#C37, name:#C30, parameterLocations:#C1}
-  #C45 = 20.0
-  #C46 = wid::_Location {file:#C36, line:#C11, column:#C45, name:#C30, parameterLocations:#C1}
+  #C13 = constructor-tearoff foo::Bar::•
+  #C14 = 4.0
+  #C15 = 42.0
+  #C16 = "Bar"
+  #C17 = wid::_Location {file:#C2, line:#C14, column:#C15, name:#C16, parameterLocations:#C1}
+  #C18 = 5.0
+  #C19 = wid::_Location {file:#C2, line:#C18, column:#C11, name:#C16, parameterLocations:#C1}
+  #C20 = constructor-tearoff foo::Baz::_
+  #C21 = 6.0
+  #C22 = "Baz"
+  #C23 = wid::_Location {file:#C2, line:#C21, column:#C4, name:#C22, parameterLocations:#C1}
+  #C24 = foo::Baz {_location:#C23}
+  #C25 = wid::_Location {file:#C2, line:#C21, column:#C8, name:#C22, parameterLocations:#C1}
+  #C26 = 15.0
+  #C27 = wid::_Location {file:#C2, line:#C11, column:#C26, name:#C22, parameterLocations:#C1}
+  #C28 = 8.0
+  #C29 = wid::_Location {file:#C2, line:#C28, column:#C11, name:#C22, parameterLocations:#C1}
+  #C30 = 9.0
+  #C31 = 128.0
+  #C32 = "Boz"
+  #C33 = wid::_Location {file:#C2, line:#C30, column:#C31, name:#C32, parameterLocations:#C1}
+  #C34 = foo::Boz {_location:#C33}
+  #C35 = wid::_Location {file:#C2, line:#C30, column:#C8, name:#C32, parameterLocations:#C1}
+  #C36 = 10.0
+  #C37 = wid::_Location {file:#C2, line:#C36, column:#C11, name:#C32, parameterLocations:#C1}
+  #C38 = "org-dartlang-test:///main.dart"
+  #C39 = 18.0
+  #C40 = wid::_Location {file:#C38, line:#C3, column:#C39, name:#C5, parameterLocations:#C1}
+  #C41 = wid::_Location {file:#C38, line:#C10, column:#C39, name:#C16, parameterLocations:#C1}
+  #C42 = 22.0
+  #C43 = wid::_Location {file:#C38, line:#C14, column:#C42, name:#C16, parameterLocations:#C1}
+  #C44 = foo::Bar {_location:#C43}
+  #C45 = wid::_Location {file:#C38, line:#C18, column:#C39, name:#C22, parameterLocations:#C1}
+  #C46 = wid::_Location {file:#C38, line:#C21, column:#C39, name:#C32, parameterLocations:#C1}
+  #C47 = 20.0
+  #C48 = wid::_Location {file:#C38, line:#C11, column:#C47, name:#C32, parameterLocations:#C1}
 }
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
index 008ff7a..20a26f1 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
@@ -2,7 +2,7 @@
 library from "org-dartlang-test:///foo.dart" as foo {
 
   abstract class Key extends dart.core::Object /*hasConstConstructor*/  {
-    static final field dynamic _redirecting# = <dynamic>[foo::Key::•];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     const constructor empty() → foo::Key*
       : super dart.core::Object::•()
       ;
@@ -45,3 +45,6 @@
     dart.core::print("${k}");
   }
 }
+constants  {
+  #C1 = constructor-tearoff foo::Key::•
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
index 02964ab..b8a5016 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.1.expect
@@ -4,7 +4,7 @@
   import "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     static factory •() → lib1::Foo*
       return new lib2::Bar::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -51,3 +51,6 @@
     lib1::libMethod();
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib1::Foo::•
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
index 14d998a..ba249a3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_11.yaml.world.2.expect
@@ -4,7 +4,7 @@
   import "org-dartlang-test:///lib2.dart";
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[lib1::Foo::•];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     static factory •() → lib1::Foo*
       return new lib2::Bar::•();
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -52,3 +52,6 @@
     lib1::libMethod();
   }
 }
+constants  {
+  #C1 = constructor-tearoff lib1::Foo::•
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
index 8cde08e..7aa880b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.1.expect
@@ -2,7 +2,7 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[main::Foo::bar];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     constructor •() → main::Foo*
       : super dart.core::Object::•()
       ;
@@ -26,3 +26,6 @@
       ;
   }
 }
+constants  {
+  #C1 = constructor-tearoff main::Foo::bar
+}
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
index 8cde08e..7aa880b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml.world.2.expect
@@ -2,7 +2,7 @@
 library from "org-dartlang-test:///main.dart" as main {
 
   class Foo extends dart.core::Object {
-    static final field dynamic _redirecting# = <dynamic>[main::Foo::bar];
+    static final field dynamic _redirecting# = <dynamic>[#C1];
     constructor •() → main::Foo*
       : super dart.core::Object::•()
       ;
@@ -26,3 +26,6 @@
       ;
   }
 }
+constants  {
+  #C1 = constructor-tearoff main::Foo::bar
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
index ec2714c..7f8c3dd 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get t() → self::C::T*;
   abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
@@ -38,3 +38,7 @@
 static method main() → dynamic {
   self::C<core::int*>* x = new self::CImpl::•<core::int*>(42);
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
index a882ba7..f6167ed 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
@@ -36,3 +36,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructors_infer_from_arguments_redirecting_factory.dart:8:16 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
index ec2714c..7f8c3dd 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get t() → self::C::T*;
   abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
@@ -38,3 +38,7 @@
 static method main() → dynamic {
   self::C<core::int*>* x = new self::CImpl::•<core::int*>(42);
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
index cf8581d..a2fd0ae 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get t() → self::C::T*;
   abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
@@ -40,3 +40,7 @@
 static method main() → dynamic {
   self::C<core::int*>* x = self::CImpl::•<core::int*>(42);
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
index f2e7522..0980409 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
@@ -38,3 +38,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructors_infer_from_arguments_redirecting_factory_to_factory.dart:8:16 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
index cf8581d..a2fd0ae 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   abstract get t() → self::C::T*;
   abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
@@ -40,3 +40,7 @@
 static method main() → dynamic {
   self::C<core::int*>* x = self::CImpl::•<core::int*>(42);
 }
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
index 937b216..a033796 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
@@ -177,13 +177,13 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = instantiation math::max <core::int*>
-  #C3 = instantiation math::max <core::double*>
-  #C4 = instantiation math::max <core::num*>
-  #C5 = instantiation math::max <core::Object*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::double*>
+  #C4 = instantiation #C1 <core::num*>
+  #C5 = instantiation #C1 <core::Object*>
   #C6 = static-tearoff math::min
-  #C7 = instantiation math::min <core::int*>
-  #C8 = instantiation math::min <core::double*>
-  #C9 = instantiation math::min <core::num*>
-  #C10 = instantiation math::min <core::Object*>
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = instantiation #C6 <core::double*>
+  #C9 = instantiation #C6 <core::num*>
+  #C10 = instantiation #C6 <core::Object*>
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
index 937b216..a033796 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
@@ -177,13 +177,13 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = instantiation math::max <core::int*>
-  #C3 = instantiation math::max <core::double*>
-  #C4 = instantiation math::max <core::num*>
-  #C5 = instantiation math::max <core::Object*>
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::double*>
+  #C4 = instantiation #C1 <core::num*>
+  #C5 = instantiation #C1 <core::Object*>
   #C6 = static-tearoff math::min
-  #C7 = instantiation math::min <core::int*>
-  #C8 = instantiation math::min <core::double*>
-  #C9 = instantiation math::min <core::num*>
-  #C10 = instantiation math::min <core::Object*>
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = instantiation #C6 <core::double*>
+  #C9 = instantiation #C6 <core::num*>
+  #C10 = instantiation #C6 <core::Object*>
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
index 5a16fe2..5a1deb3 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
@@ -45,5 +45,5 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = instantiation math::max <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
index 39218a6..28f2a02 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
@@ -45,5 +45,5 @@
 
 constants  {
   #C1 = static-tearoff math::max
-  #C2 = instantiation math::max <core::int*>
+  #C2 = instantiation #C1 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
index ba2952c..f272f74 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
@@ -45,7 +45,7 @@
 
 constants  {
   #C1 = static-tearoff self::f
-  #C2 = instantiation self::f <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::C::g
-  #C4 = instantiation self::C::g <core::int*>
+  #C4 = instantiation #C3 <core::int*>
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
index ba2952c..f272f74 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
@@ -45,7 +45,7 @@
 
 constants  {
   #C1 = static-tearoff self::f
-  #C2 = instantiation self::f <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = static-tearoff self::C::g
-  #C4 = instantiation self::C::g <core::int*>
+  #C4 = instantiation #C3 <core::int*>
 }
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
index 5ea885d..22f41cf 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
@@ -90,7 +90,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object)
   #C2 = static-tearoff con::id
-  #C3 = instantiation con::id <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = 0
   #C5 = con::Class<core::int> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) → dynamic)
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
index 5ea885d..22f41cf 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
@@ -90,7 +90,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object)
   #C2 = static-tearoff con::id
-  #C3 = instantiation con::id <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = 0
   #C5 = con::Class<core::int> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) → dynamic)
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
index 17a63c7..9af4cec 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
@@ -90,7 +90,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object*)
   #C2 = static-tearoff con::id
-  #C3 = instantiation con::id <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = con::Class<core::int*> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) →* dynamic)
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
index 17a63c7..9af4cec 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
@@ -90,7 +90,7 @@
 constants  {
   #C1 = TypeLiteralConstant(core::Object*)
   #C2 = static-tearoff con::id
-  #C3 = instantiation con::id <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = con::Class<core::int*> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) →* dynamic)
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
index 26a075c..b233a23 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.expect
@@ -103,121 +103,131 @@
 
 class A extends core::Object {
   final field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::A
+  constructor constructor2({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::A
+  constructor constructor3([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::A
+  constructor constructor4({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::A
+  constructor constructor5([core::int? i = #C6]) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::A
+  constructor constructor6({core::int? i = #C6}) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::A
+  constructor constructor7({required core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  external constructor constructor8([core::int i = #C1]) → self::A
+  external constructor constructor8([core::int i = #C6]) → self::A
     : super core::Object::•()
     ;
-  external constructor constructor9({core::int i = #C1}) → self::A
+  external constructor constructor9({core::int i = #C6}) → self::A
     : super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::A
+  static factory factory3([core::int i = #C6]) → self::A
     return new self::A::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::A
+  static factory factory4({core::int i = #C6}) → self::A
     return new self::A::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::A
+  static factory factory5([core::int? i = #C6]) → self::A
     return new self::A::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::A
+  static factory factory6({core::int? i = #C6}) → self::A
     return new self::A::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::A
+  static factory factory7({required core::int i = #C6}) → self::A
     return new self::A::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::A
+  static factory factory8([core::int i = #C6]) → self::A
     return new self::A::constructor3();
-  static factory factory9({core::int i = #C1}) → self::A
+  static factory factory9({core::int i = #C6}) → self::A
     return new self::A::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
-  external method method8([core::int i = #C1]) → dynamic;
-  external method method9({core::int i = #C1}) → dynamic;
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i = 42;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method3([core::int i = #C1]) → dynamic;
-  abstract method method4({core::int i = #C1}) → dynamic;
-  abstract method method5([core::int? i = #C1]) → dynamic;
-  abstract method method6({core::int? i = #C1}) → dynamic;
-  abstract method method7({required core::int i = #C1}) → dynamic;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::C
+  constructor constructor2({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::C
+  constructor constructor3([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::C
+  constructor constructor4({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::C
+  constructor constructor5([core::int? i = #C6]) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor5([int? i]) : this.i = i; // error
                                       ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::C
+  constructor constructor6({core::int? i = #C6}) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor6({int? i}) : this.i = i; // error
                                       ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::C
+  constructor constructor7({required core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::C
+  static factory factory3([core::int i = #C6]) → self::C
     return new self::C::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::C
+  static factory factory4({core::int i = #C6}) → self::C
     return new self::C::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::C
+  static factory factory5([core::int? i = #C6]) → self::C
     return new self::C::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::C
+  static factory factory6({core::int? i = #C6}) → self::C
     return new self::C::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::C
+  static factory factory7({required core::int i = #C6}) → self::C
     return new self::C::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::C
+  static factory factory8([core::int i = #C6]) → self::C
     return new self::C::constructor3();
-  static factory factory9({core::int i = #C1}) → self::C
+  static factory factory9({core::int i = #C6}) → self::C
     return new self::C::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
 }
 static method main() → void {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
index b672730..0c4486a 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.strong.transformed.expect
@@ -103,121 +103,131 @@
 
 class A extends core::Object {
   final field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::A
+  constructor constructor2({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::A
+  constructor constructor3([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::A
+  constructor constructor4({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::A
+  constructor constructor5([core::int? i = #C6]) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in let core::int? #t1 = i in #t1 == null ?{core::int} #t1 as{TypeError,ForNonNullableByDefault} core::int : #t1{core::int}, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::A
+  constructor constructor6({core::int? i = #C6}) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in let core::int? #t2 = i in #t2 == null ?{core::int} #t2 as{TypeError,ForNonNullableByDefault} core::int : #t2{core::int}, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::A
+  constructor constructor7({required core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  external constructor constructor8([core::int i = #C1]) → self::A
+  external constructor constructor8([core::int i = #C6]) → self::A
     : super core::Object::•()
     ;
-  external constructor constructor9({core::int i = #C1}) → self::A
+  external constructor constructor9({core::int i = #C6}) → self::A
     : super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::A
+  static factory factory3([core::int i = #C6]) → self::A
     return new self::A::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::A
+  static factory factory4({core::int i = #C6}) → self::A
     return new self::A::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::A
+  static factory factory5([core::int? i = #C6]) → self::A
     return new self::A::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::A
+  static factory factory6({core::int? i = #C6}) → self::A
     return new self::A::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::A
+  static factory factory7({required core::int i = #C6}) → self::A
     return new self::A::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::A
+  static factory factory8([core::int i = #C6]) → self::A
     return new self::A::constructor3();
-  static factory factory9({core::int i = #C1}) → self::A
+  static factory factory9({core::int i = #C6}) → self::A
     return new self::A::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
-  external method method8([core::int i = #C1]) → dynamic;
-  external method method9({core::int i = #C1}) → dynamic;
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i = 42;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method3([core::int i = #C1]) → dynamic;
-  abstract method method4({core::int i = #C1}) → dynamic;
-  abstract method method5([core::int? i = #C1]) → dynamic;
-  abstract method method6({core::int? i = #C1}) → dynamic;
-  abstract method method7({required core::int i = #C1}) → dynamic;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::C
+  constructor constructor2({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::C
+  constructor constructor3([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::C
+  constructor constructor4({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::C
+  constructor constructor5([core::int? i = #C6]) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor5([int? i]) : this.i = i; // error
                                       ^" in let core::int? #t3 = i in #t3 == null ?{core::int} #t3 as{TypeError,ForNonNullableByDefault} core::int : #t3{core::int}, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::C
+  constructor constructor6({core::int? i = #C6}) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor6({int? i}) : this.i = i; // error
                                       ^" in let core::int? #t4 = i in #t4 == null ?{core::int} #t4 as{TypeError,ForNonNullableByDefault} core::int : #t4{core::int}, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::C
+  constructor constructor7({required core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::C
+  static factory factory3([core::int i = #C6]) → self::C
     return new self::C::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::C
+  static factory factory4({core::int i = #C6}) → self::C
     return new self::C::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::C
+  static factory factory5([core::int? i = #C6]) → self::C
     return new self::C::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::C
+  static factory factory6({core::int? i = #C6}) → self::C
     return new self::C::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::C
+  static factory factory7({required core::int i = #C6}) → self::C
     return new self::C::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::C
+  static factory factory8([core::int i = #C6]) → self::C
     return new self::C::constructor3();
-  static factory factory9({core::int i = #C1}) → self::C
+  static factory factory9({core::int i = #C6}) → self::C
     return new self::C::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
 }
 static method main() → void {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
index 26a075c..b233a23 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.expect
@@ -103,121 +103,131 @@
 
 class A extends core::Object {
   final field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::A
+  constructor constructor2({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::A
+  constructor constructor3([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::A
+  constructor constructor4({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::A
+  constructor constructor5([core::int? i = #C6]) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::A
+  constructor constructor6({core::int? i = #C6}) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::A
+  constructor constructor7({required core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  external constructor constructor8([core::int i = #C1]) → self::A
+  external constructor constructor8([core::int i = #C6]) → self::A
     : super core::Object::•()
     ;
-  external constructor constructor9({core::int i = #C1}) → self::A
+  external constructor constructor9({core::int i = #C6}) → self::A
     : super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::A
+  static factory factory3([core::int i = #C6]) → self::A
     return new self::A::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::A
+  static factory factory4({core::int i = #C6}) → self::A
     return new self::A::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::A
+  static factory factory5([core::int? i = #C6]) → self::A
     return new self::A::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::A
+  static factory factory6({core::int? i = #C6}) → self::A
     return new self::A::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::A
+  static factory factory7({required core::int i = #C6}) → self::A
     return new self::A::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::A
+  static factory factory8([core::int i = #C6]) → self::A
     return new self::A::constructor3();
-  static factory factory9({core::int i = #C1}) → self::A
+  static factory factory9({core::int i = #C6}) → self::A
     return new self::A::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
-  external method method8([core::int i = #C1]) → dynamic;
-  external method method9({core::int i = #C1}) → dynamic;
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i = 42;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method3([core::int i = #C1]) → dynamic;
-  abstract method method4({core::int i = #C1}) → dynamic;
-  abstract method method5([core::int? i = #C1]) → dynamic;
-  abstract method method6({core::int? i = #C1}) → dynamic;
-  abstract method method7({required core::int i = #C1}) → dynamic;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::C
+  constructor constructor2({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::C
+  constructor constructor3([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::C
+  constructor constructor4({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::C
+  constructor constructor5([core::int? i = #C6]) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor5([int? i]) : this.i = i; // error
                                       ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::C
+  constructor constructor6({core::int? i = #C6}) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor6({int? i}) : this.i = i; // error
                                       ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::C
+  constructor constructor7({required core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::C
+  static factory factory3([core::int i = #C6]) → self::C
     return new self::C::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::C
+  static factory factory4({core::int i = #C6}) → self::C
     return new self::C::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::C
+  static factory factory5([core::int? i = #C6]) → self::C
     return new self::C::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::C
+  static factory factory6({core::int? i = #C6}) → self::C
     return new self::C::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::C
+  static factory factory7({required core::int i = #C6}) → self::C
     return new self::C::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::C
+  static factory factory8([core::int i = #C6]) → self::C
     return new self::C::constructor3();
-  static factory factory9({core::int i = #C1}) → self::C
+  static factory factory9({core::int i = #C6}) → self::C
     return new self::C::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
 }
 static method main() → void {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
index 0040b41..48dab81 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
@@ -187,3 +187,17 @@
 }
 static method main() → void
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory3)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory4)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory5)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory6)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:5:7 -> ConstructorTearOffConstant(A.factory7)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory3)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory4)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory5)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory6)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42362.dart:74:7 -> ConstructorTearOffConstant(C.factory7)
+Extra constant evaluation: evaluated: 32, effectively constant: 10
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
index 94f4fab..8ee747f 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.transformed.expect
@@ -103,121 +103,131 @@
 
 class A extends core::Object {
   final field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::A
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::A
+  constructor constructor2({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::A
+  constructor constructor3([core::int i = #C6]) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::A
+  constructor constructor4({core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::A
+  constructor constructor5([core::int? i = #C6]) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::A
+  constructor constructor6({core::int? i = #C6}) → self::A
     : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
       : this.i = i; // error
                  ^" in i, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::A
+  constructor constructor7({required core::int i = #C6}) → self::A
     : self::A::i = i, super core::Object::•()
     ;
-  external constructor constructor8([core::int i = #C1]) → self::A
+  external constructor constructor8([core::int i = #C6]) → self::A
     : super core::Object::•()
     ;
-  external constructor constructor9({core::int i = #C1}) → self::A
+  external constructor constructor9({core::int i = #C6}) → self::A
     : super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::A
+  static factory factory3([core::int i = #C6]) → self::A
     return new self::A::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::A
+  static factory factory4({core::int i = #C6}) → self::A
     return new self::A::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::A
+  static factory factory5([core::int? i = #C6]) → self::A
     return new self::A::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::A
+  static factory factory6({core::int? i = #C6}) → self::A
     return new self::A::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::A
+  static factory factory7({required core::int i = #C6}) → self::A
     return new self::A::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::A
+  static factory factory8([core::int i = #C6]) → self::A
     return new self::A::constructor3();
-  static factory factory9({core::int i = #C1}) → self::A
+  static factory factory9({core::int i = #C6}) → self::A
     return new self::A::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
-  external method method8([core::int i = #C1]) → dynamic;
-  external method method9({core::int i = #C1}) → dynamic;
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i = 42;
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method3([core::int i = #C1]) → dynamic;
-  abstract method method4({core::int i = #C1}) → dynamic;
-  abstract method method5([core::int? i = #C1]) → dynamic;
-  abstract method method6({core::int? i = #C1}) → dynamic;
-  abstract method method7({required core::int i = #C1}) → dynamic;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
-  static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i = #C1]) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor2({core::int i = #C1}) → self::C
+  constructor constructor2({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor3([core::int i = #C1]) → self::C
+  constructor constructor3([core::int i = #C6]) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor4({core::int i = #C1}) → self::C
+  constructor constructor4({core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  constructor constructor5([core::int? i = #C1]) → self::C
+  constructor constructor5([core::int? i = #C6]) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor5([int? i]) : this.i = i; // error
                                       ^" in i, super core::Object::•()
     ;
-  constructor constructor6({core::int? i = #C1}) → self::C
+  constructor constructor6({core::int? i = #C6}) → self::C
     : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
   C.constructor6({int? i}) : this.i = i; // error
                                       ^" in i, super core::Object::•()
     ;
-  constructor constructor7({required core::int i = #C1}) → self::C
+  constructor constructor7({required core::int i = #C6}) → self::C
     : self::C::i = i, super core::Object::•()
     ;
-  static factory factory3([core::int i = #C1]) → self::C
+  static factory factory3([core::int i = #C6]) → self::C
     return new self::C::constructor3(i);
-  static factory factory4({core::int i = #C1}) → self::C
+  static factory factory4({core::int i = #C6}) → self::C
     return new self::C::constructor4(i: i);
-  static factory factory5([core::int? i = #C1]) → self::C
+  static factory factory5([core::int? i = #C6]) → self::C
     return new self::C::constructor5(i);
-  static factory factory6({core::int? i = #C1}) → self::C
+  static factory factory6({core::int? i = #C6}) → self::C
     return new self::C::constructor6(i: i);
-  static factory factory7({required core::int i = #C1}) → self::C
+  static factory factory7({required core::int i = #C6}) → self::C
     return new self::C::constructor7(i: i);
-  static factory factory8([core::int i = #C1]) → self::C
+  static factory factory8([core::int i = #C6]) → self::C
     return new self::C::constructor3();
-  static factory factory9({core::int i = #C1}) → self::C
+  static factory factory9({core::int i = #C6}) → self::C
     return new self::C::constructor4();
-  method method3([core::int i = #C1]) → dynamic {}
-  method method4({core::int i = #C1}) → dynamic {}
-  method method5([core::int? i = #C1]) → dynamic {}
-  method method6({core::int? i = #C1}) → dynamic {}
-  method method7({required core::int i = #C1}) → dynamic {}
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
 }
 static method main() → void {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
index 66fe67c..276acf3 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
@@ -15,5 +15,5 @@
 
 constants  {
   #C1 = static-tearoff self::checkme
-  #C2 = instantiation self::checkme <self::X>
+  #C2 = instantiation #C1 <self::X>
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
index 66fe67c..276acf3 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
@@ -15,5 +15,5 @@
 
 constants  {
   #C1 = static-tearoff self::checkme
-  #C2 = instantiation self::checkme <self::X>
+  #C2 = instantiation #C1 <self::X>
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
index 17ca8c8..b570b8b 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
@@ -15,5 +15,5 @@
 
 constants  {
   #C1 = static-tearoff self::checkme
-  #C2 = instantiation self::checkme <self::X*>
+  #C2 = instantiation #C1 <self::X*>
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
index 17ca8c8..b570b8b 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
@@ -15,5 +15,5 @@
 
 constants  {
   #C1 = static-tearoff self::checkme
-  #C2 = instantiation self::checkme <self::X*>
+  #C2 = instantiation #C1 <self::X*>
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
index 0c168d7..2637180 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(Never n) → self::C
     return new self::D::•(n);
 }
@@ -22,3 +22,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
index 0c168d7..2637180 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(Never n) → self::C
     return new self::D::•(n);
 }
@@ -22,3 +22,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
index 0c168d7..2637180 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(Never n) → self::C
     return new self::D::•(n);
 }
@@ -22,3 +22,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
index 18f72ef..fd5c0b5 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.outline.expect
@@ -15,3 +15,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42844_1.dart:5:7 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
index 0c168d7..2637180 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   field Never n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(Never n) → self::C
     return new self::D::•(n);
 }
@@ -22,3 +22,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
index bd950c6..d84e75e 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     return new self::D::•(n);
 }
@@ -23,3 +23,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
index bd950c6..d84e75e 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     return new self::D::•(n);
 }
@@ -23,3 +23,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
index bd950c6..d84e75e 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     return new self::D::•(n);
 }
@@ -23,3 +23,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
index 53f7e37..967bc12 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.outline.expect
@@ -15,3 +15,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue42844_2.dart:5:7 -> ConstructorTearOffConstant(C.)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
index bd950c6..d84e75e 100644
--- a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 
 class C extends core::Object {
   final field dynamic n = null;
-  static final field dynamic _redirecting# = <dynamic>[self::C::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •(dynamic n) → self::C
     return new self::D::•(n);
 }
@@ -23,3 +23,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
index a02c4ef..46f6782 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
@@ -259,3 +259,7 @@
   self::A<Null> a = new self::A::•<Null>();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
index a02c4ef..46f6782 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.strong.transformed.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
@@ -259,3 +259,7 @@
   self::A<Null> a = new self::A::•<Null>();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
index a02c4ef..46f6782 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
@@ -259,3 +259,7 @@
   self::A<Null> a = new self::A::•<Null>();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
index 39eaec6..ffca4b4 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.outline.expect
@@ -149,3 +149,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue43211.dart:35:7 -> ConstructorTearOffConstant(C.redirect)
+Extra constant evaluation: evaluated: 14, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
index a02c4ef..46f6782 100644
--- a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.transformed.expect
@@ -221,7 +221,7 @@
   }
 }
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor internal(dynamic _) → self::C
     : super core::Object::•() {
     self::A<self::A<Null>>? a;
@@ -259,3 +259,7 @@
   self::A<Null> a = new self::A::•<Null>();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
index fd4ab1f..6fe128e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.expect
@@ -16,14 +16,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i = #C1}) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
     : super core::Object::•()
     ;
-  static factory fact({core::int i = #C1}) → self::C {
+  static factory fact({core::int i = #C2}) → self::C {
     return new self::C::gen();
   }
-  static factory redirect({core::int i = #C1}) → self::C
+  static factory redirect({core::int i = #C2}) → self::C
     return new self::C::gen(i: i);
 }
 class D extends core::Object {
@@ -34,5 +34,6 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
index fd4ab1f..6fe128e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.strong.transformed.expect
@@ -16,14 +16,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i = #C1}) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
     : super core::Object::•()
     ;
-  static factory fact({core::int i = #C1}) → self::C {
+  static factory fact({core::int i = #C2}) → self::C {
     return new self::C::gen();
   }
-  static factory redirect({core::int i = #C1}) → self::C
+  static factory redirect({core::int i = #C2}) → self::C
     return new self::C::gen(i: i);
 }
 class D extends core::Object {
@@ -34,5 +34,6 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
index fd4ab1f..6fe128e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.expect
@@ -16,14 +16,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i = #C1}) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
     : super core::Object::•()
     ;
-  static factory fact({core::int i = #C1}) → self::C {
+  static factory fact({core::int i = #C2}) → self::C {
     return new self::C::gen();
   }
-  static factory redirect({core::int i = #C1}) → self::C
+  static factory redirect({core::int i = #C2}) → self::C
     return new self::C::gen(i: i);
 }
 class D extends core::Object {
@@ -34,5 +34,6 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
index bff1a1e..110f141 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
@@ -30,3 +30,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue43276.dart:5:7 -> ConstructorTearOffConstant(C.redirect)
+Extra constant evaluation: evaluated: 4, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
index fd4ab1f..6fe128e 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.transformed.expect
@@ -16,14 +16,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i = #C1}) → self::C
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
     : super core::Object::•()
     ;
-  static factory fact({core::int i = #C1}) → self::C {
+  static factory fact({core::int i = #C2}) → self::C {
     return new self::C::gen();
   }
-  static factory redirect({core::int i = #C1}) → self::C
+  static factory redirect({core::int i = #C2}) → self::C
     return new self::C::gen(i: i);
 }
 class D extends core::Object {
@@ -34,5 +34,6 @@
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
index e038284..9882343 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     return new self::_A::•<self::A::•::T%>(value);
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     return new self::_B::•<self::B::•::T%>(value);
 }
@@ -23,3 +23,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
index e038284..9882343 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     return new self::_A::•<self::A::•::T%>(value);
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     return new self::_B::•<self::B::•::T%>(value);
 }
@@ -23,3 +23,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
index e038284..9882343 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     return new self::_A::•<self::A::•::T%>(value);
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     return new self::_B::•<self::B::•::T%>(value);
 }
@@ -23,3 +23,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
index a50e08b..59597d6 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.outline.expect
@@ -22,3 +22,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue43918.dart:5:16 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue43918.dart:13:16 -> ConstructorTearOffConstant(B.)
+Extra constant evaluation: evaluated: 8, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
index e038284..9882343 100644
--- a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
     return new self::_A::•<self::A::•::T%>(value);
 }
@@ -13,7 +13,7 @@
     ;
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
     return new self::_B::•<self::B::•::T%>(value);
 }
@@ -23,3 +23,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
index 2640926..ba12861 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C1
     return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
 Try using a different type as argument.
@@ -75,7 +75,7 @@
     ;
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
@@ -86,3 +86,8 @@
                           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
index 2640926..ba12861 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.strong.transformed.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C1
     return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
 Try using a different type as argument.
@@ -75,7 +75,7 @@
     ;
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
@@ -86,3 +86,8 @@
                           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
index 2640926..ba12861 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C1
     return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
 Try using a different type as argument.
@@ -75,7 +75,7 @@
     ;
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
@@ -86,3 +86,8 @@
                           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
index 1f2f60e..115a6f4 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.outline.expect
@@ -85,3 +85,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///override_checks.dart:19:7 -> ConstructorTearOffConstant(C1.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///override_checks.dart:25:7 -> ConstructorTearOffConstant(D.bar)
+Extra constant evaluation: evaluated: 4, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
index 2640926..ba12861 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
@@ -62,7 +62,7 @@
   method hest(core::num value) → void {}
 }
 class C1 extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C1::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   static factory •() → self::C1
     return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
 Try using a different type as argument.
@@ -75,7 +75,7 @@
     ;
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor foo(core::num x) → self::D
     : super core::Object::•()
     ;
@@ -86,3 +86,8 @@
                           ^";
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.expect
index 3fe3e9d..7948117 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.expect
@@ -226,7 +226,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = 0
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.transformed.expect
index 3fe3e9d..7948117 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.strong.transformed.expect
@@ -226,7 +226,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = 0
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.expect
index c410aaa..752b8a6 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.expect
@@ -217,7 +217,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num*> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.transformed.expect
index c410aaa..752b8a6 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.transformed.expect
@@ -217,7 +217,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = 0
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num*> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.expect
index 7045d9b..fb57de9 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.expect
@@ -81,7 +81,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = true
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.transformed.expect
index 7045d9b..fb57de9 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.strong.transformed.expect
@@ -81,7 +81,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int>
+  #C3 = instantiation #C2 <core::int>
   #C4 = true
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.expect
index c7c169f..3b6c8a8 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.expect
@@ -81,7 +81,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = true
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num*> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.transformed.expect
index c7c169f..3b6c8a8 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.transformed.expect
@@ -81,7 +81,7 @@
 constants  {
   #C1 = 3
   #C2 = static-tearoff self::idFunction
-  #C3 = instantiation self::idFunction <core::int*>
+  #C3 = instantiation #C2 <core::int*>
   #C4 = true
   #C5 = self::Class<dynamic> {field:#C4}
   #C6 = self::Class<core::num*> {field:#C4}
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
index b504950..f72fa11 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.expect
@@ -82,7 +82,7 @@
 
 constants  {
   #C1 = static-tearoff con::id
-  #C2 = instantiation con::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = 0
   #C4 = con::Class<core::int*> {field:#C3}
   #C5 = <core::int*>[#C3]
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
index b504950..f72fa11 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.transformed.expect
@@ -82,7 +82,7 @@
 
 constants  {
   #C1 = static-tearoff con::id
-  #C2 = instantiation con::id <core::int*>
+  #C2 = instantiation #C1 <core::int*>
   #C3 = 0
   #C4 = con::Class<core::int*> {field:#C3}
   #C5 = <core::int*>[#C3]
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
index 9f5ab6a..ffdea68 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::Class
     : super core::Object::•()
     ;
@@ -11,3 +11,7 @@
     return new self::Class::•();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
index 2dad0b1..96a3670 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.outline.expect
@@ -11,3 +11,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory.dart:8:7 -> ConstructorTearOffConstant(Class.redirect)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
index 9f5ab6a..ffdea68 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → self::Class
     : super core::Object::•()
     ;
@@ -11,3 +11,7 @@
     return new self::Class::•();
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
index 34cee4f..e605bd9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.expect
@@ -34,7 +34,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object?> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class1::redirect, opt::Class1::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6, #C7]/*isLegacy*/;
   const constructor _() → opt::Class1<opt::Class1::T%>
     : super core::Object::•()
     ;
@@ -46,7 +46,7 @@
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
 class Class2<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class2::redirect, opt::Class2::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8, #C9]/*isLegacy*/;
   const constructor _() → opt::Class2<opt::Class2::T>
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
 class Class3<T extends core::String> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class3::redirect, opt::Class3::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10, #C11]/*isLegacy*/;
   const constructor _() → opt::Class3<opt::Class3::T>
     : super core::Object::•()
     ;
@@ -70,7 +70,7 @@
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class4::redirect, opt::Class4::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C12, #C13]/*isLegacy*/;
   const constructor _() → opt::Class4<opt::Class4::T%>
     : super core::Object::•()
     ;
@@ -82,7 +82,7 @@
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
 class Class5<T extends dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class5::redirect, opt::Class5::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C14, #C15]/*isLegacy*/;
   const constructor _() → opt::Class5<opt::Class5::T%>
     : super core::Object::•()
     ;
@@ -96,7 +96,7 @@
 static method testOptIn() → dynamic {
   new opt::Class1::_<core::Object?>();
   new opt::Class1::_<core::Object?>();
-  #C6;
+  #C16;
   opt::Class1::fact<core::Object?>();
   new opt::Class2::_<core::Object>();
   new opt::Class2::_<core::Object>();
@@ -122,7 +122,17 @@
   #C3 = opt::Class3<core::String*> {}
   #C4 = opt::Class4<dynamic> {}
   #C5 = opt::Class5<dynamic> {}
-  #C6 = opt::Class1<core::Object?> {}
+  #C6 = constructor-tearoff opt::Class1::redirect
+  #C7 = constructor-tearoff opt::Class1::constRedirect
+  #C8 = constructor-tearoff opt::Class2::redirect
+  #C9 = constructor-tearoff opt::Class2::constRedirect
+  #C10 = constructor-tearoff opt::Class3::redirect
+  #C11 = constructor-tearoff opt::Class3::constRedirect
+  #C12 = constructor-tearoff opt::Class4::redirect
+  #C13 = constructor-tearoff opt::Class4::constRedirect
+  #C14 = constructor-tearoff opt::Class5::redirect
+  #C15 = constructor-tearoff opt::Class5::constRedirect
+  #C16 = opt::Class1<core::Object?> {}
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
index 958ab4c..e1a0b96 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.outline.expect
@@ -72,3 +72,17 @@
 }
 static method testOptIn() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:5:7 -> ConstructorTearOffConstant(Class1.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:5:7 -> ConstructorTearOffConstant(Class1.constRedirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:13:7 -> ConstructorTearOffConstant(Class2.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:13:7 -> ConstructorTearOffConstant(Class2.constRedirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:21:7 -> ConstructorTearOffConstant(Class3.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:21:7 -> ConstructorTearOffConstant(Class3.constRedirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:29:7 -> ConstructorTearOffConstant(Class4.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:29:7 -> ConstructorTearOffConstant(Class4.constRedirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:37:7 -> ConstructorTearOffConstant(Class5.redirect)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:37:7 -> ConstructorTearOffConstant(Class5.constRedirect)
+Extra constant evaluation: evaluated: 25, effectively constant: 10
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
index 34cee4f..e605bd9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Object?> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class1::redirect, opt::Class1::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6, #C7]/*isLegacy*/;
   const constructor _() → opt::Class1<opt::Class1::T%>
     : super core::Object::•()
     ;
@@ -46,7 +46,7 @@
     return new opt::Class1::_<opt::Class1::fact::T%>();
 }
 class Class2<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class2::redirect, opt::Class2::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8, #C9]/*isLegacy*/;
   const constructor _() → opt::Class2<opt::Class2::T>
     : super core::Object::•()
     ;
@@ -58,7 +58,7 @@
     return new opt::Class2::_<opt::Class2::fact::T>();
 }
 class Class3<T extends core::String> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class3::redirect, opt::Class3::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C10, #C11]/*isLegacy*/;
   const constructor _() → opt::Class3<opt::Class3::T>
     : super core::Object::•()
     ;
@@ -70,7 +70,7 @@
     return new opt::Class3::_<opt::Class3::fact::T>();
 }
 class Class4<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class4::redirect, opt::Class4::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C12, #C13]/*isLegacy*/;
   const constructor _() → opt::Class4<opt::Class4::T%>
     : super core::Object::•()
     ;
@@ -82,7 +82,7 @@
     return new opt::Class4::_<opt::Class4::fact::T%>();
 }
 class Class5<T extends dynamic> extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::Class5::redirect, opt::Class5::constRedirect]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C14, #C15]/*isLegacy*/;
   const constructor _() → opt::Class5<opt::Class5::T%>
     : super core::Object::•()
     ;
@@ -96,7 +96,7 @@
 static method testOptIn() → dynamic {
   new opt::Class1::_<core::Object?>();
   new opt::Class1::_<core::Object?>();
-  #C6;
+  #C16;
   opt::Class1::fact<core::Object?>();
   new opt::Class2::_<core::Object>();
   new opt::Class2::_<core::Object>();
@@ -122,7 +122,17 @@
   #C3 = opt::Class3<core::String*> {}
   #C4 = opt::Class4<dynamic> {}
   #C5 = opt::Class5<dynamic> {}
-  #C6 = opt::Class1<core::Object?> {}
+  #C6 = constructor-tearoff opt::Class1::redirect
+  #C7 = constructor-tearoff opt::Class1::constRedirect
+  #C8 = constructor-tearoff opt::Class2::redirect
+  #C9 = constructor-tearoff opt::Class2::constRedirect
+  #C10 = constructor-tearoff opt::Class3::redirect
+  #C11 = constructor-tearoff opt::Class3::constRedirect
+  #C12 = constructor-tearoff opt::Class4::redirect
+  #C13 = constructor-tearoff opt::Class4::constRedirect
+  #C14 = constructor-tearoff opt::Class5::redirect
+  #C15 = constructor-tearoff opt::Class5::constRedirect
+  #C16 = opt::Class1<core::Object?> {}
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
index 2cb6f54..342dcae 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.expect
@@ -50,7 +50,7 @@
     ;
 }
 class CP<T extends core::Object> extends opt::P<opt::CP::T> /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::CP::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
   const constructor _(core::Object token) → opt::CP<opt::CP::T>
     : super opt::P::_(token)
     ;
@@ -63,7 +63,7 @@
     ;
 }
 class VP<T extends core::Object> extends opt::P<opt::VP::T> /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::VP::forToken]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   const constructor _(core::Object token, opt::VP::T useValue) → opt::VP<opt::VP::T>
     : super opt::P::_(token)
     ;
@@ -72,7 +72,7 @@
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
-  const constructor •({core::List<opt::P<core::Object>> list = #C7}) → opt::M
+  const constructor •({core::List<opt::P<core::Object>> list = #C9}) → opt::M
     : opt::M::list = list, super core::Object::•()
     ;
 }
@@ -84,7 +84,9 @@
   #C4 = opt::VP<core::Object*> {token:#C3}
   #C5 = <opt::P<core::Object*>*>[#C2, #C4]
   #C6 = opt::M {list:#C5}
-  #C7 = <opt::P<core::Object*>*>[]
+  #C7 = constructor-tearoff opt::CP::•
+  #C8 = constructor-tearoff opt::VP::forToken
+  #C9 = <opt::P<core::Object*>*>[]
 }
 
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
index ee92a0d..98b7803 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.outline.expect
@@ -81,5 +81,7 @@
 Extra constant evaluation status:
 Evaluated: ListLiteral @ org-dartlang-testcase:///main.dart:15:14 -> ListConstant(const <P<Object*>*>[const CP<Object*>{P.token: Class*}, const VP<Object*>{P.token: const XToken{}}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:20:11 -> InstanceConstant(const M{M.list: const <P<Object*>*>[const CP<Object*>{P.token: Class*}, const VP<Object*>{P.token: const XToken{}}]})
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:11:7 -> ConstructorTearOffConstant(CP.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///opt_in_lib.dart:21:7 -> ConstructorTearOffConstant(VP.forToken)
 Evaluated: ListLiteral @ org-dartlang-testcase:///opt_in_lib.dart:36:24 -> ListConstant(const <P<Object*>*>[])
-Extra constant evaluation: evaluated: 16, effectively constant: 3
+Extra constant evaluation: evaluated: 16, effectively constant: 5
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
index 2cb6f54..342dcae 100644
--- a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.transformed.expect
@@ -50,7 +50,7 @@
     ;
 }
 class CP<T extends core::Object> extends opt::P<opt::CP::T> /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::CP::•]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
   const constructor _(core::Object token) → opt::CP<opt::CP::T>
     : super opt::P::_(token)
     ;
@@ -63,7 +63,7 @@
     ;
 }
 class VP<T extends core::Object> extends opt::P<opt::VP::T> /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[opt::VP::forToken]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
   const constructor _(core::Object token, opt::VP::T useValue) → opt::VP<opt::VP::T>
     : super opt::P::_(token)
     ;
@@ -72,7 +72,7 @@
 }
 class M extends core::Object /*hasConstConstructor*/  {
   final field core::List<opt::P<core::Object>> list;
-  const constructor •({core::List<opt::P<core::Object>> list = #C7}) → opt::M
+  const constructor •({core::List<opt::P<core::Object>> list = #C9}) → opt::M
     : opt::M::list = list, super core::Object::•()
     ;
 }
@@ -84,7 +84,9 @@
   #C4 = opt::VP<core::Object*> {token:#C3}
   #C5 = <opt::P<core::Object*>*>[#C2, #C4]
   #C6 = opt::M {list:#C5}
-  #C7 = <opt::P<core::Object*>*>[]
+  #C7 = constructor-tearoff opt::CP::•
+  #C8 = constructor-tearoff opt::VP::forToken
+  #C9 = <opt::P<core::Object*>*>[]
 }
 
 
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
index 3df2a9b..ae8fcc4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef BAlias = self::B;
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   static factory •() → self::A
     return new self::B::•();
   static factory named() → self::A
@@ -19,3 +19,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
index 3df2a9b..ae8fcc4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 typedef BAlias = self::B;
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   static factory •() → self::A
     return new self::B::•();
   static factory named() → self::A
@@ -19,3 +19,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
index 3df2a9b..ae8fcc4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.expect
@@ -4,7 +4,7 @@
 
 typedef BAlias = self::B;
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   static factory •() → self::A
     return new self::B::•();
   static factory named() → self::A
@@ -19,3 +19,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
index 978eeea..9cd6482 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.outline.expect
@@ -18,3 +18,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45051.dart:5:7 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45051.dart:5:7 -> ConstructorTearOffConstant(A.named)
+Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
index 3df2a9b..ae8fcc4 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 typedef BAlias = self::B;
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•, self::A::named]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
   static factory •() → self::A
     return new self::B::•();
   static factory named() → self::A
@@ -19,3 +19,8 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
index 1d4c9d2..14a187b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.expect
@@ -69,7 +69,7 @@
 typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
 typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
 class C<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::C<self::C::X%>
     : super core::Object::•() {}
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
@@ -78,7 +78,7 @@
     return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor •() → self::D<self::D::X%>
     : super core::Object::•()
     ;
@@ -108,3 +108,8 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
index 1d4c9d2..14a187b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.strong.transformed.expect
@@ -69,7 +69,7 @@
 typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
 typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
 class C<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::C<self::C::X%>
     : super core::Object::•() {}
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
@@ -78,7 +78,7 @@
     return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor •() → self::D<self::D::X%>
     : super core::Object::•()
     ;
@@ -108,3 +108,8 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
index 1d4c9d2..14a187b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.expect
@@ -69,7 +69,7 @@
 typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
 typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
 class C<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::C<self::C::X%>
     : super core::Object::•() {}
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
@@ -78,7 +78,7 @@
     return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor •() → self::D<self::D::X%>
     : super core::Object::•()
     ;
@@ -108,3 +108,8 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
index 218a88b..e8f791f 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.outline.expect
@@ -39,3 +39,9 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45519_2.dart:5:7 -> ConstructorTearOffConstant(C.bar)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue45519_2.dart:10:7 -> ConstructorTearOffConstant(D.bar)
+Extra constant evaluation: evaluated: 12, effectively constant: 2
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
index 1d4c9d2..14a187b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.transformed.expect
@@ -69,7 +69,7 @@
 typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
 typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
 class C<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor foo() → self::C<self::C::X%>
     : super core::Object::•() {}
   static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
@@ -78,7 +78,7 @@
     return self::C::•<self::C::bar::X%>();
 }
 class D<X extends core::Object? = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::bar]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
   constructor •() → self::D<self::D::X%>
     : super core::Object::•()
     ;
@@ -108,3 +108,8 @@
   return self::D::foo<self::_#B#foo#tearOff::X>();
 static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
   return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
index 4ca626f..b641197 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.expect
@@ -75,7 +75,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::D*
     return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
   factory D() = Missing;
@@ -99,3 +99,7 @@
   factory D() = Missing;
                 ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::D::•
+}
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
index 5a0190f..b631f32 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.outline.expect
@@ -91,3 +91,8 @@
 }
 static method main() → void
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///class_hierarchy.dart:11:7 -> ConstructorTearOffConstant(D.)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
index 4ca626f..b641197 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.transformed.expect
@@ -75,7 +75,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::D::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::D*
     return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
   factory D() = Missing;
@@ -99,3 +99,7 @@
   factory D() = Missing;
                 ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::D::•
+}
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
index 900f8a7..05e4007 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3];
   constructor internal() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -102,7 +102,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
+  static final field dynamic _redirecting# = <dynamic>[#C4, #C5];
   constructor internal() → self::B<self::B::S*>*
     : super self::A::internal()
     ;
@@ -140,3 +140,11 @@
   factory A.c() = Missing;
                   ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::a
+  #C2 = constructor-tearoff self::A::b
+  #C3 = constructor-tearoff self::A::c
+  #C4 = constructor-tearoff self::B::a
+  #C5 = constructor-tearoff self::B::b
+}
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
index 12ffeef..ba2de86 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.outline.expect
@@ -117,3 +117,12 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:11:7 -> ConstructorTearOffConstant(A.a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:11:7 -> ConstructorTearOffConstant(A.b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:11:7 -> ConstructorTearOffConstant(A.c)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:19:7 -> ConstructorTearOffConstant(B.a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///generic_factory.dart:19:7 -> ConstructorTearOffConstant(B.b)
+Extra constant evaluation: evaluated: 9, effectively constant: 5
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
index 900f8a7..05e4007 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.transformed.expect
@@ -73,7 +73,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::a, self::A::b, self::A::c];
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3];
   constructor internal() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -102,7 +102,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::a, self::B::b];
+  static final field dynamic _redirecting# = <dynamic>[#C4, #C5];
   constructor internal() → self::B<self::B::S*>*
     : super self::A::internal()
     ;
@@ -140,3 +140,11 @@
   factory A.c() = Missing;
                   ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::a
+  #C2 = constructor-tearoff self::A::b
+  #C3 = constructor-tearoff self::A::c
+  #C4 = constructor-tearoff self::B::a
+  #C5 = constructor-tearoff self::B::b
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
index 58f3e10..b0dbf3f 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
@@ -63,7 +63,7 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::C::good];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   const constructor constant() → self::C*
     : super core::Object::•()
     ;
@@ -98,17 +98,18 @@
          ^";
 static method main() → dynamic {
   self::C* c = null;
-  core::print(#C1);
+  core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   print(const C.missingFactoryKeyword());
               ^");
-  core::print(#C1);
+  core::print(#C2);
   core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
 }
 
 constants  {
-  #C1 = self::C {}
+  #C1 = constructor-tearoff self::C::good
+  #C2 = self::C {}
 }
 
 
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
index 49eadbc..19384f6 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.outline.expect
@@ -54,3 +54,8 @@
   ;
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000044.dart:9:7 -> ConstructorTearOffConstant(C.good)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
index 41ab0dd..b406cc3 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
@@ -63,7 +63,7 @@
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::C::good];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   const constructor constant() → self::C*
     : super core::Object::•()
     ;
@@ -98,17 +98,18 @@
          ^";
 static method main() → dynamic {
   self::C* c = null;
-  core::print(#C1);
+  core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   print(const C.missingFactoryKeyword());
               ^");
-  core::print(#C1);
+  core::print(#C2);
   core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
 }
 
 constants  {
-  #C1 = self::C {}
+  #C1 = constructor-tearoff self::C::good
+  #C2 = self::C {}
 }
 
 
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
index 3f594b7..66f50c0 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
@@ -45,3 +45,8 @@
   self::A* a = new self::D::•();
   exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
index b498bf4..1f48749 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.outline.expect
@@ -40,3 +40,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000067.dart:7:7 -> ConstructorTearOffConstant(A.foo)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_000067.dart:13:7 -> ConstructorTearOffConstant(C.bar)
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
index 3f594b7..66f50c0 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::foo];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::A*
     : super core::Object::•() {}
   static factory foo() → self::A*
@@ -24,7 +24,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → self::C*
     : super self::A::•() {}
   static factory bar() → self::C*
@@ -45,3 +45,8 @@
   self::A* a = new self::D::•();
   exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
 }
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
index 89937c2..6a366d0 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.expect
@@ -33,7 +33,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::Supertype*
     return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
   factory Supertype() = Unresolved;
@@ -54,3 +54,7 @@
   print(new Supertype());
             ^");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
index e164c58..da1fe3e 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.outline.expect
@@ -47,3 +47,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_35259.dart:5:7 -> ConstructorTearOffConstant(Supertype.)
+Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
index 89937c2..6a366d0 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::Supertype*
     return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
   factory Supertype() = Unresolved;
@@ -54,3 +54,7 @@
   print(new Supertype());
             ^");
 }
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
index 27e321c..0b4828a 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::Supertype*
     return new self::X::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -51,3 +51,7 @@
   X x = new Supertype();
             ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
index 5198fda..fd0802b 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.outline.expect
@@ -43,3 +43,8 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_35260.dart:5:7 -> ConstructorTearOffConstant(Supertype.)
+Extra constant evaluation: evaluated: 3, effectively constant: 1
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
index 27e321c..0b4828a 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class Supertype extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Supertype::•];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   static factory •() → self::Supertype*
     return new self::X::•();
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -51,3 +51,7 @@
   X x = new Supertype();
             ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
index 6e380a7..9885c52 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::foo];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::B<self::B::T*>*
     : super self::C::•()
     ;
@@ -25,7 +25,7 @@
     return new self::B::•<self::B::foo::T*>();
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → self::C<self::C::K*>*
     : super core::Object::•()
     ;
@@ -49,3 +49,8 @@
   factory C.bar() = B<K>.foo;
                     ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::B::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
index b64319b..c71adb4 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.outline.expect
@@ -44,3 +44,9 @@
 }
 static method main() → dynamic
   ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_35266.dart:5:7 -> ConstructorTearOffConstant(B.foo)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue_35266.dart:11:7 -> ConstructorTearOffConstant(C.bar)
+Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
index 6e380a7..9885c52 100644
--- a/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::foo];
+  static final field dynamic _redirecting# = <dynamic>[#C1];
   constructor •() → self::B<self::B::T*>*
     : super self::C::•()
     ;
@@ -25,7 +25,7 @@
     return new self::B::•<self::B::foo::T*>();
 }
 class C<K extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::C::bar];
+  static final field dynamic _redirecting# = <dynamic>[#C2];
   constructor •() → self::C<self::C::K*>*
     : super core::Object::•()
     ;
@@ -49,3 +49,8 @@
   factory C.bar() = B<K>.foo;
                     ^";
 }
+
+constants  {
+  #C1 = constructor-tearoff self::B::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 3bddafe..86800bb 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -4921,7 +4921,8 @@
   Reference targetReference;
 
   StaticGet(Member target)
-      : this.byReference(getNonNullableMemberReferenceGetter(target));
+      : assert(target is Field || (target is Procedure && target.isGetter)),
+        this.targetReference = getNonNullableMemberReferenceGetter(target);
 
   StaticGet.byReference(this.targetReference);
 
@@ -4969,7 +4970,10 @@
   Reference targetReference;
 
   StaticTearOff(Procedure target)
-      : this.byReference(getNonNullableMemberReferenceGetter(target));
+      : assert(target.isStatic, "Unexpected static tear off target: $target"),
+        assert(target.kind == ProcedureKind.Method,
+            "Unexpected static tear off target: $target"),
+        this.targetReference = getNonNullableMemberReferenceGetter(target);
 
   StaticTearOff.byReference(this.targetReference);
 
@@ -8619,8 +8623,9 @@
   Reference targetReference;
 
   ConstructorTearOff(Member target)
-      : assert(target is Constructor ||
-            (target is Procedure && target.kind == ProcedureKind.Factory)),
+      : assert(
+            target is Constructor || (target is Procedure && target.isFactory),
+            "Unexpected constructor tear off target: $target"),
         this.targetReference = getNonNullableMemberReferenceGetter(target);
 
   ConstructorTearOff.byReference(this.targetReference);
@@ -13170,10 +13175,11 @@
   @override
   final Reference targetReference;
 
-  StaticTearOffConstant(Procedure procedure)
-      : targetReference = procedure.reference {
-    assert(procedure.isStatic);
-  }
+  StaticTearOffConstant(Procedure target)
+      : assert(target.isStatic),
+        assert(target.kind == ProcedureKind.Method,
+            "Unexpected static tear off target: $target"),
+        targetReference = target.reference;
 
   StaticTearOffConstant.byReference(this.targetReference);
 
@@ -13231,8 +13237,9 @@
   final Reference targetReference;
 
   ConstructorTearOffConstant(Member target)
-      : assert(target is Constructor ||
-            (target is Procedure && target.kind == ProcedureKind.Factory)),
+      : assert(
+            target is Constructor || (target is Procedure && target.isFactory),
+            "Unexpected constructor tear off target: $target"),
         this.targetReference = getNonNullableMemberReferenceGetter(target);
 
   ConstructorTearOffConstant.byReference(this.targetReference);
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 42babc4..6a24e52 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -2849,12 +2849,7 @@
     writeSpaced('=');
     writeWord('instantiation');
     writeSpace();
-    Constant tearOffConstant = node.tearOffConstant;
-    if (tearOffConstant is TearOffConstant) {
-      writeMemberReferenceFromReference(tearOffConstant.targetReference);
-    } else {
-      writeConstantReference(tearOffConstant);
-    }
+    writeConstantReference(node.tearOffConstant);
     writeSpace();
     writeSymbol('<');
     writeList(node.types, writeType);
diff --git a/tools/VERSION b/tools/VERSION
index 6743daf..9ab1341 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 253
+PRERELEASE 254
 PRERELEASE_PATCH 0
\ No newline at end of file
