diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 7069199..70eeca3 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -125,7 +125,7 @@
 
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes);
 
@@ -351,12 +351,12 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     void build(String ignore, Builder declaration) {
       SourceMemberBuilder member = declaration as SourceMemberBuilder;
-      member.buildOutlineExpressions(library, coreTypes,
+      member.buildOutlineExpressions(library, classHierarchy,
           delayedActionPerformers, synthesizedFunctionNodes);
     }
 
@@ -365,7 +365,7 @@
     if (typeVariables != null) {
       for (int i = 0; i < typeVariables!.length; i++) {
         typeVariables![i].buildOutlineExpressions(library, this, null,
-            coreTypes, delayedActionPerformers, scope.parent!);
+            classHierarchy, delayedActionPerformers, scope.parent!);
       }
     }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
index c91f09f..c2e155b 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
@@ -5,7 +5,8 @@
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/type_algebra.dart';
 
 import '../builder/library_builder.dart';
 
@@ -41,12 +42,16 @@
 import '../util/helpers.dart' show DelayedActionPerformer;
 
 import 'builder.dart';
+import 'class_builder.dart';
 import 'field_builder.dart';
 import 'formal_parameter_builder.dart';
 import 'function_builder.dart';
 import 'member_builder.dart';
 import 'metadata_builder.dart';
+import 'named_type_builder.dart';
+import 'type_alias_builder.dart';
 import 'type_builder.dart';
+import 'type_declaration_builder.dart';
 import 'type_variable_builder.dart';
 
 abstract class ConstructorBuilder implements FunctionBuilder {
@@ -75,6 +80,13 @@
 
   Constructor get actualConstructor => _constructor;
 
+  bool _hasFormalsInferred = false;
+
+  final bool _hasSuperInitializingFormals;
+
+  final List<SynthesizedFunctionNode> _superParameterDefaultValueCloners =
+      <SynthesizedFunctionNode>[];
+
   SourceConstructorBuilder(
       List<MetadataBuilder>? metadata,
       int modifiers,
@@ -106,6 +118,8 @@
             charOffset,
             tearOffReference,
             forAbstractClassOrEnum: forAbstractClassOrEnum),
+        _hasSuperInitializingFormals =
+            formals?.any((formal) => formal.isSuperInitializingFormal) ?? false,
         super(metadata, modifiers, returnType, name, typeVariables, formals,
             compilationUnit, charOffset, nativeMethodName);
 
@@ -190,7 +204,8 @@
     if (formals != null) {
       bool needsInference = false;
       for (FormalParameterBuilder formal in formals!) {
-        if (formal.type == null && formal.isInitializingFormal) {
+        if (formal.type == null &&
+            (formal.isInitializingFormal || formal.isSuperInitializingFormal)) {
           formal.variable!.type = const UnknownType();
           needsInference = true;
         }
@@ -208,13 +223,205 @@
   }
 
   /// Infers the types of any untyped initializing formals.
-  void inferFormalTypes() {
+  void inferFormalTypes(ClassHierarchy classHierarchy) {
+    if (_hasFormalsInferred) return;
     if (formals != null) {
       for (FormalParameterBuilder formal in formals!) {
-        if (formal.type == null && formal.isInitializingFormal) {
-          formal.finalizeInitializingFormal(classBuilder);
+        if (formal.type == null) {
+          if (formal.isInitializingFormal) {
+            formal.finalizeInitializingFormal(classBuilder);
+          }
         }
       }
+
+      if (_hasSuperInitializingFormals) {
+        if (beginInitializers != null) {
+          BodyBuilder bodyBuilder = library.loader
+              .createBodyBuilderForOutlineExpression(
+                  library, classBuilder, this, classBuilder.scope, fileUri);
+          bodyBuilder.constantContext = ConstantContext.required;
+          bodyBuilder.parseInitializers(beginInitializers!,
+              doFinishConstructor: false);
+        }
+        finalizeSuperInitializingFormals(
+            classHierarchy, _superParameterDefaultValueCloners);
+      }
+    }
+    _hasFormalsInferred = true;
+  }
+
+  /* ConstructorBuilder | DillConstructorBuilder */
+  Object? _computeSuperTargetBuilder() {
+    Constructor superTarget;
+    ClassBuilder superclassBuilder;
+
+    TypeBuilder? supertype = classBuilder.supertypeBuilder;
+    if (supertype is NamedTypeBuilder) {
+      TypeDeclarationBuilder? declaration = supertype.declaration;
+      if (declaration is ClassBuilder) {
+        superclassBuilder = declaration;
+      } else if (declaration is TypeAliasBuilder) {
+        declaration = declaration.unaliasDeclaration(supertype.arguments);
+        if (declaration is ClassBuilder) {
+          superclassBuilder = declaration;
+        } else {
+          // The error in this case should be reported elsewhere.
+          return null;
+        }
+      } else {
+        // The error in this case should be reported elsewhere.
+        return null;
+      }
+    } else {
+      // The error in this case should be reported elsewhere.
+      return null;
+    }
+
+    if (constructor.initializers.isNotEmpty &&
+        constructor.initializers.last is SuperInitializer) {
+      superTarget = (constructor.initializers.last as SuperInitializer).target;
+    } else {
+      MemberBuilder? memberBuilder = superclassBuilder.constructors
+          .lookup("", charOffset, library.fileUri);
+      if (memberBuilder is ConstructorBuilder) {
+        superTarget = memberBuilder.constructor;
+      } else if (memberBuilder is DillConstructorBuilder) {
+        superTarget = memberBuilder.constructor;
+      } else {
+        // The error in this case should be reported elsewhere.
+        return null;
+      }
+    }
+
+    MemberBuilder? constructorBuilder =
+        superclassBuilder.findConstructorOrFactory(
+            superTarget.name.text, charOffset, library.fileUri, library);
+    return constructorBuilder is ConstructorBuilder ||
+            constructorBuilder is DillConstructorBuilder
+        ? constructorBuilder
+        : null;
+  }
+
+  void finalizeSuperInitializingFormals(ClassHierarchy classHierarchy,
+      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+    if (formals == null) return;
+    if (!_hasSuperInitializingFormals) return;
+
+    void performRecoveryForErroneousCase() {
+      for (FormalParameterBuilder formal in formals!) {
+        if (formal.isSuperInitializingFormal) {
+          formal.variable!.type = const DynamicType();
+        }
+      }
+    }
+
+    Object? superTargetBuilder = _computeSuperTargetBuilder();
+    Constructor superTarget;
+    List<FormalParameterBuilder>? superFormals;
+    if (superTargetBuilder is SourceConstructorBuilder) {
+      superTarget = superTargetBuilder.constructor;
+      superFormals = superTargetBuilder.formals!;
+    } else if (superTargetBuilder is DillConstructorBuilder) {
+      superTarget = superTargetBuilder.constructor;
+      if (superTargetBuilder is SyntheticConstructorBuilder) {
+        superFormals = superTargetBuilder.formals;
+      } else {
+        // The error in this case should be reported elsewhere. Here we perform
+        // a simple recovery.
+        return performRecoveryForErroneousCase();
+      }
+    } else {
+      // The error in this case should be reported elsewhere. Here we perform a
+      // simple recovery.
+      return performRecoveryForErroneousCase();
+    }
+
+    if (superFormals == null) {
+      // The error in this case should be reported elsewhere. Here we perform a
+      // simple recovery.
+      return performRecoveryForErroneousCase();
+    }
+
+    if (superTargetBuilder is SourceConstructorBuilder) {
+      superTargetBuilder.inferFormalTypes(classHierarchy);
+    } else if (superTargetBuilder is SyntheticConstructorBuilder) {
+      MemberBuilder? superTargetOriginBuilder = superTargetBuilder.actualOrigin;
+      if (superTargetOriginBuilder is SourceConstructorBuilder) {
+        superTargetOriginBuilder.inferFormalTypes(classHierarchy);
+      }
+    }
+
+    int superInitializingFormalIndex = -1;
+    List<int>? positionalSuperParameters;
+    List<String>? namedSuperParameters;
+
+    Supertype? supertype = classHierarchy.getClassAsInstanceOf(
+        classBuilder.cls, superTarget.enclosingClass);
+    assert(supertype != null);
+    Map<TypeParameter, DartType> substitution =
+        new Map<TypeParameter, DartType>.fromIterables(
+            supertype!.classNode.typeParameters, supertype.typeArguments);
+
+    for (int formalIndex = 0; formalIndex < formals!.length; formalIndex++) {
+      FormalParameterBuilder formal = formals![formalIndex];
+      if (formal.isSuperInitializingFormal) {
+        superInitializingFormalIndex++;
+        bool hasImmediatelyDeclaredInitializer = formal.hasDeclaredInitializer;
+        if (formal.type == null) {
+          DartType? type;
+
+          if (formal.isPositional) {
+            if (superInitializingFormalIndex < superFormals.length) {
+              FormalParameterBuilder correspondingSuperFormal =
+                  superFormals[superInitializingFormalIndex];
+              formal.hasDeclaredInitializer =
+                  hasImmediatelyDeclaredInitializer ||
+                      correspondingSuperFormal.hasDeclaredInitializer;
+              if (!hasImmediatelyDeclaredInitializer) {
+                (positionalSuperParameters ??= <int>[]).add(formalIndex);
+              }
+              type = correspondingSuperFormal.variable!.type;
+            } else {
+              // TODO(cstefantsova): Report an error.
+            }
+          } else {
+            FormalParameterBuilder? correspondingSuperFormal;
+            for (FormalParameterBuilder superFormal in superFormals) {
+              if (superFormal.isNamed && superFormal.name == formal.name) {
+                correspondingSuperFormal = superFormal;
+                break;
+              }
+            }
+
+            if (correspondingSuperFormal != null) {
+              formal.hasDeclaredInitializer =
+                  hasImmediatelyDeclaredInitializer ||
+                      correspondingSuperFormal.hasDeclaredInitializer;
+              if (!hasImmediatelyDeclaredInitializer) {
+                (namedSuperParameters ??= <String>[]).add(formal.name);
+              }
+              type = correspondingSuperFormal.variable!.type;
+            } else {
+              // TODO(cstefantsova): Report an error.
+            }
+          }
+
+          if (substitution.isNotEmpty && type != null) {
+            type = substitute(type, substitution);
+          }
+          formal.variable!.type = type ?? const DynamicType();
+        } else {
+          formal.variable!.type = const DynamicType();
+        }
+      }
+    }
+
+    if (positionalSuperParameters != null || namedSuperParameters != null) {
+      synthesizedFunctionNodes.add(new SynthesizedFunctionNode(
+          substitution, superTarget.function, constructor.function,
+          positionalSuperParameters: positionalSuperParameters ?? const <int>[],
+          namedSuperParameters: namedSuperParameters ?? const <String>[],
+          isOutlineNode: true));
     }
   }
 
@@ -223,34 +430,52 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     if (_hasBuiltOutlines) return;
     if (isConst && isPatch) {
-      origin.buildOutlineExpressions(library, coreTypes,
+      origin.buildOutlineExpressions(library, classHierarchy,
           delayedActionPerformers, synthesizedFunctionNodes);
     }
-    super.buildOutlineExpressions(
-        library, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+    super.buildOutlineExpressions(library, classHierarchy,
+        delayedActionPerformers, synthesizedFunctionNodes);
 
     // For modular compilation purposes we need to include initializers
-    // for const constructors into the outline.
-    if (isConst && beginInitializers != null) {
+    // for const constructors into the outline. We also need to parse
+    // initializers to infer types of the super-initializing parameters.
+    if ((isConst || _hasSuperInitializingFormals) &&
+        beginInitializers != null) {
       BodyBuilder bodyBuilder = library.loader
           .createBodyBuilderForOutlineExpression(
               library, classBuilder, this, classBuilder.scope, fileUri);
       bodyBuilder.constantContext = ConstantContext.required;
-      bodyBuilder.parseInitializers(beginInitializers!);
+      bodyBuilder.parseInitializers(beginInitializers!,
+          doFinishConstructor: isConst);
       bodyBuilder.performBacklogComputations(delayedActionPerformers);
     }
     beginInitializers = null;
+    addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
     if (isConst && isPatch) {
       _finishPatch();
     }
     _hasBuiltOutlines = true;
   }
 
+  void addSuperParameterDefaultValueCloners(
+      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+    Object? superTargetBuilder = _computeSuperTargetBuilder();
+    if (superTargetBuilder is SourceConstructorBuilder) {
+      superTargetBuilder
+          .addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
+    } else if (superTargetBuilder is SyntheticConstructorBuilder) {
+      superTargetBuilder
+          .addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
+    }
+    synthesizedFunctionNodes.addAll(_superParameterDefaultValueCloners);
+    _superParameterDefaultValueCloners.clear();
+  }
+
   @override
   void buildFunction(SourceLibraryBuilder library) {
     // According to the specification §9.3 the return type of a constructor
@@ -460,21 +685,40 @@
 
 class SyntheticConstructorBuilder extends DillConstructorBuilder
     with SourceMemberBuilderMixin {
-  SourceMemberBuilder? _origin;
+  // TODO(johnniwinther,cstefantsova): Rename [_origin] to avoid the confusion
+  // with patches.
+  // TODO(johnniwinther): Change the type of [_origin] to SourceMemberBuilder
+  // when it's the supertype for both old SourceMemberBuilder and
+  // SyntheticConstructorBuilder.
+  MemberBuilder? _origin;
   SynthesizedFunctionNode? _synthesizedFunctionNode;
 
   SyntheticConstructorBuilder(SourceClassBuilder parent,
       Constructor constructor, Procedure? constructorTearOff,
-      {SourceMemberBuilder? origin,
-      SynthesizedFunctionNode? synthesizedFunctionNode})
+      {MemberBuilder? origin, SynthesizedFunctionNode? synthesizedFunctionNode})
       : _origin = origin,
         _synthesizedFunctionNode = synthesizedFunctionNode,
         super(constructor, constructorTearOff, parent);
 
+  // TODO(johnniwinther,cstefantsova): Rename [actualOrigin] to avoid the
+  //  confusion with patches.
+  MemberBuilder? get actualOrigin {
+    MemberBuilder? origin = _origin;
+    while (origin is SyntheticConstructorBuilder) {
+      origin = origin._origin;
+    }
+    return origin;
+  }
+
+  List<FormalParameterBuilder>? get formals {
+    MemberBuilder? origin = actualOrigin;
+    return origin is SourceConstructorBuilder ? origin.formals : null;
+  }
+
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder libraryBuilder,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     if (_origin != null) {
@@ -483,12 +727,32 @@
       if (originLibraryBuilder is SourceLibraryBuilder) {
         // If [_origin] is from a source library, we need to build the default
         // values and initializers first.
-        _origin!.buildOutlineExpressions(originLibraryBuilder, coreTypes,
-            delayedActionPerformers, synthesizedFunctionNodes);
+        MemberBuilder origin = _origin!;
+        if (origin is SourceConstructorBuilder) {
+          origin.buildOutlineExpressions(originLibraryBuilder, classHierarchy,
+              delayedActionPerformers, synthesizedFunctionNodes);
+        } else if (origin is SyntheticConstructorBuilder) {
+          origin.buildOutlineExpressions(originLibraryBuilder, classHierarchy,
+              delayedActionPerformers, synthesizedFunctionNodes);
+        }
       }
-      _synthesizedFunctionNode!.cloneDefaultValues();
-      _synthesizedFunctionNode = null;
+      addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
       _origin = null;
     }
   }
+
+  void addSuperParameterDefaultValueCloners(
+      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+    MemberBuilder? origin = _origin;
+    if (origin is SourceConstructorBuilder) {
+      origin.addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
+    } else if (origin is SyntheticConstructorBuilder) {
+      origin.addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
+    }
+    if (_synthesizedFunctionNode != null) {
+      synthesizedFunctionNodes
+          .add(_synthesizedFunctionNode!..isOutlineNode = true);
+      _synthesizedFunctionNode = null;
+    }
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index a72ac97..1253322 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -27,7 +27,7 @@
         StringLiteral,
         SuperInitializer,
         ThisExpression;
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 
 import 'package:kernel/reference_from_index.dart' show IndexedClass;
 
@@ -467,7 +467,7 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder libraryBuilder,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     List<Expression> values = <Expression>[];
@@ -486,7 +486,7 @@
     SourceFieldBuilder valuesBuilder =
         firstMemberNamed("values") as SourceFieldBuilder;
     valuesBuilder.buildBody(
-        coreTypes,
+        classHierarchy.coreTypes,
         new ListLiteral(values,
             typeArgument: rawType(library.nonNullable), isConst: true));
     SourceConstructorBuilder constructorBuilder =
@@ -508,7 +508,7 @@
             new IntLiteral(index++),
             new StringLiteral(constant),
           ]);
-          field.buildBody(coreTypes,
+          field.buildBody(classHierarchy.coreTypes,
               new ConstructorInvocation(constructor, arguments, isConst: true));
         }
       }
@@ -533,8 +533,8 @@
       ]));
     } else {}
 
-    super.buildOutlineExpressions(
-        library, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+    super.buildOutlineExpressions(library, classHierarchy,
+        delayedActionPerformers, synthesizedFunctionNodes);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
index fabf10a..95e42ab 100644
--- a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 
 import '../fasta_codes.dart'
     show templateInternalProblemNotFoundIn, templateTypeArgumentMismatch;
@@ -37,7 +37,7 @@
 
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes);
 
diff --git a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
index 86c7b96..9d3f52d 100644
--- a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/type_algebra.dart';
 
 import '../dill/dill_member_builder.dart';
@@ -167,12 +167,12 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     if (_hasBuiltOutlines) return;
-    super.buildOutlineExpressions(
-        library, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+    super.buildOutlineExpressions(library, classHierarchy,
+        delayedActionPerformers, synthesizedFunctionNodes);
     _hasBuiltOutlines = true;
   }
 
@@ -374,16 +374,16 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     if (_hasBuiltOutlines) return;
     if (isConst && isPatch) {
-      origin.buildOutlineExpressions(library, coreTypes,
+      origin.buildOutlineExpressions(library, classHierarchy,
           delayedActionPerformers, synthesizedFunctionNodes);
     }
-    super.buildOutlineExpressions(
-        library, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+    super.buildOutlineExpressions(library, classHierarchy,
+        delayedActionPerformers, synthesizedFunctionNodes);
     RedirectingFactoryBody redirectingFactoryBody =
         _procedureInternal.function.body as RedirectingFactoryBody;
     List<DartType>? typeArguments = redirectingFactoryBody.typeArguments;
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 8a69632..251ad96 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -7,6 +7,7 @@
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
 
 import 'package:kernel/ast.dart';
+import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/src/legacy_erasure.dart';
 import 'package:kernel/type_algebra.dart';
@@ -419,10 +420,10 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
-    _fieldEncoding.completeSignature(coreTypes);
+    _fieldEncoding.completeSignature(classHierarchy.coreTypes);
 
     for (Annotatable annotatable in _fieldEncoding.annotatables) {
       MetadataBuilder.buildAnnotations(
@@ -464,7 +465,7 @@
             bodyBuilder.transformCollections, library.library);
         initializer = wrapper.operand;
       }
-      buildBody(coreTypes, initializer);
+      buildBody(classHierarchy.coreTypes, initializer);
       bodyBuilder.performBacklogComputations(delayedActionPerformers);
     }
     _constInitializerToken = null;
diff --git a/pkg/front_end/lib/src/fasta/builder/function_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
index 9fda3a8..1390968 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -5,7 +5,7 @@
 library fasta.procedure_builder;
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 
 import '../identifiers.dart';
 import '../scope.dart';
@@ -446,7 +446,7 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     if (!_hasBuiltOutlineExpressions) {
@@ -463,7 +463,7 @@
               library,
               classOrExtensionBuilder,
               this,
-              coreTypes,
+              classHierarchy,
               delayedActionPerformers,
               computeTypeParameterScope(parentScope));
         }
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index d3e08e6..954097a 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -5,7 +5,7 @@
 library fasta.member_builder;
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 
 import '../../base/common.dart';
 
@@ -174,7 +174,7 @@
 
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes);
 }
@@ -223,7 +223,7 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {}
 
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index 2430ab7a..077db8d 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -6,7 +6,7 @@
 
 import 'package:kernel/ast.dart'
     show DartType, Nullability, TypeParameter, TypeParameterType;
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 
 import '../fasta_codes.dart'
     show
@@ -201,7 +201,7 @@
       SourceLibraryBuilder libraryBuilder,
       DeclarationBuilder? classOrExtensionBuilder,
       MemberBuilder? memberBuilder,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       Scope scope) {
     MetadataBuilder.buildAnnotations(parameter, metadata, libraryBuilder,
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
index 097bdc1..01f0010 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 
 import '../builder/extension_builder.dart';
 import '../builder/library_builder.dart';
@@ -108,7 +108,7 @@
   @override
   void buildOutlineExpressions(
       LibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     // TODO(johnniwinther): Remove the need for this.
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 d8fbe1d..3c7b280 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1085,7 +1085,8 @@
       for (int i = 0; i < formals.parameters!.length; i++) {
         FormalParameterBuilder parameter = formals.parameters![i];
         Expression? initializer = parameter.variable!.initializer;
-        if (parameter.isOptional || initializer != null) {
+        if (!parameter.isSuperInitializingFormal &&
+            (parameter.isOptional || initializer != null)) {
           if (!parameter.initializerWasInferred) {
             parameter.initializerWasInferred = true;
             if (parameter.isOptional) {
@@ -1621,7 +1622,7 @@
     return fakeReturn.expression!;
   }
 
-  void parseInitializers(Token token) {
+  void parseInitializers(Token token, {bool doFinishConstructor = true}) {
     Parser parser = new Parser(this,
         useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     if (!token.isEof) {
@@ -1630,10 +1631,10 @@
     } else {
       handleNoInitializers();
     }
-    // We are passing [AsyncMarker.Sync] because the error will be reported
-    // already.
-    finishConstructor(
-        member as SourceConstructorBuilder, AsyncMarker.Sync, null);
+    if (doFinishConstructor) {
+      finishConstructor(
+          member as SourceConstructorBuilder, AsyncMarker.Sync, null);
+    }
   }
 
   Expression parseFieldInitializer(Token token) {
@@ -1724,11 +1725,13 @@
                   ]);
             } else {
               arguments.positional.addAll(positionalSuperParametersAsArguments);
+              setParents(positionalSuperParametersAsArguments, arguments);
             }
           }
           if (namedSuperParametersAsArguments != null) {
             // TODO(cstefantsova): Report name conflicts.
             arguments.named.addAll(namedSuperParametersAsArguments);
+            setParents(namedSuperParametersAsArguments, arguments);
           }
 
           LocatedMessage? message = checkArgumentsForFunction(
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
index bf49dae..8dba882 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -35,9 +35,52 @@
   /// named parameters.
   final bool identicalSignatures;
 
+  final List<int>? _positionalSuperParameters;
+
+  final List<String>? _namedSuperParameters;
+
+  bool isOutlineNode;
+
   SynthesizedFunctionNode(
       this._typeSubstitution, this._original, this._synthesized,
-      {this.identicalSignatures: true});
+      {this.identicalSignatures: true,
+      List<int>? positionalSuperParameters: null,
+      List<String>? namedSuperParameters: null,
+      this.isOutlineNode: false})
+      : _positionalSuperParameters = positionalSuperParameters,
+        _namedSuperParameters = namedSuperParameters,
+        // Check that [positionalSuperParameters] and [namedSuperParameters] are
+        // provided or omitted together.
+        assert((positionalSuperParameters == null) ==
+            (namedSuperParameters == null)),
+        assert(positionalSuperParameters == null ||
+            () {
+              // Check that [positionalSuperParameters] is sorted if it's
+              // provided.
+              for (int i = 1; i < positionalSuperParameters.length; i++) {
+                if (positionalSuperParameters[i] <
+                    positionalSuperParameters[i - 1]) {
+                  return false;
+                }
+              }
+              return true;
+            }()),
+        assert(namedSuperParameters == null ||
+            () {
+              // Check that [namedSuperParameters] are the subset of and in the
+              // same order as the named parameters of [_synthesized].
+              int superParameterIndex = 0;
+              for (int namedParameterIndex = 0;
+                  namedParameterIndex < _synthesized.namedParameters.length &&
+                      superParameterIndex < namedSuperParameters.length;
+                  namedParameterIndex++) {
+                if (_synthesized.namedParameters[namedParameterIndex].name ==
+                    namedSuperParameters[superParameterIndex]) {
+                  ++superParameterIndex;
+                }
+              }
+              return superParameterIndex == namedSuperParameters.length;
+            }());
 
   void cloneDefaultValues() {
     // TODO(ahe): It is unclear if it is legal to use type variables in
@@ -63,17 +106,40 @@
     // unrelated.
 
     if (identicalSignatures) {
-      assert(_synthesized.positionalParameters.length ==
-          _original.positionalParameters.length);
-      for (int i = 0; i < _synthesized.positionalParameters.length; i++) {
-        cloneInitializer(_original.positionalParameters[i],
-            _synthesized.positionalParameters[i]);
+      assert(_positionalSuperParameters != null ||
+          _synthesized.positionalParameters.length ==
+              _original.positionalParameters.length);
+      List<int>? positionalSuperParameters = _positionalSuperParameters;
+      int superParameterIndex = 0;
+      for (int i = 0; i < _original.positionalParameters.length; i++) {
+        if (positionalSuperParameters == null) {
+          cloneInitializer(_original.positionalParameters[i],
+              _synthesized.positionalParameters[i]);
+        } else if (superParameterIndex < positionalSuperParameters.length &&
+            positionalSuperParameters[superParameterIndex] == i) {
+          cloneInitializer(_original.positionalParameters[i],
+              _synthesized.positionalParameters[superParameterIndex]);
+          superParameterIndex++;
+        }
       }
-      assert(_synthesized.namedParameters.length ==
-          _original.namedParameters.length);
-      for (int i = 0; i < _synthesized.namedParameters.length; i++) {
-        cloneInitializer(
-            _original.namedParameters[i], _synthesized.namedParameters[i]);
+
+      assert(_namedSuperParameters != null ||
+          _synthesized.namedParameters.length ==
+              _original.namedParameters.length);
+      List<String>? namedSuperParameters = _namedSuperParameters;
+      superParameterIndex = 0;
+      for (int i = 0; i < _original.namedParameters.length; i++) {
+        if (namedSuperParameters == null) {
+          cloneInitializer(
+              _original.namedParameters[i], _synthesized.namedParameters[i]);
+        } else if (superParameterIndex < namedSuperParameters.length &&
+            namedSuperParameters[superParameterIndex] ==
+                _original.namedParameters[i].name) {
+          // TODO(cstefantsova): Handle the erroneous case of missing names.
+          cloneInitializer(_original.namedParameters[i],
+              _synthesized.namedParameters[superParameterIndex]);
+          superParameterIndex++;
+        }
       }
     } else {
       for (int i = 0; i < _synthesized.positionalParameters.length; i++) {
@@ -110,6 +176,12 @@
       }
     }
   }
+
+  @override
+  String toString() {
+    return "SynthesizedFunctionNode(original=${_original.parent}, "
+        "synthesized=${_synthesized.parent})";
+  }
 }
 
 class TypeDependency {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 2070ba302..4167fe9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -416,9 +416,10 @@
       loader.addNoSuchMethodForwarders(sourceClassBuilders);
       loader.checkMixins(sourceClassBuilders);
       loader.buildOutlineExpressions(
-          loader.coreTypes, synthesizedFunctionNodes);
+          loader.hierarchy, synthesizedFunctionNodes);
       loader.checkTypes();
       loader.checkRedirectingFactories(sourceClassBuilders);
+      finishSynthesizedParameters(forOutline: true);
       loader.checkMainMethods();
       installAllComponentProblems(loader.allComponentProblems);
       loader.allComponentProblems.clear();
@@ -884,22 +885,26 @@
     }
     return new SyntheticConstructorBuilder(
         classBuilder, constructor, constructorTearOff,
-        // If the constructor is constant, the default values must be part of
-        // the outline expressions. We pass on the original constructor and
-        // cloned function nodes to ensure that the default values are computed
-        // and cloned for the outline.
-        origin: isConst && superConstructorBuilder is SourceMemberBuilder
-            ? superConstructorBuilder
-            : null,
-        synthesizedFunctionNode: isConst ? synthesizedFunctionNode : null);
+        // We pass on the original constructor and the cloned function nodes to
+        // ensure that the default values are computed and cloned for the
+        // outline. It is needed to make the default values a part of the
+        // outline for const constructors, and additionally it is required for
+        // a potential subclass using super initializing parameters that will
+        // required the cloning of the default values.
+        origin: superConstructorBuilder,
+        synthesizedFunctionNode: synthesizedFunctionNode);
   }
 
-  void finishSynthesizedParameters() {
+  void finishSynthesizedParameters({bool forOutline = false}) {
     for (SynthesizedFunctionNode synthesizedFunctionNode
         in synthesizedFunctionNodes) {
-      synthesizedFunctionNode.cloneDefaultValues();
+      if (!forOutline || synthesizedFunctionNode.isOutlineNode) {
+        synthesizedFunctionNode.cloneDefaultValues();
+      }
     }
-    synthesizedFunctionNodes.clear();
+    if (!forOutline) {
+      synthesizedFunctionNodes.clear();
+    }
     ticker.logMs("Cloned default values of formals");
   }
 
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index af11d4d..840e400 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -5,7 +5,7 @@
 library fasta.scope;
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 
 import 'builder/builder.dart';
 import 'builder/extension_builder.dart';
@@ -820,7 +820,7 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     throw new UnsupportedError(
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 367808c..f60505d 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
@@ -7,7 +7,6 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart'
     show ClassHierarchy, ClassHierarchyMembers;
-import 'package:kernel/core_types.dart';
 import 'package:kernel/reference_from_index.dart' show IndexedClass;
 import 'package:kernel/src/bounds_checks.dart';
 import 'package:kernel/src/legacy_erasure.dart';
@@ -1927,7 +1926,7 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     // Do nothing.
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 7e37aee..e17ec41 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/type_environment.dart';
 
 import '../../base/common.dart';
@@ -282,7 +282,7 @@
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     MetadataBuilder.buildAnnotations(isPatch ? origin.extension : extension,
@@ -290,13 +290,13 @@
     if (typeParameters != null) {
       for (int i = 0; i < typeParameters!.length; i++) {
         typeParameters![i].buildOutlineExpressions(library, this, null,
-            coreTypes, delayedActionPerformers, scope.parent!);
+            classHierarchy, delayedActionPerformers, scope.parent!);
       }
     }
 
     void build(String ignore, Builder declaration) {
       SourceMemberBuilder member = declaration as SourceMemberBuilder;
-      member.buildOutlineExpressions(library, coreTypes,
+      member.buildOutlineExpressions(library, classHierarchy,
           delayedActionPerformers, synthesizedFunctionNodes);
     }
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index cfa2f08..b7551de 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -17,7 +17,6 @@
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 
 import 'package:kernel/clone.dart' show CloneVisitorNotMembers;
-import 'package:kernel/core_types.dart';
 
 import 'package:kernel/reference_from_index.dart'
     show IndexedClass, IndexedContainer, IndexedLibrary;
@@ -2580,8 +2579,11 @@
     }
     if (constructorBuilder.isConst) {
       currentTypeParameterScopeBuilder.declaresConstConstructor = true;
+    }
+    if (constructorBuilder.isConst || enableSuperParametersInLibrary) {
       // const constructors will have their initializers compiled and written
-      // into the outline.
+      // into the outline. In case of super-parameters language feature, the
+      // super initializers are required to infer the types of super parameters.
       constructorBuilder.beginInitializers =
           beginInitializers ?? new Token.eof(-1);
     }
@@ -2972,14 +2974,14 @@
   }
 
   void buildOutlineExpressions(
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes,
       List<DelayedActionPerformer> delayedActionPerformers) {
     Iterable<SourceLibraryBuilder>? patches = this.patchLibraries;
     if (patches != null) {
       for (SourceLibraryBuilder patchLibrary in patches) {
         patchLibrary.buildOutlineExpressions(
-            coreTypes, synthesizedFunctionNodes, delayedActionPerformers);
+            classHierarchy, synthesizedFunctionNodes, delayedActionPerformers);
       }
     }
 
@@ -2990,17 +2992,17 @@
     while (iterator.moveNext()) {
       Builder declaration = iterator.current;
       if (declaration is ClassBuilder) {
-        declaration.buildOutlineExpressions(
-            this, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+        declaration.buildOutlineExpressions(this, classHierarchy,
+            delayedActionPerformers, synthesizedFunctionNodes);
       } else if (declaration is ExtensionBuilder) {
-        declaration.buildOutlineExpressions(
-            this, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+        declaration.buildOutlineExpressions(this, classHierarchy,
+            delayedActionPerformers, synthesizedFunctionNodes);
       } else if (declaration is SourceMemberBuilder) {
-        declaration.buildOutlineExpressions(
-            this, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+        declaration.buildOutlineExpressions(this, classHierarchy,
+            delayedActionPerformers, synthesizedFunctionNodes);
       } else if (declaration is SourceTypeAliasBuilder) {
-        declaration.buildOutlineExpressions(
-            this, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+        declaration.buildOutlineExpressions(this, classHierarchy,
+            delayedActionPerformers, synthesizedFunctionNodes);
       } else {
         assert(
             declaration is PrefixBuilder ||
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 48f3241..b7bcf7a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1948,13 +1948,13 @@
     ticker.logMs("Checked mixin declaration applications");
   }
 
-  void buildOutlineExpressions(CoreTypes coreTypes,
+  void buildOutlineExpressions(ClassHierarchy classHierarchy,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     List<DelayedActionPerformer> delayedActionPerformers =
         <DelayedActionPerformer>[];
     for (SourceLibraryBuilder library in sourceLibraryBuilders) {
       library.buildOutlineExpressions(
-          coreTypes, synthesizedFunctionNodes, delayedActionPerformers);
+          classHierarchy, synthesizedFunctionNodes, delayedActionPerformers);
     }
     for (DelayedActionPerformer delayedActionPerformer
         in delayedActionPerformers) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index 9585ec4..7ff533d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -6,8 +6,7 @@
 
 import 'package:front_end/src/fasta/kernel/expression_generator_helper.dart';
 import 'package:kernel/ast.dart';
-
-import 'package:kernel/core_types.dart';
+import 'package:kernel/class_hierarchy.dart';
 
 import 'package:kernel/type_algebra.dart'
     show FreshTypeParameters, getFreshTypeParameters;
@@ -258,7 +257,7 @@
 
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
-      CoreTypes coreTypes,
+      ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     MetadataBuilder.buildAnnotations(
@@ -269,7 +268,7 @@
             library,
             null,
             null,
-            coreTypes,
+            classHierarchy,
             delayedActionPerformers,
             computeTypeParameterScope(library.scope));
       }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 34aa46b..407f747 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -154,7 +154,7 @@
     // Field types have all been inferred so we don't need to guard against
     // cyclic dependency.
     for (SourceConstructorBuilder builder in toBeInferred.values) {
-      builder.inferFormalTypes();
+      builder.inferFormalTypes(classHierarchy);
     }
     toBeInferred.clear();
     for (TypeDependency typeDependency in typeDependencies.values) {
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 ad23808..1107037 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
@@ -405,7 +405,7 @@
     } else if ((constructor = engine.toBeInferred[target]) != null) {
       engine.toBeInferred.remove(target);
       engine.beingInferred[target] = constructor!;
-      constructor.inferFormalTypes();
+      constructor.inferFormalTypes(classHierarchy);
       engine.beingInferred.remove(target);
     }
   }
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index 39c9d6c..3f775f2 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -475,6 +475,7 @@
 clone
 cloned
 cloner
+cloners
 clones
 cloning
 close
@@ -586,6 +587,7 @@
 conformed
 confuse
 confused
+confusion
 conjunction
 connect
 connected
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index ea9623a..5452103 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -934,6 +934,7 @@
 t4b
 t\b\f\u
 t\u0008\f\u
+ta
 tails
 talk
 templates
@@ -974,7 +975,10 @@
 trivially
 truncated
 tt
+tta
 ttest
+ttta
+tttta
 txt
 typeargs
 typeparam
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 37b4b1f..dfa0d03 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
@@ -34,7 +34,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]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = 0]) → 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%>
@@ -51,7 +51,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]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = 0]) → 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%>
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 c282d10..16c614a 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
@@ -24,7 +24,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]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+  synthetic constructor •([core::int field = 0]) → 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%>
@@ -35,7 +35,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]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+  synthetic constructor •([core::int field = 0]) → 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%>
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect
index 2950126..60cff2d 100644
--- a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect
@@ -18,10 +18,10 @@
 import "org-dartlang-testcase:///m_lib.dart";
 
 abstract class _B&A&M = a_l::A with m_l::M /*isAnonymousMixin*/  {
-  synthetic constructor •({core::double d, (core::String) → core::String s}) → self2::_B&A&M
+  synthetic constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → self2::_B&A&M
     : super a_l::A::•(d: d, s: s)
     ;
-  synthetic constructor factoryConstructor({core::double d, (core::String) → core::String s}) → self2::_B&A&M
+  synthetic constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → self2::_B&A&M
     : super a_l::A::factoryConstructor(d: d, s: s)
     ;
   mixin-super-stub method m1() → dynamic
diff --git a/pkg/front_end/testcases/general/issue31767.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue31767.dart.weak.outline.expect
index d4d8c65..9e60bbc 100644
--- a/pkg/front_end/testcases/general/issue31767.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue31767.dart.weak.outline.expect
@@ -25,7 +25,7 @@
     ;
 }
 class D = self::C with self::M {
-  synthetic constructor foo(core::int* x, [core::int* y, core::int* z]) → self::D*
+  synthetic constructor foo(core::int* x, [core::int* y = 0, core::int* z = 0]) → self::D*
     : super self::C::foo(x, y, z)
     ;
   mixin-super-stub get w2() → core::int*
@@ -36,7 +36,7 @@
     ;
 }
 class E = iss::A with self::N {
-  synthetic constructor foo(core::int* x, [core::int* y, core::int* z, iss::_A* a]) → self::E*
+  synthetic constructor foo(core::int* x, [core::int* y = iss::_private, core::int* z = iss::_private, iss::_A* a = const iss::_A::•(5)]) → self::E*
     : super iss::A::foo(x, y, z, a)
     ;
   mixin-super-stub get w2() → core::int*
@@ -92,7 +92,10 @@
 
 
 Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///issue31767.dart:31:7 -> IntConstant(3)
+Evaluated: StaticGet @ org-dartlang-testcase:///issue31767.dart:31:7 -> IntConstant(3)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue31767.dart:31:7 -> InstanceConstant(const _A{_A.field: 5})
 Evaluated: StaticGet @ org-dartlang-testcase:///issue31767_lib.dart:14:25 -> IntConstant(3)
 Evaluated: StaticGet @ org-dartlang-testcase:///issue31767_lib.dart:14:43 -> IntConstant(3)
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue31767_lib.dart:14:68 -> InstanceConstant(const _A{_A.field: 5})
-Extra constant evaluation: evaluated: 13, effectively constant: 3
+Extra constant evaluation: evaluated: 16, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.outline.expect
index b84923c..4244473 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.outline.expect
@@ -41,7 +41,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D = self::C<core::String*> with self::M {
-  synthetic constructor •({dynamic a, dynamic b}) → self::D*
+  synthetic constructor •({dynamic a = 0, dynamic b = invalid-type}) → self::D*
     : super self::C::•(a: a, b: b)
     ;
 }
@@ -50,7 +50,7 @@
     ;
 }
 abstract class _F&C&M = self::C<core::int*> with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •({dynamic a, dynamic b}) → self::_F&C&M*
+  synthetic constructor •({dynamic a = 0, dynamic b = invalid-type}) → self::_F&C&M*
     : super self::C::•(a: a, b: b)
     ;
 }
@@ -64,4 +64,6 @@
 
 Extra constant evaluation status:
 Evaluated: TypeLiteral @ org-dartlang-testcase:///mixin_constructors_with_default_values.dart:9:15 -> TypeLiteralConstant(<invalid>)
-Extra constant evaluation: evaluated: 5, effectively constant: 1
+Evaluated: TypeLiteral @ org-dartlang-testcase:///mixin_constructors_with_default_values.dart:14:7 -> TypeLiteralConstant(<invalid>)
+Evaluated: TypeLiteral @ org-dartlang-testcase:///mixin_constructors_with_default_values.dart:18:7 -> TypeLiteralConstant(<invalid>)
+Extra constant evaluation: evaluated: 7, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
index 46d5dff..bffd38a 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
@@ -52,7 +52,7 @@
   synthetic constructor unpatched() → self2::_SubClass&Class&Mixin*
     : super self2::Class::unpatched()
     ;
-  synthetic constructor _internal({core::bool* value}) → self2::_SubClass&Class&Mixin*
+  synthetic constructor _internal({core::bool* value = false}) → self2::_SubClass&Class&Mixin*
     : super self2::Class::_internal(value: value)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart
new file mode 100644
index 0000000..9a48c68
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart
@@ -0,0 +1,40 @@
+// 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.
+
+B1 f1() => throw 42;
+
+class A1 {
+  var foo = f1(); // Ok.
+  A1(this.foo);
+}
+
+class B1 extends A1 {
+  B1(super.foo) : super();
+}
+
+class A2 {
+  var foo = B2.new; // Error.
+  A2(this.foo);
+}
+
+class B2 extends A2 {
+  B2(super.foo) : super();
+}
+
+class A3 {
+  var foo = C3.new; // Error.
+  A3();
+  A3.initializeFoo(this.foo);
+}
+
+class B3 extends A3 {
+  var bar = A3.initializeFoo;
+  B3(this.bar) : super();
+}
+
+class C3 extends B3 {
+  C3(super.bar) : super();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.strong.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.strong.expect
new file mode 100644
index 0000000..063d341
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.strong.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:17:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = B2.new; // Error.
+//       ^^^
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:26:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = C3.new; // Error.
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field self::B1 foo = self::f1();
+  constructor •(self::B1 foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(self::B1 foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  field invalid-type foo = #C1;
+  constructor •(invalid-type foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •(invalid-type foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  field invalid-type foo = #C2;
+  constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  constructor initializeFoo(invalid-type foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  field (invalid-type) → self::A3 bar = #C3;
+  constructor •((invalid-type) → self::A3 bar) → self::B3
+    : self::B3::bar = bar, super self::A3::•()
+    ;
+}
+class C3 extends self::B3 {
+  constructor •((invalid-type) → self::A3 bar) → self::C3
+    : super self::B3::•(bar)
+    ;
+}
+static method f1() → self::B1
+  return throw 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B2::•
+  #C2 = constructor-tearoff self::C3::•
+  #C3 = constructor-tearoff self::A3::initializeFoo
+}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.strong.transformed.expect
new file mode 100644
index 0000000..063d341
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.strong.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:17:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = B2.new; // Error.
+//       ^^^
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:26:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = C3.new; // Error.
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field self::B1 foo = self::f1();
+  constructor •(self::B1 foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(self::B1 foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  field invalid-type foo = #C1;
+  constructor •(invalid-type foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •(invalid-type foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  field invalid-type foo = #C2;
+  constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  constructor initializeFoo(invalid-type foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  field (invalid-type) → self::A3 bar = #C3;
+  constructor •((invalid-type) → self::A3 bar) → self::B3
+    : self::B3::bar = bar, super self::A3::•()
+    ;
+}
+class C3 extends self::B3 {
+  constructor •((invalid-type) → self::A3 bar) → self::C3
+    : super self::B3::•(bar)
+    ;
+}
+static method f1() → self::B1
+  return throw 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B2::•
+  #C2 = constructor-tearoff self::C3::•
+  #C3 = constructor-tearoff self::A3::initializeFoo
+}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect
new file mode 100644
index 0000000..94dbab2
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+B1 f1() => throw 42;
+class A1 {
+  var foo = f1();
+  A1(this.foo);
+}
+class B1 extends A1 {
+  B1(super.foo) : super();
+}
+class A2 {
+  var foo = B2.new;
+  A2(this.foo);
+}
+class B2 extends A2 {
+  B2(super.foo) : super();
+}
+class A3 {
+  var foo = C3.new;
+  A3();
+  A3.initializeFoo(this.foo);
+}
+class B3 extends A3 {
+  var bar = A3.initializeFoo;
+  B3(this.bar) : super();
+}
+class C3 extends B3 {
+  C3(super.bar) : super();
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.expect
new file mode 100644
index 0000000..063d341
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:17:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = B2.new; // Error.
+//       ^^^
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:26:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = C3.new; // Error.
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field self::B1 foo = self::f1();
+  constructor •(self::B1 foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(self::B1 foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  field invalid-type foo = #C1;
+  constructor •(invalid-type foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •(invalid-type foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  field invalid-type foo = #C2;
+  constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  constructor initializeFoo(invalid-type foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  field (invalid-type) → self::A3 bar = #C3;
+  constructor •((invalid-type) → self::A3 bar) → self::B3
+    : self::B3::bar = bar, super self::A3::•()
+    ;
+}
+class C3 extends self::B3 {
+  constructor •((invalid-type) → self::A3 bar) → self::C3
+    : super self::B3::•(bar)
+    ;
+}
+static method f1() → self::B1
+  return throw 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B2::•
+  #C2 = constructor-tearoff self::C3::•
+  #C3 = constructor-tearoff self::A3::initializeFoo
+}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..063d341
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:17:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = B2.new; // Error.
+//       ^^^
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:26:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = C3.new; // Error.
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field self::B1 foo = self::f1();
+  constructor •(self::B1 foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(self::B1 foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  field invalid-type foo = #C1;
+  constructor •(invalid-type foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •(invalid-type foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  field invalid-type foo = #C2;
+  constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  constructor initializeFoo(invalid-type foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  field (invalid-type) → self::A3 bar = #C3;
+  constructor •((invalid-type) → self::A3 bar) → self::B3
+    : self::B3::bar = bar, super self::A3::•()
+    ;
+}
+class C3 extends self::B3 {
+  constructor •((invalid-type) → self::A3 bar) → self::C3
+    : super self::B3::•(bar)
+    ;
+}
+static method f1() → self::B1
+  return throw 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B2::•
+  #C2 = constructor-tearoff self::C3::•
+  #C3 = constructor-tearoff self::A3::initializeFoo
+}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.outline.expect
new file mode 100644
index 0000000..1647019
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.outline.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:17:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = B2.new; // Error.
+//       ^^^
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:26:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = C3.new; // Error.
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field self::B1 foo;
+  constructor •(self::B1 foo) → self::A1
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(self::B1 foo) → self::B1
+    ;
+}
+class A2 extends core::Object {
+  field invalid-type foo;
+  constructor •(invalid-type foo) → self::A2
+    ;
+}
+class B2 extends self::A2 {
+  constructor •(invalid-type foo) → self::B2
+    ;
+}
+class A3 extends core::Object {
+  field invalid-type foo;
+  constructor •() → self::A3
+    ;
+  constructor initializeFoo(invalid-type foo) → self::A3
+    ;
+}
+class B3 extends self::A3 {
+  field (invalid-type) → self::A3 bar;
+  constructor •((invalid-type) → self::A3 bar) → self::B3
+    ;
+}
+class C3 extends self::B3 {
+  constructor •((invalid-type) → self::A3 bar) → self::C3
+    ;
+}
+static method f1() → self::B1
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.transformed.expect
new file mode 100644
index 0000000..063d341
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:17:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = B2.new; // Error.
+//       ^^^
+//
+// pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart:26:7: Error: Can't infer the type of 'foo': circularity found during type inference.
+// Specify the type explicitly.
+//   var foo = C3.new; // Error.
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field self::B1 foo = self::f1();
+  constructor •(self::B1 foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(self::B1 foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  field invalid-type foo = #C1;
+  constructor •(invalid-type foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •(invalid-type foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  field invalid-type foo = #C2;
+  constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  constructor initializeFoo(invalid-type foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  field (invalid-type) → self::A3 bar = #C3;
+  constructor •((invalid-type) → self::A3 bar) → self::B3
+    : self::B3::bar = bar, super self::A3::•()
+    ;
+}
+class C3 extends self::B3 {
+  constructor •((invalid-type) → self::A3 bar) → self::C3
+    : super self::B3::•(bar)
+    ;
+}
+static method f1() → self::B1
+  return throw 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B2::•
+  #C2 = constructor-tearoff self::C3::•
+  #C3 = constructor-tearoff self::A3::initializeFoo
+}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart b/pkg/front_end/testcases/super_parameters/default_values.dart
new file mode 100644
index 0000000..515a046
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart
@@ -0,0 +1,109 @@
+// 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.
+
+class S1 {
+  int s;
+  S1([int x = 0]) : s = x - 1;
+}
+
+class C1 extends S1 {
+  int c;
+  C1([super.x]) : c = x + 1; // Ok.
+}
+
+class S2 {
+  int s;
+  S2({int x = 0}) : s = x - 1;
+}
+
+class C2 extends S2 {
+  int c;
+  C2({super.x}) : c = x + 1; // Ok.
+}
+
+class S3 {
+  int s;
+  S3([int x = 0]) : s = x - 1;
+}
+
+class C3 extends S3 {
+  int c;
+  C3([super.x = 42]) : c = x + 1; // Ok.
+}
+
+class S4 {
+  int s;
+  S4({int x = 0}) : s = x - 1;
+}
+
+class C4 extends S4 {
+  int c;
+  C4({super.x = 42}) : c = x + 1; // Ok.
+}
+
+class S5 {
+  num a;
+  S5([num x = 3.14]) : a = x - 1;
+}
+
+class C5 extends S5 {
+  C5([int super.x]); // Error.
+}
+
+class S6 {
+  num? a;
+  S6([num? x = 3.14]) : a = x;
+}
+
+class C6 extends S6 {
+  int? b;
+  C6([int? super.x]); // Ok.
+}
+
+class S7 {
+  int s;
+  S7([int x = 0]) : s = x - 1;
+}
+
+class C7 extends S7 {
+  int c;
+  C7([super.x]) : c = x + 1;
+}
+
+class CC7 extends C7 {
+  int cc;
+  CC7([super.x]) : cc = x * 1;
+}
+
+class S8 {
+  int s;
+  S8([int x = 0]) : s = x - 1;
+}
+
+class CC8 extends C8 {
+  int cc;
+  CC8([super.x]) : cc = x * 1;
+}
+
+class C8 extends S8 {
+  int c;
+  C8([super.x]) : c = x + 1;
+}
+
+class CC9 extends C9 {
+  int cc;
+  CC9([super.x]) : cc = x * 1;
+}
+
+class C9 extends S9 {
+  int c;
+  C9([super.x]) : c = x + 1;
+}
+
+class S9 {
+  int s;
+  S9([int x = 0]) : s = x - 1;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect
new file mode 100644
index 0000000..d27a628
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect
@@ -0,0 +1,148 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:11: Error: Expected ']' before this.
+//   C5([int super.x]); // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:61:10: Error: Expected ']' before this.
+//   C6([int? super.x]); // Ok.
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S1
+    : self::S1::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C1 extends self::S1 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C1
+    : self::C1::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S1::•(x)
+    ;
+}
+class S2 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S2
+    : self::S2::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C2 extends self::S2 {
+  field core::int c;
+  constructor •({core::int x = #C1}) → self::C2
+    : self::C2::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S2::•(x: x)
+    ;
+}
+class S3 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S3
+    : self::S3::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C3 extends self::S3 {
+  field core::int c;
+  constructor •([core::int x = #C2]) → self::C3
+    : self::C3::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S3::•(x)
+    ;
+}
+class S4 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S4
+    : self::S4::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C4 extends self::S4 {
+  field core::int c;
+  constructor •({core::int x = #C2}) → self::C4
+    : self::C4::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S4::•(x: x)
+    ;
+}
+class S5 extends core::Object {
+  field core::num a;
+  constructor •([core::num x = #C3]) → self::S5
+    : self::S5::a = x.{core::num::-}(1){(core::num) → core::num}, super core::Object::•()
+    ;
+}
+class C5 extends self::S5 {
+  constructor •([dynamic int = #C4]) → self::C5
+    : super self::S5::•()
+    ;
+}
+class S6 extends core::Object {
+  field core::num? a;
+  constructor •([core::num? x = #C3]) → self::S6
+    : self::S6::a = x, super core::Object::•()
+    ;
+}
+class C6 extends self::S6 {
+  field core::int? b = null;
+  constructor •([dynamic int = #C4]) → self::C6
+    : super self::S6::•()
+    ;
+}
+class S7 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S7
+    : self::S7::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C7 extends self::S7 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C7
+    : self::C7::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S7::•(x)
+    ;
+}
+class CC7 extends self::C7 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC7
+    : self::CC7::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C7::•(x)
+    ;
+}
+class S8 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S8
+    : self::S8::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class CC8 extends self::C8 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC8
+    : self::CC8::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C8::•(x)
+    ;
+}
+class C8 extends self::S8 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C8
+    : self::C8::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S8::•(x)
+    ;
+}
+class CC9 extends self::C9 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC9
+    : self::CC9::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C9::•(x)
+    ;
+}
+class C9 extends self::S9 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C9
+    : self::C9::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S9::•(x)
+    ;
+}
+class S9 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S9
+    : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+  #C3 = 3.14
+  #C4 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect
new file mode 100644
index 0000000..d27a628
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect
@@ -0,0 +1,148 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:11: Error: Expected ']' before this.
+//   C5([int super.x]); // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:61:10: Error: Expected ']' before this.
+//   C6([int? super.x]); // Ok.
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S1
+    : self::S1::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C1 extends self::S1 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C1
+    : self::C1::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S1::•(x)
+    ;
+}
+class S2 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S2
+    : self::S2::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C2 extends self::S2 {
+  field core::int c;
+  constructor •({core::int x = #C1}) → self::C2
+    : self::C2::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S2::•(x: x)
+    ;
+}
+class S3 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S3
+    : self::S3::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C3 extends self::S3 {
+  field core::int c;
+  constructor •([core::int x = #C2]) → self::C3
+    : self::C3::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S3::•(x)
+    ;
+}
+class S4 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S4
+    : self::S4::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C4 extends self::S4 {
+  field core::int c;
+  constructor •({core::int x = #C2}) → self::C4
+    : self::C4::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S4::•(x: x)
+    ;
+}
+class S5 extends core::Object {
+  field core::num a;
+  constructor •([core::num x = #C3]) → self::S5
+    : self::S5::a = x.{core::num::-}(1){(core::num) → core::num}, super core::Object::•()
+    ;
+}
+class C5 extends self::S5 {
+  constructor •([dynamic int = #C4]) → self::C5
+    : super self::S5::•()
+    ;
+}
+class S6 extends core::Object {
+  field core::num? a;
+  constructor •([core::num? x = #C3]) → self::S6
+    : self::S6::a = x, super core::Object::•()
+    ;
+}
+class C6 extends self::S6 {
+  field core::int? b = null;
+  constructor •([dynamic int = #C4]) → self::C6
+    : super self::S6::•()
+    ;
+}
+class S7 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S7
+    : self::S7::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C7 extends self::S7 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C7
+    : self::C7::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S7::•(x)
+    ;
+}
+class CC7 extends self::C7 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC7
+    : self::CC7::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C7::•(x)
+    ;
+}
+class S8 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S8
+    : self::S8::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class CC8 extends self::C8 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC8
+    : self::CC8::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C8::•(x)
+    ;
+}
+class C8 extends self::S8 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C8
+    : self::C8::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S8::•(x)
+    ;
+}
+class CC9 extends self::C9 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC9
+    : self::CC9::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C9::•(x)
+    ;
+}
+class C9 extends self::S9 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C9
+    : self::C9::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S9::•(x)
+    ;
+}
+class S9 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S9
+    : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+  #C3 = 3.14
+  #C4 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
new file mode 100644
index 0000000..1cb3689
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
@@ -0,0 +1,84 @@
+class S1 {
+  int s;
+  S1([int x = 0]) : s = x - 1;
+}
+class C1 extends S1 {
+  int c;
+  C1([super.x]) : c = x + 1;
+}
+class S2 {
+  int s;
+  S2({int x = 0}) : s = x - 1;
+}
+class C2 extends S2 {
+  int c;
+  C2({super.x}) : c = x + 1;
+}
+class S3 {
+  int s;
+  S3([int x = 0]) : s = x - 1;
+}
+class C3 extends S3 {
+  int c;
+  C3([super.x = 42]) : c = x + 1;
+}
+class S4 {
+  int s;
+  S4({int x = 0}) : s = x - 1;
+}
+class C4 extends S4 {
+  int c;
+  C4({super.x = 42}) : c = x + 1;
+}
+class S5 {
+  num a;
+  S5([num x = 3.14]) : a = x - 1;
+}
+class C5 extends S5 {
+  C5([int super.x]);
+}
+class S6 {
+  num? a;
+  S6([num? x = 3.14]) : a = x;
+}
+class C6 extends S6 {
+  int? b;
+  C6([int? super.x]);
+}
+class S7 {
+  int s;
+  S7([int x = 0]) : s = x - 1;
+}
+class C7 extends S7 {
+  int c;
+  C7([super.x]) : c = x + 1;
+}
+class CC7 extends C7 {
+  int cc;
+  CC7([super.x]) : cc = x * 1;
+}
+class S8 {
+  int s;
+  S8([int x = 0]) : s = x - 1;
+}
+class CC8 extends C8 {
+  int cc;
+  CC8([super.x]) : cc = x * 1;
+}
+class C8 extends S8 {
+  int c;
+  C8([super.x]) : c = x + 1;
+}
+class CC9 extends C9 {
+  int cc;
+  CC9([super.x]) : cc = x * 1;
+}
+class C9 extends S9 {
+  int c;
+  C9([super.x]) : c = x + 1;
+}
+class S9 {
+  int s;
+  S9([int x = 0]) : s = x - 1;
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect
new file mode 100644
index 0000000..d27a628
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect
@@ -0,0 +1,148 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:11: Error: Expected ']' before this.
+//   C5([int super.x]); // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:61:10: Error: Expected ']' before this.
+//   C6([int? super.x]); // Ok.
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S1
+    : self::S1::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C1 extends self::S1 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C1
+    : self::C1::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S1::•(x)
+    ;
+}
+class S2 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S2
+    : self::S2::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C2 extends self::S2 {
+  field core::int c;
+  constructor •({core::int x = #C1}) → self::C2
+    : self::C2::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S2::•(x: x)
+    ;
+}
+class S3 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S3
+    : self::S3::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C3 extends self::S3 {
+  field core::int c;
+  constructor •([core::int x = #C2]) → self::C3
+    : self::C3::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S3::•(x)
+    ;
+}
+class S4 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S4
+    : self::S4::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C4 extends self::S4 {
+  field core::int c;
+  constructor •({core::int x = #C2}) → self::C4
+    : self::C4::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S4::•(x: x)
+    ;
+}
+class S5 extends core::Object {
+  field core::num a;
+  constructor •([core::num x = #C3]) → self::S5
+    : self::S5::a = x.{core::num::-}(1){(core::num) → core::num}, super core::Object::•()
+    ;
+}
+class C5 extends self::S5 {
+  constructor •([dynamic int = #C4]) → self::C5
+    : super self::S5::•()
+    ;
+}
+class S6 extends core::Object {
+  field core::num? a;
+  constructor •([core::num? x = #C3]) → self::S6
+    : self::S6::a = x, super core::Object::•()
+    ;
+}
+class C6 extends self::S6 {
+  field core::int? b = null;
+  constructor •([dynamic int = #C4]) → self::C6
+    : super self::S6::•()
+    ;
+}
+class S7 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S7
+    : self::S7::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C7 extends self::S7 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C7
+    : self::C7::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S7::•(x)
+    ;
+}
+class CC7 extends self::C7 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC7
+    : self::CC7::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C7::•(x)
+    ;
+}
+class S8 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S8
+    : self::S8::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class CC8 extends self::C8 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC8
+    : self::CC8::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C8::•(x)
+    ;
+}
+class C8 extends self::S8 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C8
+    : self::C8::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S8::•(x)
+    ;
+}
+class CC9 extends self::C9 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC9
+    : self::CC9::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C9::•(x)
+    ;
+}
+class C9 extends self::S9 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C9
+    : self::C9::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S9::•(x)
+    ;
+}
+class S9 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S9
+    : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+  #C3 = 3.14
+  #C4 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..d27a628
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect
@@ -0,0 +1,148 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:11: Error: Expected ']' before this.
+//   C5([int super.x]); // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:61:10: Error: Expected ']' before this.
+//   C6([int? super.x]); // Ok.
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S1
+    : self::S1::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C1 extends self::S1 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C1
+    : self::C1::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S1::•(x)
+    ;
+}
+class S2 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S2
+    : self::S2::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C2 extends self::S2 {
+  field core::int c;
+  constructor •({core::int x = #C1}) → self::C2
+    : self::C2::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S2::•(x: x)
+    ;
+}
+class S3 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S3
+    : self::S3::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C3 extends self::S3 {
+  field core::int c;
+  constructor •([core::int x = #C2]) → self::C3
+    : self::C3::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S3::•(x)
+    ;
+}
+class S4 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S4
+    : self::S4::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C4 extends self::S4 {
+  field core::int c;
+  constructor •({core::int x = #C2}) → self::C4
+    : self::C4::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S4::•(x: x)
+    ;
+}
+class S5 extends core::Object {
+  field core::num a;
+  constructor •([core::num x = #C3]) → self::S5
+    : self::S5::a = x.{core::num::-}(1){(core::num) → core::num}, super core::Object::•()
+    ;
+}
+class C5 extends self::S5 {
+  constructor •([dynamic int = #C4]) → self::C5
+    : super self::S5::•()
+    ;
+}
+class S6 extends core::Object {
+  field core::num? a;
+  constructor •([core::num? x = #C3]) → self::S6
+    : self::S6::a = x, super core::Object::•()
+    ;
+}
+class C6 extends self::S6 {
+  field core::int? b = null;
+  constructor •([dynamic int = #C4]) → self::C6
+    : super self::S6::•()
+    ;
+}
+class S7 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S7
+    : self::S7::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C7 extends self::S7 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C7
+    : self::C7::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S7::•(x)
+    ;
+}
+class CC7 extends self::C7 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC7
+    : self::CC7::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C7::•(x)
+    ;
+}
+class S8 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S8
+    : self::S8::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class CC8 extends self::C8 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC8
+    : self::CC8::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C8::•(x)
+    ;
+}
+class C8 extends self::S8 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C8
+    : self::C8::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S8::•(x)
+    ;
+}
+class CC9 extends self::C9 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC9
+    : self::CC9::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C9::•(x)
+    ;
+}
+class C9 extends self::S9 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C9
+    : self::C9::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S9::•(x)
+    ;
+}
+class S9 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S9
+    : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+  #C3 = 3.14
+  #C4 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect
new file mode 100644
index 0000000..9cb4ff2
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:11: Error: Expected ']' before this.
+//   C5([int super.x]); // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:61:10: Error: Expected ']' before this.
+//   C6([int? super.x]); // Ok.
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = 0]) → self::S1
+    ;
+}
+class C1 extends self::S1 {
+  field core::int c;
+  constructor •([core::int x = 0]) → self::C1
+    ;
+}
+class S2 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = 0}) → self::S2
+    ;
+}
+class C2 extends self::S2 {
+  field core::int c;
+  constructor •({core::int x = 0}) → self::C2
+    ;
+}
+class S3 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = 0]) → self::S3
+    ;
+}
+class C3 extends self::S3 {
+  field core::int c;
+  constructor •([core::int x = 42]) → self::C3
+    ;
+}
+class S4 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = 0}) → self::S4
+    ;
+}
+class C4 extends self::S4 {
+  field core::int c;
+  constructor •({core::int x = 42}) → self::C4
+    ;
+}
+class S5 extends core::Object {
+  field core::num a;
+  constructor •([core::num x = 3.14]) → self::S5
+    ;
+}
+class C5 extends self::S5 {
+  constructor •([dynamic int]) → self::C5
+    ;
+}
+class S6 extends core::Object {
+  field core::num? a;
+  constructor •([core::num? x = 3.14]) → self::S6
+    ;
+}
+class C6 extends self::S6 {
+  field core::int? b;
+  constructor •([dynamic int]) → self::C6
+    ;
+}
+class S7 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = 0]) → self::S7
+    ;
+}
+class C7 extends self::S7 {
+  field core::int c;
+  constructor •([core::int x = 0]) → self::C7
+    ;
+}
+class CC7 extends self::C7 {
+  field core::int cc;
+  constructor •([core::int x = 0]) → self::CC7
+    ;
+}
+class S8 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = 0]) → self::S8
+    ;
+}
+class CC8 extends self::C8 {
+  field core::int cc;
+  constructor •([core::int x = 0]) → self::CC8
+    ;
+}
+class C8 extends self::S8 {
+  field core::int c;
+  constructor •([core::int x = 0]) → self::C8
+    ;
+}
+class CC9 extends self::C9 {
+  field core::int cc;
+  constructor •([core::int x = 0]) → self::CC9
+    ;
+}
+class C9 extends self::S9 {
+  field core::int c;
+  constructor •([core::int x = 0]) → self::C9
+    ;
+}
+class S9 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = 0]) → self::S9
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect
new file mode 100644
index 0000000..d27a628
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect
@@ -0,0 +1,148 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:11: Error: Expected ']' before this.
+//   C5([int super.x]); // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:61:10: Error: Expected ']' before this.
+//   C6([int? super.x]); // Ok.
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class S1 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S1
+    : self::S1::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C1 extends self::S1 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C1
+    : self::C1::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S1::•(x)
+    ;
+}
+class S2 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S2
+    : self::S2::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C2 extends self::S2 {
+  field core::int c;
+  constructor •({core::int x = #C1}) → self::C2
+    : self::C2::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S2::•(x: x)
+    ;
+}
+class S3 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S3
+    : self::S3::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C3 extends self::S3 {
+  field core::int c;
+  constructor •([core::int x = #C2]) → self::C3
+    : self::C3::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S3::•(x)
+    ;
+}
+class S4 extends core::Object {
+  field core::int s;
+  constructor •({core::int x = #C1}) → self::S4
+    : self::S4::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C4 extends self::S4 {
+  field core::int c;
+  constructor •({core::int x = #C2}) → self::C4
+    : self::C4::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S4::•(x: x)
+    ;
+}
+class S5 extends core::Object {
+  field core::num a;
+  constructor •([core::num x = #C3]) → self::S5
+    : self::S5::a = x.{core::num::-}(1){(core::num) → core::num}, super core::Object::•()
+    ;
+}
+class C5 extends self::S5 {
+  constructor •([dynamic int = #C4]) → self::C5
+    : super self::S5::•()
+    ;
+}
+class S6 extends core::Object {
+  field core::num? a;
+  constructor •([core::num? x = #C3]) → self::S6
+    : self::S6::a = x, super core::Object::•()
+    ;
+}
+class C6 extends self::S6 {
+  field core::int? b = null;
+  constructor •([dynamic int = #C4]) → self::C6
+    : super self::S6::•()
+    ;
+}
+class S7 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S7
+    : self::S7::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class C7 extends self::S7 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C7
+    : self::C7::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S7::•(x)
+    ;
+}
+class CC7 extends self::C7 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC7
+    : self::CC7::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C7::•(x)
+    ;
+}
+class S8 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S8
+    : self::S8::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class CC8 extends self::C8 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC8
+    : self::CC8::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C8::•(x)
+    ;
+}
+class C8 extends self::S8 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C8
+    : self::C8::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S8::•(x)
+    ;
+}
+class CC9 extends self::C9 {
+  field core::int cc;
+  constructor •([core::int x = #C1]) → self::CC9
+    : self::CC9::cc = x.{core::num::*}(1){(core::num) → core::int}, super self::C9::•(x)
+    ;
+}
+class C9 extends self::S9 {
+  field core::int c;
+  constructor •([core::int x = #C1]) → self::C9
+    : self::C9::c = x.{core::num::+}(1){(core::num) → core::int}, super self::S9::•(x)
+    ;
+}
+class S9 extends core::Object {
+  field core::int s;
+  constructor •([core::int x = #C1]) → self::S9
+    : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+  #C3 = 3.14
+  #C4 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.strong.expect b/pkg/front_end/testcases/super_parameters/simple.dart.strong.expect
index 2738e5e..1b2cab9 100644
--- a/pkg/front_end/testcases/super_parameters/simple.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.strong.expect
@@ -9,7 +9,7 @@
     ;
 }
 class B extends self::A {
-  constructor •(dynamic foo) → self::B
+  constructor •(core::int foo) → self::B
     : super self::A::•(foo)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/simple.dart.strong.transformed.expect
index 2738e5e..1b2cab9 100644
--- a/pkg/front_end/testcases/super_parameters/simple.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
     ;
 }
 class B extends self::A {
-  constructor •(dynamic foo) → self::B
+  constructor •(core::int foo) → self::B
     : super self::A::•(foo)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.weak.expect b/pkg/front_end/testcases/super_parameters/simple.dart.weak.expect
index 2738e5e..1b2cab9 100644
--- a/pkg/front_end/testcases/super_parameters/simple.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.weak.expect
@@ -9,7 +9,7 @@
     ;
 }
 class B extends self::A {
-  constructor •(dynamic foo) → self::B
+  constructor •(core::int foo) → self::B
     : super self::A::•(foo)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/simple.dart.weak.modular.expect
index 2738e5e..1b2cab9 100644
--- a/pkg/front_end/testcases/super_parameters/simple.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.weak.modular.expect
@@ -9,7 +9,7 @@
     ;
 }
 class B extends self::A {
-  constructor •(dynamic foo) → self::B
+  constructor •(core::int foo) → self::B
     : super self::A::•(foo)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/simple.dart.weak.outline.expect
index 997a20e..61584c5 100644
--- a/pkg/front_end/testcases/super_parameters/simple.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.weak.outline.expect
@@ -8,7 +8,7 @@
     ;
 }
 class B extends self::A {
-  constructor •(dynamic foo) → self::B
+  constructor •(core::int foo) → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/simple.dart.weak.transformed.expect
index 2738e5e..1b2cab9 100644
--- a/pkg/front_end/testcases/super_parameters/simple.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     ;
 }
 class B extends self::A {
-  constructor •(dynamic foo) → self::B
+  constructor •(core::int foo) → self::B
     : super self::A::•(foo)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart b/pkg/front_end/testcases/super_parameters/simple_inference.dart
new file mode 100644
index 0000000..41034252
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart
@@ -0,0 +1,30 @@
+// 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.
+
+class A1 {
+  final int foo;
+  A1(this.foo);
+  A1.named(this.foo);
+  A1.named2(int foo) : foo = foo;
+  A1.named3({required int foo}) : foo = foo;
+}
+
+class B1 extends A1 {
+  B1(super.foo);
+  B1.named(super.foo) : super.named();
+  B1.named2(super.foo) : super.named2();
+  B1.named3({required super.foo}) : super.named3();
+}
+
+class A2 {
+  final int foo;
+  final String bar;
+  A2({required int this.foo, required String this.bar});
+}
+
+class B2 extends A2 {
+  B2({required super.bar, required super.foo});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect
new file mode 100644
index 0000000..2422e10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named2(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named3({required core::int foo = #C1}) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+  constructor named(core::int foo) → self::B1
+    : super self::A1::named(foo)
+    ;
+  constructor named2(core::int foo) → self::B1
+    : super self::A1::named2(foo)
+    ;
+  constructor named3({required dynamic foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int foo;
+  final field core::String bar;
+  constructor •({required core::int foo = #C1, required core::String bar = #C1}) → self::A2
+    : self::A2::foo = foo, self::A2::bar = bar, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •({required core::String bar = #C1, required core::int foo = #C1}) → self::B2
+    : super self::A2::•(bar: bar, foo: foo)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect
new file mode 100644
index 0000000..2422e10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named2(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named3({required core::int foo = #C1}) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+  constructor named(core::int foo) → self::B1
+    : super self::A1::named(foo)
+    ;
+  constructor named2(core::int foo) → self::B1
+    : super self::A1::named2(foo)
+    ;
+  constructor named3({required dynamic foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int foo;
+  final field core::String bar;
+  constructor •({required core::int foo = #C1, required core::String bar = #C1}) → self::A2
+    : self::A2::foo = foo, self::A2::bar = bar, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •({required core::String bar = #C1, required core::int foo = #C1}) → self::B2
+    : super self::A2::•(bar: bar, foo: foo)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect
new file mode 100644
index 0000000..a194020
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+class A1 {
+  final int foo;
+  A1(this.foo);
+  A1.named(this.foo);
+  A1.named2(int foo) : foo = foo;
+  A1.named3({required int foo}) : foo = foo;
+}
+class B1 extends A1 {
+  B1(super.foo);
+  B1.named(super.foo) : super.named();
+  B1.named2(super.foo) : super.named2();
+  B1.named3({required super.foo}) : super.named3();
+}
+class A2 {
+  final int foo;
+  final String bar;
+  A2({required int this.foo, required String this.bar});
+}
+class B2 extends A2 {
+  B2({required super.bar, required super.foo});
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect
new file mode 100644
index 0000000..2422e10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named2(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named3({required core::int foo = #C1}) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+  constructor named(core::int foo) → self::B1
+    : super self::A1::named(foo)
+    ;
+  constructor named2(core::int foo) → self::B1
+    : super self::A1::named2(foo)
+    ;
+  constructor named3({required dynamic foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int foo;
+  final field core::String bar;
+  constructor •({required core::int foo = #C1, required core::String bar = #C1}) → self::A2
+    : self::A2::foo = foo, self::A2::bar = bar, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •({required core::String bar = #C1, required core::int foo = #C1}) → self::B2
+    : super self::A2::•(bar: bar, foo: foo)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..2422e10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named2(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named3({required core::int foo = #C1}) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+  constructor named(core::int foo) → self::B1
+    : super self::A1::named(foo)
+    ;
+  constructor named2(core::int foo) → self::B1
+    : super self::A1::named2(foo)
+    ;
+  constructor named3({required dynamic foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int foo;
+  final field core::String bar;
+  constructor •({required core::int foo = #C1, required core::String bar = #C1}) → self::A2
+    : self::A2::foo = foo, self::A2::bar = bar, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •({required core::String bar = #C1, required core::int foo = #C1}) → self::B2
+    : super self::A2::•(bar: bar, foo: foo)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect
new file mode 100644
index 0000000..c7b816c
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    ;
+  constructor named(core::int foo) → self::A1
+    ;
+  constructor named2(core::int foo) → self::A1
+    ;
+  constructor named3({required core::int foo}) → self::A1
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    ;
+  constructor named(core::int foo) → self::B1
+    ;
+  constructor named2(core::int foo) → self::B1
+    ;
+  constructor named3({required dynamic foo}) → self::B1
+    ;
+}
+class A2 extends core::Object {
+  final field core::int foo;
+  final field core::String bar;
+  constructor •({required core::int foo, required core::String bar}) → self::A2
+    ;
+}
+class B2 extends self::A2 {
+  constructor •({required core::String bar, required core::int foo}) → self::B2
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect
new file mode 100644
index 0000000..2422e10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named2(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+  constructor named3({required core::int foo = #C1}) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+  constructor named(core::int foo) → self::B1
+    : super self::A1::named(foo)
+    ;
+  constructor named2(core::int foo) → self::B1
+    : super self::A1::named2(foo)
+    ;
+  constructor named3({required dynamic foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int foo;
+  final field core::String bar;
+  constructor •({required core::int foo = #C1, required core::String bar = #C1}) → self::A2
+    : self::A2::foo = foo, self::A2::bar = bar, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •({required core::String bar = #C1, required core::int foo = #C1}) → self::B2
+    : super self::A2::•(bar: bar, foo: foo)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.strong.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.strong.expect
index 01051cd..ad7ea47 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.strong.expect
@@ -24,17 +24,17 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::B1
-    : super self::A1::•(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •({required core::int foo = #C1}) → self::B1
+    : super self::A1::•(foo: foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::C1
+  constructor •({required core::int foo = #C1}) → self::C1
     : super self::A1::•(foo: invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:15:22: Error: Duplicated named argument 'foo'.
   C1({required super.foo}) : super(foo: foo); // Error.
                      ^^^" in block {
       foo;
-    } =>foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    } =>foo)
     ;
 }
 class A2 extends core::Object {
@@ -52,13 +52,13 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •({required dynamic foo = #C1}) → self::C2
+  constructor •({required core::int foo = #C1}) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:29:35: Error: Required named parameter 'bar' must be provided.
   C2({required super.foo}) : super(); // Error.
                                   ^"
     ;
-  constructor other({required dynamic foo = #C1}) → self::C2
-    : super self::A2::•(bar: "bar", foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor other({required core::int foo = #C1}) → self::C2
+    : super self::A2::•(bar: "bar", foo: foo)
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.strong.transformed.expect
index 74cac10..ad7ea47 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.strong.transformed.expect
@@ -24,12 +24,12 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::B1
-    : super self::A1::•(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •({required core::int foo = #C1}) → self::B1
+    : super self::A1::•(foo: foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::C1
+  constructor •({required core::int foo = #C1}) → self::C1
     : super self::A1::•(foo: invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:15:22: Error: Duplicated named argument 'foo'.
   C1({required super.foo}) : super(foo: foo); // Error.
                      ^^^" in block {
@@ -52,13 +52,13 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •({required dynamic foo = #C1}) → self::C2
+  constructor •({required core::int foo = #C1}) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:29:35: Error: Required named parameter 'bar' must be provided.
   C2({required super.foo}) : super(); // Error.
                                   ^"
     ;
-  constructor other({required dynamic foo = #C1}) → self::C2
-    : super self::A2::•(bar: "bar", foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor other({required core::int foo = #C1}) → self::C2
+    : super self::A2::•(bar: "bar", foo: foo)
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.expect
index 01051cd..ad7ea47 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.expect
@@ -24,17 +24,17 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::B1
-    : super self::A1::•(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •({required core::int foo = #C1}) → self::B1
+    : super self::A1::•(foo: foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::C1
+  constructor •({required core::int foo = #C1}) → self::C1
     : super self::A1::•(foo: invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:15:22: Error: Duplicated named argument 'foo'.
   C1({required super.foo}) : super(foo: foo); // Error.
                      ^^^" in block {
       foo;
-    } =>foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    } =>foo)
     ;
 }
 class A2 extends core::Object {
@@ -52,13 +52,13 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •({required dynamic foo = #C1}) → self::C2
+  constructor •({required core::int foo = #C1}) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:29:35: Error: Required named parameter 'bar' must be provided.
   C2({required super.foo}) : super(); // Error.
                                   ^"
     ;
-  constructor other({required dynamic foo = #C1}) → self::C2
-    : super self::A2::•(bar: "bar", foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor other({required core::int foo = #C1}) → self::C2
+    : super self::A2::•(bar: "bar", foo: foo)
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.modular.expect
index 01051cd..ad7ea47 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.modular.expect
@@ -24,17 +24,17 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::B1
-    : super self::A1::•(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •({required core::int foo = #C1}) → self::B1
+    : super self::A1::•(foo: foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::C1
+  constructor •({required core::int foo = #C1}) → self::C1
     : super self::A1::•(foo: invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:15:22: Error: Duplicated named argument 'foo'.
   C1({required super.foo}) : super(foo: foo); // Error.
                      ^^^" in block {
       foo;
-    } =>foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    } =>foo)
     ;
 }
 class A2 extends core::Object {
@@ -52,13 +52,13 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •({required dynamic foo = #C1}) → self::C2
+  constructor •({required core::int foo = #C1}) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:29:35: Error: Required named parameter 'bar' must be provided.
   C2({required super.foo}) : super(); // Error.
                                   ^"
     ;
-  constructor other({required dynamic foo = #C1}) → self::C2
-    : super self::A2::•(bar: "bar", foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor other({required core::int foo = #C1}) → self::C2
+    : super self::A2::•(bar: "bar", foo: foo)
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.outline.expect
index f3d5bdd..99e1ef3 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.outline.expect
@@ -8,11 +8,11 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •({required dynamic foo}) → self::B1
+  constructor •({required core::int foo}) → self::B1
     ;
 }
 class C1 extends self::A1 {
-  constructor •({required dynamic foo}) → self::C1
+  constructor •({required core::int foo}) → self::C1
     ;
 }
 class A2 extends core::Object {
@@ -26,9 +26,9 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •({required dynamic foo}) → self::C2
+  constructor •({required core::int foo}) → self::C2
     ;
-  constructor other({required dynamic foo}) → self::C2
+  constructor other({required core::int foo}) → self::C2
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.transformed.expect
index 74cac10..ad7ea47 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.weak.transformed.expect
@@ -24,12 +24,12 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::B1
-    : super self::A1::•(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •({required core::int foo = #C1}) → self::B1
+    : super self::A1::•(foo: foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •({required dynamic foo = #C1}) → self::C1
+  constructor •({required core::int foo = #C1}) → self::C1
     : super self::A1::•(foo: invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:15:22: Error: Duplicated named argument 'foo'.
   C1({required super.foo}) : super(foo: foo); // Error.
                      ^^^" in block {
@@ -52,13 +52,13 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •({required dynamic foo = #C1}) → self::C2
+  constructor •({required core::int foo = #C1}) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart:29:35: Error: Required named parameter 'bar' must be provided.
   C2({required super.foo}) : super(); // Error.
                                   ^"
     ;
-  constructor other({required dynamic foo = #C1}) → self::C2
-    : super self::A2::•(bar: "bar", foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor other({required core::int foo = #C1}) → self::C2
+    : super self::A2::•(bar: "bar", foo: foo)
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.expect
index 228f432..4d064a8 100644
--- a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.expect
@@ -28,12 +28,12 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •(dynamic foo) → self::B1
-    : super self::A1::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •(dynamic foo) → self::C1
+  constructor •(core::int foo) → self::C1
     : super self::A1::•(42)
     ;
 }
@@ -53,7 +53,7 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •(dynamic foo) → self::C2
+  constructor •(core::int foo) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:29:24: Error: Too few positional arguments: 2 required, 1 given.
   C2(super.foo) : super(); // Error.
                        ^"
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.transformed.expect
index 228f432..4d064a8 100644
--- a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.transformed.expect
@@ -28,12 +28,12 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •(dynamic foo) → self::B1
-    : super self::A1::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •(dynamic foo) → self::C1
+  constructor •(core::int foo) → self::C1
     : super self::A1::•(42)
     ;
 }
@@ -53,7 +53,7 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •(dynamic foo) → self::C2
+  constructor •(core::int foo) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:29:24: Error: Too few positional arguments: 2 required, 1 given.
   C2(super.foo) : super(); // Error.
                        ^"
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.expect
index 228f432..4d064a8 100644
--- a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.expect
@@ -28,12 +28,12 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •(dynamic foo) → self::B1
-    : super self::A1::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •(dynamic foo) → self::C1
+  constructor •(core::int foo) → self::C1
     : super self::A1::•(42)
     ;
 }
@@ -53,7 +53,7 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •(dynamic foo) → self::C2
+  constructor •(core::int foo) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:29:24: Error: Too few positional arguments: 2 required, 1 given.
   C2(super.foo) : super(); // Error.
                        ^"
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.modular.expect
index 228f432..4d064a8 100644
--- a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.modular.expect
@@ -28,12 +28,12 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •(dynamic foo) → self::B1
-    : super self::A1::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •(dynamic foo) → self::C1
+  constructor •(core::int foo) → self::C1
     : super self::A1::•(42)
     ;
 }
@@ -53,7 +53,7 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •(dynamic foo) → self::C2
+  constructor •(core::int foo) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:29:24: Error: Too few positional arguments: 2 required, 1 given.
   C2(super.foo) : super(); // Error.
                        ^"
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.outline.expect
index 184b3f4..383a149 100644
--- a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.outline.expect
@@ -8,11 +8,11 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •(dynamic foo) → self::B1
+  constructor •(core::int foo) → self::B1
     ;
 }
 class C1 extends self::A1 {
-  constructor •(dynamic foo) → self::C1
+  constructor •(core::int foo) → self::C1
     ;
 }
 class A2 extends core::Object {
@@ -26,7 +26,7 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •(dynamic foo) → self::C2
+  constructor •(core::int foo) → self::C2
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.transformed.expect
index 228f432..4d064a8 100644
--- a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.transformed.expect
@@ -28,12 +28,12 @@
     ;
 }
 class B1 extends self::A1 {
-  constructor •(dynamic foo) → self::B1
-    : super self::A1::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
     ;
 }
 class C1 extends self::A1 {
-  constructor •(dynamic foo) → self::C1
+  constructor •(core::int foo) → self::C1
     : super self::A1::•(42)
     ;
 }
@@ -53,7 +53,7 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •(dynamic foo) → self::C2
+  constructor •(core::int foo) → self::C2
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:29:24: Error: Too few positional arguments: 2 required, 1 given.
   C2(super.foo) : super(); // Error.
                        ^"
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart
new file mode 100644
index 0000000..71e4e70
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart
@@ -0,0 +1,95 @@
+// 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.
+
+// 1. The base case.
+
+class A1 {
+  final int a;
+  A1(this.a);
+}
+
+class B1 {}
+
+// C1 has a synthesized constructor that takes a positional parameter.
+class C1 = A1 with B1;
+
+class D1 extends C1 {
+  D1(super.a);
+}
+
+// 2. The case of named parameters.
+
+class A2 {
+  final int a;
+  A2({this.a = 0});
+}
+
+class B2 {}
+
+// C2 has a synthesized constructor that takes a named parameter.
+class C2 = A2 with B2;
+
+class D2 extends C2 {
+  D2({super.a});
+}
+
+// 3. The case of optional positional parameters.
+
+class A3 {
+  final int a;
+  A3([this.a = 0]);
+}
+
+class B3 {}
+
+// C3 has a synthesized constructor that takes an optional positional parameter.
+class C3 = A3 with B3;
+
+class D3 extends C3 {
+  D3([super.a]);
+}
+
+// 4. The case of the inverted order of classes.
+
+class D4 extends C4 {
+  D4([super.foo]);
+}
+
+// C4 has a synthesized constructor that takes an optional parameter.
+class C4 = A4 with B4;
+
+class B4 {}
+
+class A4 extends AA4 {
+  A4([super.foo]);
+}
+
+class AA4 {
+  final int foo;
+  AA4([this.foo = 42]);
+}
+
+// 5. The case of a longer named mixin chain.
+
+class D5 extends C5c {
+  D5([super.foo]);
+}
+
+// C5a, C5b, C5c have synthesized constructors that take an optional parameter.
+class C5c = C5b with B5;
+class C5b = C5a with B5;
+class C5a = A5 with B5;
+
+class B5 {}
+
+class A5 extends AA5 {
+  A5([super.foo]);
+}
+
+class AA5 {
+  final int foo;
+  AA5([this.foo = 42]);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect
new file mode 100644
index 0000000..0a867e6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect
@@ -0,0 +1,135 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int a;
+  constructor •(core::int a) → self::A1
+    : self::A1::a = a, super core::Object::•()
+    ;
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+}
+class C1 = self::A1 with self::B1 {
+  synthetic constructor •(core::int a) → self::C1
+    : super self::A1::•(a)
+    ;
+}
+class D1 extends self::C1 {
+  constructor •(core::int a) → self::D1
+    : super self::C1::•(a)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → self::A2
+    : self::A2::a = a, super core::Object::•()
+    ;
+}
+class B2 extends core::Object {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+}
+class C2 = self::A2 with self::B2 {
+  synthetic constructor •({core::int a = #C1}) → self::C2
+    : super self::A2::•(a: a)
+    ;
+}
+class D2 extends self::C2 {
+  constructor •({core::int a = #C1}) → self::D2
+    : super self::C2::•(a: a)
+    ;
+}
+class A3 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → self::A3
+    : self::A3::a = a, super core::Object::•()
+    ;
+}
+class B3 extends core::Object {
+  synthetic constructor •() → self::B3
+    : super core::Object::•()
+    ;
+}
+class C3 = self::A3 with self::B3 {
+  synthetic constructor •([core::int a = #C1]) → self::C3
+    : super self::A3::•(a)
+    ;
+}
+class D3 extends self::C3 {
+  constructor •([core::int a = #C1]) → self::D3
+    : super self::C3::•(a)
+    ;
+}
+class D4 extends self::C4 {
+  constructor •([core::int foo = #C2]) → self::D4
+    : super self::C4::•(foo)
+    ;
+}
+class C4 = self::A4 with self::B4 {
+  synthetic constructor •([core::int foo = #C2]) → self::C4
+    : super self::A4::•(foo)
+    ;
+}
+class B4 extends core::Object {
+  synthetic constructor •() → self::B4
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::AA4 {
+  constructor •([core::int foo = #C2]) → self::A4
+    : super self::AA4::•(foo)
+    ;
+}
+class AA4 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA4
+    : self::AA4::foo = foo, super core::Object::•()
+    ;
+}
+class D5 extends self::C5c {
+  constructor •([core::int foo = #C2]) → self::D5
+    : super self::C5c::•(foo)
+    ;
+}
+class C5c = self::C5b with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5c
+    : super self::C5b::•(foo)
+    ;
+}
+class C5b = self::C5a with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5b
+    : super self::C5a::•(foo)
+    ;
+}
+class C5a = self::A5 with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5a
+    : super self::A5::•(foo)
+    ;
+}
+class B5 extends core::Object {
+  synthetic constructor •() → self::B5
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::AA5 {
+  constructor •([core::int foo = #C2]) → self::A5
+    : super self::AA5::•(foo)
+    ;
+}
+class AA5 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA5
+    : self::AA5::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.transformed.expect
new file mode 100644
index 0000000..cf81c26
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.transformed.expect
@@ -0,0 +1,135 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int a;
+  constructor •(core::int a) → self::A1
+    : self::A1::a = a, super core::Object::•()
+    ;
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+}
+class C1 extends self::A1 implements self::B1 /*isEliminatedMixin*/  {
+  synthetic constructor •(core::int a) → self::C1
+    : super self::A1::•(a)
+    ;
+}
+class D1 extends self::C1 {
+  constructor •(core::int a) → self::D1
+    : super self::C1::•(a)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → self::A2
+    : self::A2::a = a, super core::Object::•()
+    ;
+}
+class B2 extends core::Object {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+}
+class C2 extends self::A2 implements self::B2 /*isEliminatedMixin*/  {
+  synthetic constructor •({core::int a = #C1}) → self::C2
+    : super self::A2::•(a: a)
+    ;
+}
+class D2 extends self::C2 {
+  constructor •({core::int a = #C1}) → self::D2
+    : super self::C2::•(a: a)
+    ;
+}
+class A3 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → self::A3
+    : self::A3::a = a, super core::Object::•()
+    ;
+}
+class B3 extends core::Object {
+  synthetic constructor •() → self::B3
+    : super core::Object::•()
+    ;
+}
+class C3 extends self::A3 implements self::B3 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int a = #C1]) → self::C3
+    : super self::A3::•(a)
+    ;
+}
+class D3 extends self::C3 {
+  constructor •([core::int a = #C1]) → self::D3
+    : super self::C3::•(a)
+    ;
+}
+class D4 extends self::C4 {
+  constructor •([core::int foo = #C2]) → self::D4
+    : super self::C4::•(foo)
+    ;
+}
+class C4 extends self::A4 implements self::B4 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int foo = #C2]) → self::C4
+    : super self::A4::•(foo)
+    ;
+}
+class B4 extends core::Object {
+  synthetic constructor •() → self::B4
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::AA4 {
+  constructor •([core::int foo = #C2]) → self::A4
+    : super self::AA4::•(foo)
+    ;
+}
+class AA4 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA4
+    : self::AA4::foo = foo, super core::Object::•()
+    ;
+}
+class D5 extends self::C5c {
+  constructor •([core::int foo = #C2]) → self::D5
+    : super self::C5c::•(foo)
+    ;
+}
+class C5c extends self::C5b implements self::B5 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int foo = #C2]) → self::C5c
+    : super self::C5b::•(foo)
+    ;
+}
+class C5b extends self::C5a implements self::B5 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int foo = #C2]) → self::C5b
+    : super self::C5a::•(foo)
+    ;
+}
+class C5a extends self::A5 implements self::B5 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int foo = #C2]) → self::C5a
+    : super self::A5::•(foo)
+    ;
+}
+class B5 extends core::Object {
+  synthetic constructor •() → self::B5
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::AA5 {
+  constructor •([core::int foo = #C2]) → self::A5
+    : super self::AA5::•(foo)
+    ;
+}
+class AA5 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA5
+    : self::AA5::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..ed0e4f7
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
@@ -0,0 +1,54 @@
+class A1 {
+  final int a;
+  A1(this.a);
+}
+class B1 {}
+class C1 = A1 with B1;
+class D1 extends C1 {
+  D1(super.a);
+}
+class A2 {
+  final int a;
+  A2({this.a = 0});
+}
+class B2 {}
+class C2 = A2 with B2;
+class D2 extends C2 {
+  D2({super.a});
+}
+class A3 {
+  final int a;
+  A3([this.a = 0]);
+}
+class B3 {}
+class C3 = A3 with B3;
+class D3 extends C3 {
+  D3([super.a]);
+}
+class D4 extends C4 {
+  D4([super.foo]);
+}
+class C4 = A4 with B4;
+class B4 {}
+class A4 extends AA4 {
+  A4([super.foo]);
+}
+class AA4 {
+  final int foo;
+  AA4([this.foo = 42]);
+}
+class D5 extends C5c {
+  D5([super.foo]);
+}
+class C5c = C5b with B5;
+class C5b = C5a with B5;
+class C5a = A5 with B5;
+class B5 {}
+class A5 extends AA5 {
+  A5([super.foo]);
+}
+class AA5 {
+  final int foo;
+  AA5([this.foo = 42]);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect
new file mode 100644
index 0000000..0a867e6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect
@@ -0,0 +1,135 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int a;
+  constructor •(core::int a) → self::A1
+    : self::A1::a = a, super core::Object::•()
+    ;
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+}
+class C1 = self::A1 with self::B1 {
+  synthetic constructor •(core::int a) → self::C1
+    : super self::A1::•(a)
+    ;
+}
+class D1 extends self::C1 {
+  constructor •(core::int a) → self::D1
+    : super self::C1::•(a)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → self::A2
+    : self::A2::a = a, super core::Object::•()
+    ;
+}
+class B2 extends core::Object {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+}
+class C2 = self::A2 with self::B2 {
+  synthetic constructor •({core::int a = #C1}) → self::C2
+    : super self::A2::•(a: a)
+    ;
+}
+class D2 extends self::C2 {
+  constructor •({core::int a = #C1}) → self::D2
+    : super self::C2::•(a: a)
+    ;
+}
+class A3 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → self::A3
+    : self::A3::a = a, super core::Object::•()
+    ;
+}
+class B3 extends core::Object {
+  synthetic constructor •() → self::B3
+    : super core::Object::•()
+    ;
+}
+class C3 = self::A3 with self::B3 {
+  synthetic constructor •([core::int a = #C1]) → self::C3
+    : super self::A3::•(a)
+    ;
+}
+class D3 extends self::C3 {
+  constructor •([core::int a = #C1]) → self::D3
+    : super self::C3::•(a)
+    ;
+}
+class D4 extends self::C4 {
+  constructor •([core::int foo = #C2]) → self::D4
+    : super self::C4::•(foo)
+    ;
+}
+class C4 = self::A4 with self::B4 {
+  synthetic constructor •([core::int foo = #C2]) → self::C4
+    : super self::A4::•(foo)
+    ;
+}
+class B4 extends core::Object {
+  synthetic constructor •() → self::B4
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::AA4 {
+  constructor •([core::int foo = #C2]) → self::A4
+    : super self::AA4::•(foo)
+    ;
+}
+class AA4 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA4
+    : self::AA4::foo = foo, super core::Object::•()
+    ;
+}
+class D5 extends self::C5c {
+  constructor •([core::int foo = #C2]) → self::D5
+    : super self::C5c::•(foo)
+    ;
+}
+class C5c = self::C5b with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5c
+    : super self::C5b::•(foo)
+    ;
+}
+class C5b = self::C5a with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5b
+    : super self::C5a::•(foo)
+    ;
+}
+class C5a = self::A5 with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5a
+    : super self::A5::•(foo)
+    ;
+}
+class B5 extends core::Object {
+  synthetic constructor •() → self::B5
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::AA5 {
+  constructor •([core::int foo = #C2]) → self::A5
+    : super self::AA5::•(foo)
+    ;
+}
+class AA5 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA5
+    : self::AA5::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.modular.expect
new file mode 100644
index 0000000..0a867e6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.modular.expect
@@ -0,0 +1,135 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int a;
+  constructor •(core::int a) → self::A1
+    : self::A1::a = a, super core::Object::•()
+    ;
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+}
+class C1 = self::A1 with self::B1 {
+  synthetic constructor •(core::int a) → self::C1
+    : super self::A1::•(a)
+    ;
+}
+class D1 extends self::C1 {
+  constructor •(core::int a) → self::D1
+    : super self::C1::•(a)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → self::A2
+    : self::A2::a = a, super core::Object::•()
+    ;
+}
+class B2 extends core::Object {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+}
+class C2 = self::A2 with self::B2 {
+  synthetic constructor •({core::int a = #C1}) → self::C2
+    : super self::A2::•(a: a)
+    ;
+}
+class D2 extends self::C2 {
+  constructor •({core::int a = #C1}) → self::D2
+    : super self::C2::•(a: a)
+    ;
+}
+class A3 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → self::A3
+    : self::A3::a = a, super core::Object::•()
+    ;
+}
+class B3 extends core::Object {
+  synthetic constructor •() → self::B3
+    : super core::Object::•()
+    ;
+}
+class C3 = self::A3 with self::B3 {
+  synthetic constructor •([core::int a = #C1]) → self::C3
+    : super self::A3::•(a)
+    ;
+}
+class D3 extends self::C3 {
+  constructor •([core::int a = #C1]) → self::D3
+    : super self::C3::•(a)
+    ;
+}
+class D4 extends self::C4 {
+  constructor •([core::int foo = #C2]) → self::D4
+    : super self::C4::•(foo)
+    ;
+}
+class C4 = self::A4 with self::B4 {
+  synthetic constructor •([core::int foo = #C2]) → self::C4
+    : super self::A4::•(foo)
+    ;
+}
+class B4 extends core::Object {
+  synthetic constructor •() → self::B4
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::AA4 {
+  constructor •([core::int foo = #C2]) → self::A4
+    : super self::AA4::•(foo)
+    ;
+}
+class AA4 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA4
+    : self::AA4::foo = foo, super core::Object::•()
+    ;
+}
+class D5 extends self::C5c {
+  constructor •([core::int foo = #C2]) → self::D5
+    : super self::C5c::•(foo)
+    ;
+}
+class C5c = self::C5b with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5c
+    : super self::C5b::•(foo)
+    ;
+}
+class C5b = self::C5a with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5b
+    : super self::C5a::•(foo)
+    ;
+}
+class C5a = self::A5 with self::B5 {
+  synthetic constructor •([core::int foo = #C2]) → self::C5a
+    : super self::A5::•(foo)
+    ;
+}
+class B5 extends core::Object {
+  synthetic constructor •() → self::B5
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::AA5 {
+  constructor •([core::int foo = #C2]) → self::A5
+    : super self::AA5::•(foo)
+    ;
+}
+class AA5 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA5
+    : self::AA5::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.outline.expect
new file mode 100644
index 0000000..ee7f775
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.outline.expect
@@ -0,0 +1,114 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int a;
+  constructor •(core::int a) → self::A1
+    ;
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    ;
+}
+class C1 = self::A1 with self::B1 {
+  synthetic constructor •(core::int a) → self::C1
+    : super self::A1::•(a)
+    ;
+}
+class D1 extends self::C1 {
+  constructor •(core::int a) → self::D1
+    ;
+}
+class A2 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = 0}) → self::A2
+    ;
+}
+class B2 extends core::Object {
+  synthetic constructor •() → self::B2
+    ;
+}
+class C2 = self::A2 with self::B2 {
+  synthetic constructor •({core::int a = 0}) → self::C2
+    : super self::A2::•(a: a)
+    ;
+}
+class D2 extends self::C2 {
+  constructor •({core::int a = 0}) → self::D2
+    ;
+}
+class A3 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = 0]) → self::A3
+    ;
+}
+class B3 extends core::Object {
+  synthetic constructor •() → self::B3
+    ;
+}
+class C3 = self::A3 with self::B3 {
+  synthetic constructor •([core::int a = 0]) → self::C3
+    : super self::A3::•(a)
+    ;
+}
+class D3 extends self::C3 {
+  constructor •([core::int a = 0]) → self::D3
+    ;
+}
+class D4 extends self::C4 {
+  constructor •([core::int foo = 42]) → self::D4
+    ;
+}
+class C4 = self::A4 with self::B4 {
+  synthetic constructor •([core::int foo = 42]) → self::C4
+    : super self::A4::•(foo)
+    ;
+}
+class B4 extends core::Object {
+  synthetic constructor •() → self::B4
+    ;
+}
+class A4 extends self::AA4 {
+  constructor •([core::int foo = 42]) → self::A4
+    ;
+}
+class AA4 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = 42]) → self::AA4
+    ;
+}
+class D5 extends self::C5c {
+  constructor •([core::int foo = 42]) → self::D5
+    ;
+}
+class C5c = self::C5b with self::B5 {
+  synthetic constructor •([core::int foo = 42]) → self::C5c
+    : super self::C5b::•(foo)
+    ;
+}
+class C5b = self::C5a with self::B5 {
+  synthetic constructor •([core::int foo = 42]) → self::C5b
+    : super self::C5a::•(foo)
+    ;
+}
+class C5a = self::A5 with self::B5 {
+  synthetic constructor •([core::int foo = 42]) → self::C5a
+    : super self::A5::•(foo)
+    ;
+}
+class B5 extends core::Object {
+  synthetic constructor •() → self::B5
+    ;
+}
+class A5 extends self::AA5 {
+  constructor •([core::int foo = 42]) → self::A5
+    ;
+}
+class AA5 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = 42]) → self::AA5
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.transformed.expect
new file mode 100644
index 0000000..cf81c26
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.transformed.expect
@@ -0,0 +1,135 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int a;
+  constructor •(core::int a) → self::A1
+    : self::A1::a = a, super core::Object::•()
+    ;
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+}
+class C1 extends self::A1 implements self::B1 /*isEliminatedMixin*/  {
+  synthetic constructor •(core::int a) → self::C1
+    : super self::A1::•(a)
+    ;
+}
+class D1 extends self::C1 {
+  constructor •(core::int a) → self::D1
+    : super self::C1::•(a)
+    ;
+}
+class A2 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → self::A2
+    : self::A2::a = a, super core::Object::•()
+    ;
+}
+class B2 extends core::Object {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+}
+class C2 extends self::A2 implements self::B2 /*isEliminatedMixin*/  {
+  synthetic constructor •({core::int a = #C1}) → self::C2
+    : super self::A2::•(a: a)
+    ;
+}
+class D2 extends self::C2 {
+  constructor •({core::int a = #C1}) → self::D2
+    : super self::C2::•(a: a)
+    ;
+}
+class A3 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → self::A3
+    : self::A3::a = a, super core::Object::•()
+    ;
+}
+class B3 extends core::Object {
+  synthetic constructor •() → self::B3
+    : super core::Object::•()
+    ;
+}
+class C3 extends self::A3 implements self::B3 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int a = #C1]) → self::C3
+    : super self::A3::•(a)
+    ;
+}
+class D3 extends self::C3 {
+  constructor •([core::int a = #C1]) → self::D3
+    : super self::C3::•(a)
+    ;
+}
+class D4 extends self::C4 {
+  constructor •([core::int foo = #C2]) → self::D4
+    : super self::C4::•(foo)
+    ;
+}
+class C4 extends self::A4 implements self::B4 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int foo = #C2]) → self::C4
+    : super self::A4::•(foo)
+    ;
+}
+class B4 extends core::Object {
+  synthetic constructor •() → self::B4
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::AA4 {
+  constructor •([core::int foo = #C2]) → self::A4
+    : super self::AA4::•(foo)
+    ;
+}
+class AA4 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA4
+    : self::AA4::foo = foo, super core::Object::•()
+    ;
+}
+class D5 extends self::C5c {
+  constructor •([core::int foo = #C2]) → self::D5
+    : super self::C5c::•(foo)
+    ;
+}
+class C5c extends self::C5b implements self::B5 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int foo = #C2]) → self::C5c
+    : super self::C5b::•(foo)
+    ;
+}
+class C5b extends self::C5a implements self::B5 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int foo = #C2]) → self::C5b
+    : super self::C5a::•(foo)
+    ;
+}
+class C5a extends self::A5 implements self::B5 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int foo = #C2]) → self::C5a
+    : super self::A5::•(foo)
+    ;
+}
+class B5 extends core::Object {
+  synthetic constructor •() → self::B5
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::AA5 {
+  constructor •([core::int foo = #C2]) → self::A5
+    : super self::AA5::•(foo)
+    ;
+}
+class AA5 extends core::Object {
+  final field core::int foo;
+  constructor •([core::int foo = #C2]) → self::AA5
+    : self::AA5::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 42
+}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart
new file mode 100644
index 0000000..efa62e9
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart
@@ -0,0 +1,81 @@
+// 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.
+
+// 1. The base case.
+
+class A1 {
+  final String foo;
+  A1(this.foo);
+}
+
+typedef TA1 = A1;
+
+typedef TTA1 = TA1;
+
+typedef TTTA1 = TTA1;
+
+typedef TTTTA1 = TTTA1;
+
+class D1 extends TTTTA1 {
+  D1(super.foo);
+}
+
+// 2. The case of named parameters.
+
+class A2 {
+  final String foo;
+  A2({this.foo = "bar"});
+}
+
+typedef TA2 = A2;
+
+typedef TTA2 = TA2;
+
+typedef TTTA2 = TTA2;
+
+typedef TTTTA2 = TTTA2;
+
+class D2 extends TTTTA2 {
+  D2({super.foo});
+}
+
+// 3. The case of optional positional parameters.
+
+class A3 {
+  final String foo;
+  A3([this.foo = "bar"]);
+}
+
+typedef TA3 = A3;
+
+typedef TTA3 = TA3;
+
+typedef TTTA3 = TTA3;
+
+typedef TTTTA3 = TTTA3;
+
+class D3 extends TTTTA3 {
+  D3([super.foo]);
+}
+
+// 4. The case of the inverted order of declarations.
+
+class D4 extends TTTTA4 {
+  D4([super.foo]);
+}
+
+typedef TTTTA4 = TTTA4;
+
+typedef TTTA4 = TTA4;
+
+typedef TTA4 = TA4;
+
+typedef TA4 = A4;
+
+class A4 {
+  final String foo;
+  A4([this.foo = "bar"]);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.strong.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.strong.expect
new file mode 100644
index 0000000..c64854a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.strong.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef TA1 = self::A1;
+typedef TTA1 = self::A1;
+typedef TTTA1 = self::A1;
+typedef TTTTA1 = self::A1;
+typedef TA2 = self::A2;
+typedef TTA2 = self::A2;
+typedef TTTA2 = self::A2;
+typedef TTTTA2 = self::A2;
+typedef TA3 = self::A3;
+typedef TTA3 = self::A3;
+typedef TTTA3 = self::A3;
+typedef TTTTA3 = self::A3;
+typedef TTTTA4 = self::A4;
+typedef TTTA4 = self::A4;
+typedef TTA4 = self::A4;
+typedef TA4 = self::A4;
+class A1 extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class D1 extends self::A1 {
+  constructor •(core::String foo) → self::D1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field core::String foo;
+  constructor •({core::String foo = #C1}) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class D2 extends self::A2 {
+  constructor •({core::String foo = #C1}) → self::D2
+    : super self::A2::•(foo: foo)
+    ;
+}
+class A3 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class D3 extends self::A3 {
+  constructor •([core::String foo = #C1]) → self::D3
+    : super self::A3::•(foo)
+    ;
+}
+class D4 extends self::A4 {
+  constructor •([core::String foo = #C1]) → self::D4
+    : super self::A4::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "bar"
+}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.strong.transformed.expect
new file mode 100644
index 0000000..c64854a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.strong.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef TA1 = self::A1;
+typedef TTA1 = self::A1;
+typedef TTTA1 = self::A1;
+typedef TTTTA1 = self::A1;
+typedef TA2 = self::A2;
+typedef TTA2 = self::A2;
+typedef TTTA2 = self::A2;
+typedef TTTTA2 = self::A2;
+typedef TA3 = self::A3;
+typedef TTA3 = self::A3;
+typedef TTTA3 = self::A3;
+typedef TTTTA3 = self::A3;
+typedef TTTTA4 = self::A4;
+typedef TTTA4 = self::A4;
+typedef TTA4 = self::A4;
+typedef TA4 = self::A4;
+class A1 extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class D1 extends self::A1 {
+  constructor •(core::String foo) → self::D1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field core::String foo;
+  constructor •({core::String foo = #C1}) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class D2 extends self::A2 {
+  constructor •({core::String foo = #C1}) → self::D2
+    : super self::A2::•(foo: foo)
+    ;
+}
+class A3 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class D3 extends self::A3 {
+  constructor •([core::String foo = #C1]) → self::D3
+    : super self::A3::•(foo)
+    ;
+}
+class D4 extends self::A4 {
+  constructor •([core::String foo = #C1]) → self::D4
+    : super self::A4::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "bar"
+}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect
new file mode 100644
index 0000000..1e4deb1
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect
@@ -0,0 +1,45 @@
+class A1 {
+  final String foo;
+  A1(this.foo);
+}
+typedef TA1 = A1;
+typedef TTA1 = TA1;
+typedef TTTA1 = TTA1;
+typedef TTTTA1 = TTTA1;
+class D1 extends TTTTA1 {
+  D1(super.foo);
+}
+class A2 {
+  final String foo;
+  A2({this.foo = "bar"});
+}
+typedef TA2 = A2;
+typedef TTA2 = TA2;
+typedef TTTA2 = TTA2;
+typedef TTTTA2 = TTTA2;
+class D2 extends TTTTA2 {
+  D2({super.foo});
+}
+class A3 {
+  final String foo;
+  A3([this.foo = "bar"]);
+}
+typedef TA3 = A3;
+typedef TTA3 = TA3;
+typedef TTTA3 = TTA3;
+typedef TTTTA3 = TTTA3;
+class D3 extends TTTTA3 {
+  D3([super.foo]);
+}
+class D4 extends TTTTA4 {
+  D4([super.foo]);
+}
+typedef TTTTA4 = TTTA4;
+typedef TTTA4 = TTA4;
+typedef TTA4 = TA4;
+typedef TA4 = A4;
+class A4 {
+  final String foo;
+  A4([this.foo = "bar"]);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.expect
new file mode 100644
index 0000000..c64854a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef TA1 = self::A1;
+typedef TTA1 = self::A1;
+typedef TTTA1 = self::A1;
+typedef TTTTA1 = self::A1;
+typedef TA2 = self::A2;
+typedef TTA2 = self::A2;
+typedef TTTA2 = self::A2;
+typedef TTTTA2 = self::A2;
+typedef TA3 = self::A3;
+typedef TTA3 = self::A3;
+typedef TTTA3 = self::A3;
+typedef TTTTA3 = self::A3;
+typedef TTTTA4 = self::A4;
+typedef TTTA4 = self::A4;
+typedef TTA4 = self::A4;
+typedef TA4 = self::A4;
+class A1 extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class D1 extends self::A1 {
+  constructor •(core::String foo) → self::D1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field core::String foo;
+  constructor •({core::String foo = #C1}) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class D2 extends self::A2 {
+  constructor •({core::String foo = #C1}) → self::D2
+    : super self::A2::•(foo: foo)
+    ;
+}
+class A3 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class D3 extends self::A3 {
+  constructor •([core::String foo = #C1]) → self::D3
+    : super self::A3::•(foo)
+    ;
+}
+class D4 extends self::A4 {
+  constructor •([core::String foo = #C1]) → self::D4
+    : super self::A4::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "bar"
+}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.modular.expect
new file mode 100644
index 0000000..c64854a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef TA1 = self::A1;
+typedef TTA1 = self::A1;
+typedef TTTA1 = self::A1;
+typedef TTTTA1 = self::A1;
+typedef TA2 = self::A2;
+typedef TTA2 = self::A2;
+typedef TTTA2 = self::A2;
+typedef TTTTA2 = self::A2;
+typedef TA3 = self::A3;
+typedef TTA3 = self::A3;
+typedef TTTA3 = self::A3;
+typedef TTTTA3 = self::A3;
+typedef TTTTA4 = self::A4;
+typedef TTTA4 = self::A4;
+typedef TTA4 = self::A4;
+typedef TA4 = self::A4;
+class A1 extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class D1 extends self::A1 {
+  constructor •(core::String foo) → self::D1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field core::String foo;
+  constructor •({core::String foo = #C1}) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class D2 extends self::A2 {
+  constructor •({core::String foo = #C1}) → self::D2
+    : super self::A2::•(foo: foo)
+    ;
+}
+class A3 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class D3 extends self::A3 {
+  constructor •([core::String foo = #C1]) → self::D3
+    : super self::A3::•(foo)
+    ;
+}
+class D4 extends self::A4 {
+  constructor •([core::String foo = #C1]) → self::D4
+    : super self::A4::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "bar"
+}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.outline.expect
new file mode 100644
index 0000000..f4d87e2
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.outline.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef TA1 = self::A1;
+typedef TTA1 = self::A1;
+typedef TTTA1 = self::A1;
+typedef TTTTA1 = self::A1;
+typedef TA2 = self::A2;
+typedef TTA2 = self::A2;
+typedef TTTA2 = self::A2;
+typedef TTTTA2 = self::A2;
+typedef TA3 = self::A3;
+typedef TTA3 = self::A3;
+typedef TTTA3 = self::A3;
+typedef TTTTA3 = self::A3;
+typedef TTTTA4 = self::A4;
+typedef TTTA4 = self::A4;
+typedef TTA4 = self::A4;
+typedef TA4 = self::A4;
+class A1 extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A1
+    ;
+}
+class D1 extends self::A1 {
+  constructor •(core::String foo) → self::D1
+    ;
+}
+class A2 extends core::Object {
+  final field core::String foo;
+  constructor •({core::String foo = "bar"}) → self::A2
+    ;
+}
+class D2 extends self::A2 {
+  constructor •({core::String foo = "bar"}) → self::D2
+    ;
+}
+class A3 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = "bar"]) → self::A3
+    ;
+}
+class D3 extends self::A3 {
+  constructor •([core::String foo = "bar"]) → self::D3
+    ;
+}
+class D4 extends self::A4 {
+  constructor •([core::String foo = "bar"]) → self::D4
+    ;
+}
+class A4 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = "bar"]) → self::A4
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.transformed.expect
new file mode 100644
index 0000000..c64854a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef TA1 = self::A1;
+typedef TTA1 = self::A1;
+typedef TTTA1 = self::A1;
+typedef TTTTA1 = self::A1;
+typedef TA2 = self::A2;
+typedef TTA2 = self::A2;
+typedef TTTA2 = self::A2;
+typedef TTTTA2 = self::A2;
+typedef TA3 = self::A3;
+typedef TTA3 = self::A3;
+typedef TTTA3 = self::A3;
+typedef TTTTA3 = self::A3;
+typedef TTTTA4 = self::A4;
+typedef TTTA4 = self::A4;
+typedef TTA4 = self::A4;
+typedef TA4 = self::A4;
+class A1 extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class D1 extends self::A1 {
+  constructor •(core::String foo) → self::D1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field core::String foo;
+  constructor •({core::String foo = #C1}) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class D2 extends self::A2 {
+  constructor •({core::String foo = #C1}) → self::D2
+    : super self::A2::•(foo: foo)
+    ;
+}
+class A3 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class D3 extends self::A3 {
+  constructor •([core::String foo = #C1]) → self::D3
+    : super self::A3::•(foo)
+    ;
+}
+class D4 extends self::A4 {
+  constructor •([core::String foo = #C1]) → self::D4
+    : super self::A4::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field core::String foo;
+  constructor •([core::String foo = #C1]) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "bar"
+}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 5ebd7e2..db22169c 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -201,9 +201,14 @@
 regress/issue_39091_1: FormatterCrash
 regress/issue_41265.crash: Crash
 regress/issue_41265.crash: FormatterCrash
+super_parameters/circular_dependency_inference: FormatterCrash
+super_parameters/default_values: FormatterCrash
 super_parameters/simple: FormatterCrash
+super_parameters/simple_inference: FormatterCrash
 super_parameters/simple_named_super_parameters: FormatterCrash
 super_parameters/simple_positional_super_parameters: FormatterCrash
+super_parameters/synthesized_super_constructor_with_parameters: FormatterCrash
+super_parameters/type_alias_in_supertype: FormatterCrash
 super_parameters/typed_super_parameter: FormatterCrash
 triple_shift/invalid_operator: FormatterCrash
 variance/class_type_parameter_modifier: FormatterCrash
