diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index f320c5f..6c4801c 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -2,14 +2,17 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:analyzer_utilities/check/check.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'completion_check.dart';
 import 'completion_contributor_util.dart';
 
 void main() {
@@ -19,95 +22,6 @@
 }
 
 mixin ArgListContributorMixin on DartCompletionContributorTest {
-  void assertNoOtherSuggestions(Iterable<CompletionSuggestion> expected) {
-    for (var suggestion in suggestions) {
-      if (!expected.contains(suggestion)) {
-        failedCompletion('did not expect completion: '
-            '${suggestion.completion}\n  $suggestion');
-      }
-    }
-  }
-
-  /// Assert that there is a suggestion with the given parameter [name] that has
-  /// the given [completion], [selectionOffset] and [selectionLength].
-  void assertSuggestArgumentAndCompletion(String name,
-      {required String completion,
-      required int selectionOffset,
-      int selectionLength = 0}) {
-    var suggestion = suggestions.firstWhere((s) => s.parameterName == name);
-    expect(suggestion, isNotNull);
-    expect(suggestion.completion, completion);
-    expect(suggestion.selectionOffset, selectionOffset);
-    expect(suggestion.selectionLength, selectionLength);
-  }
-
-  void assertSuggestArgumentList_params(
-      List<String> expectedNames,
-      List<String> expectedTypes,
-      List<String>? actualNames,
-      List<String>? actualTypes) {
-    if (actualNames != null &&
-        actualNames.length == expectedNames.length &&
-        actualTypes != null &&
-        actualTypes.length == expectedTypes.length) {
-      var index = 0;
-      while (index < expectedNames.length) {
-        if (actualNames[index] != expectedNames[index] ||
-            actualTypes[index] != expectedTypes[index]) {
-          break;
-        }
-        ++index;
-      }
-      if (index == expectedNames.length) {
-        return;
-      }
-    }
-    var msg = StringBuffer();
-    msg.writeln('Argument list not the same');
-    msg.writeln('  Expected names: $expectedNames');
-    msg.writeln('           found: $actualNames');
-    msg.writeln('  Expected types: $expectedTypes');
-    msg.writeln('           found: $actualTypes');
-    fail(msg.toString());
-  }
-
-  /// Assert that the specified named argument suggestions with their types are
-  /// the only suggestions.
-  void assertSuggestArgumentsAndTypes(
-      {required Map<String, String> namedArgumentsWithTypes,
-      bool includeColon = true,
-      bool includeComma = false}) {
-    var expected = <CompletionSuggestion>[];
-    namedArgumentsWithTypes.forEach((String name, String type) {
-      var completion = includeColon ? '$name: ' : name;
-      // Selection should be before any trailing commas.
-      var selectionOffset = completion.length;
-      if (includeComma) {
-        completion = '$completion,';
-      }
-      expected.add(assertSuggest(completion,
-          csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
-          paramName: name,
-          paramType: type,
-          selectionOffset: selectionOffset));
-    });
-    assertNoOtherSuggestions(expected);
-  }
-
-  /// Assert that the specified suggestions are the only suggestions.
-  void assertSuggestions(List<String> suggestions) {
-    var expected = <CompletionSuggestion>[];
-    for (var suggestion in suggestions) {
-      // Selection offset should be before any trailing commas.
-      var selectionOffset =
-          suggestion.endsWith(',') ? suggestion.length - 1 : suggestion.length;
-      expected.add(assertSuggest('$suggestion',
-          csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
-          selectionOffset: selectionOffset));
-    }
-    assertNoOtherSuggestions(expected);
-  }
-
   @override
   DartCompletionContributor createContributor(
     DartCompletionRequest request,
@@ -358,12 +272,19 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(^)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool', 'two': 'int'},
-        );
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two: ')
+            ..parameterType.isEqualTo('int')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -372,12 +293,19 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(o^)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool', 'two': 'int'},
-        );
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 5),
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two: ')
+            ..parameterType.isEqualTo('int')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -386,11 +314,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(o^ two: 2)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-            namedArgumentsWithTypes: {'one': 'bool'}, includeComma: true);
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ,', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ,')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -399,11 +330,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(o^, two: 2)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-            namedArgumentsWithTypes: {'one': 'bool'}, includeComma: false);
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -412,11 +346,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(o^ , two: 2)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-            namedArgumentsWithTypes: {'one': 'bool'}, includeComma: false);
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -425,12 +362,19 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(^o,)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool', 'two': 'int'},
-        );
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two: ')
+            ..parameterType.isEqualTo('int')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -439,11 +383,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(^ two: 2)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-            namedArgumentsWithTypes: {'one': 'bool'}, includeComma: true);
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ,', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ,')
+            ..parameterType.isEqualTo('bool')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -452,8 +399,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(^two: 2)',
-      check: () {
-        assertSuggestions(['one: ,']);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ,')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(right: 3)
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -462,13 +415,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(^, two: 2)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool'},
-          includeComma: false,
-        );
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -477,10 +431,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(^ , two: 2)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool'},
-        );
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -489,10 +447,14 @@
     await _tryParametersArguments(
       parameters: '(int one, {bool two, int three})',
       arguments: '(1, ^, three: 3)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'two': 'bool'},
-        );
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -501,8 +463,14 @@
     await _tryParametersArguments(
       parameters: '(int one, {bool two, int three})',
       arguments: '(1, ^ three: 3)',
-      check: () {
-        assertSuggestions(['two: ,']);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two: ,')
+            ..parameterType.isEqualTo('bool')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -511,8 +479,14 @@
     await _tryParametersArguments(
       parameters: '(int one, {bool two, int three})',
       arguments: '(1, ^three: 3)',
-      check: () {
-        assertSuggestions(['two: ,']);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two: ,')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(right: 5)
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -522,8 +496,8 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(two: 2^)',
-      check: () {
-        assertSuggestions([', one: ']);
+      check: (response) {
+        check(response).suggestions.namedArguments.isEmpty;
       },
     );
   }
@@ -533,8 +507,8 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(two: 2 ^)',
-      check: () {
-        assertSuggestions([', one: ']);
+      check: (response) {
+        check(response).suggestions.namedArguments.isEmpty;
       },
     );
   }
@@ -543,12 +517,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(two: 2, ^)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool'},
-        );
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -557,12 +533,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(two: 2, o^)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool'},
-        );
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -571,12 +549,14 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(two: 2, o^,)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool'},
-        );
-        assertSuggestArgumentAndCompletion('one',
-            completion: 'one: ', selectionOffset: 5);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one: ')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 5),
+        ]);
       },
     );
   }
@@ -585,8 +565,19 @@
     await _tryParametersArguments(
       parameters: '(int one, int two, int three, {int four, int five})',
       arguments: '(1, ^, 3)',
-      check: () {
-        assertSuggestions(['four: ', 'five: ']);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('four: ')
+            ..parameterType.isEqualTo('int')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 6),
+          (suggestion) => suggestion
+            ..completion.isEqualTo('five: ')
+            ..parameterType.isEqualTo('int')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 6),
+        ]);
       },
     );
   }
@@ -596,8 +587,8 @@
       languageVersion: '2.15',
       parameters: '(int one, int two, int three, {int four, int five})',
       arguments: '(1, ^, 3)',
-      check: () {
-        assertNoSuggestions();
+      check: (response) {
+        check(response).suggestions.namedArguments.isEmpty;
       },
     );
   }
@@ -606,11 +597,19 @@
     await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(o^: false)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'one': 'bool', 'two': 'int'},
-          includeColon: false,
-        );
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('one')
+            ..parameterType.isEqualTo('bool')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 3),
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two')
+            ..parameterType.isEqualTo('int')
+            ..hasReplacement(left: 1)
+            ..hasSelection(offset: 3),
+        ]);
       },
     );
   }
@@ -619,30 +618,68 @@
     await _tryParametersArguments(
       parameters: '(bool one, {int two, double three})',
       arguments: '(false, ^t: 2)',
-      check: () {
-        assertSuggestions(['two: ,', 'three: ,']);
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two: ,')
+            ..parameterType.isEqualTo('int')
+            ..hasReplacement(right: 1)
+            ..hasSelection(offset: 5),
+          (suggestion) => suggestion
+            ..completion.isEqualTo('three: ,')
+            ..parameterType.isEqualTo('double')
+            ..hasReplacement(right: 1)
+            ..hasSelection(offset: 7),
+        ]);
       },
     );
   }
 
   Future<void> test_named_23() async {
     await _tryParametersArguments(
-      parameters: '(bool one, {int two, double three})',
-      arguments: '(false, ^: 2)',
-      check: () {
-        assertSuggestArgumentsAndTypes(
-          namedArgumentsWithTypes: {'two': 'int', 'three': 'double'},
-        );
+      parameters: '(bool one, {int two})',
+      arguments: '(false, foo^ba: 2)',
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('two')
+            ..parameterType.isEqualTo('int')
+            ..hasReplacement(left: 3, right: 2)
+            ..hasSelection(offset: 3),
+        ]);
       },
     );
   }
 
   Future<void> test_named_24() async {
     await _tryParametersArguments(
+      parameters: '(bool one, {int two, double three})',
+      arguments: '(false, ^: 2)',
+      check: (response) {
+        check(response).suggestions.namedArguments.matchesInAnyOrder([
+          (suggestion) => suggestion
+            // TODO(scheglov) This does not seem right.
+            ..completion.isEqualTo('two: ')
+            ..parameterType.isEqualTo('int')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 5),
+          (suggestion) => suggestion
+            // TODO(scheglov) This does not seem right.
+            ..completion.isEqualTo('three: ')
+            ..parameterType.isEqualTo('double')
+            ..hasEmptyReplacement()
+            ..hasSelection(offset: 7),
+        ]);
+      },
+    );
+  }
+
+  Future<void> test_named_25() async {
+    await _tryParametersArguments(
       parameters: '({bool one, int two})',
       arguments: '(one: ^)',
-      check: () {
-        assertNoSuggestions();
+      check: (response) {
+        check(response).suggestions.namedArguments.isEmpty;
       },
     );
   }
@@ -651,12 +688,24 @@
     String? languageVersion,
     required String parameters,
     required String arguments,
-    required void Function() check,
+    required void Function(CompletionResponseForTesting response) check,
   }) async {
     var languageVersionLine = languageVersion != null
         ? '// @dart = $languageVersion'
         : '// no language version override';
 
+    Future<void> computeAndCheck() async {
+      await computeSuggestions();
+      check(
+        CompletionResponseForTesting(
+          requestOffset: completionOffset,
+          replacementOffset: replacementOffset,
+          replacementLength: replacementLength,
+          suggestions: suggestions,
+        ),
+      );
+    }
+
     // Annotation, local class.
     addTestSource2('''
 $languageVersionLine
@@ -666,8 +715,7 @@
 @A$arguments
 void f() {}
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Annotation, imported class.
     newFile('$testPackageLibPath/a.dart', content: '''
@@ -681,8 +729,7 @@
 @A$arguments
 void f() {}
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Annotation, imported class, prefixed.
     newFile('$testPackageLibPath/a.dart', content: '''
@@ -696,8 +743,7 @@
 @p.A$arguments
 void f() {}
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Function expression invocation.
     addTestSource2('''
@@ -706,8 +752,7 @@
 void f$parameters() {}
 var v = (f)$arguments;
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Instance creation, local class, generative.
     addTestSource2('''
@@ -717,8 +762,7 @@
 }
 var v = A$arguments;
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Instance creation, imported class, generative.
     newFile('$testPackageLibPath/a.dart', content: '''
@@ -731,8 +775,7 @@
 import 'a.dart';
 var v = A$arguments;
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Instance creation, imported class, factory.
     newFile('$testPackageLibPath/a.dart', content: '''
@@ -745,8 +788,7 @@
 import 'a.dart';
 var v = A$arguments;
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Method invocation, local method.
     addTestSource2('''
@@ -756,8 +798,7 @@
 }
 var v = A().foo$arguments;
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Method invocation, local function.
     addTestSource2('''
@@ -765,8 +806,7 @@
 void f$parameters() {}
 var v = f$arguments;
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Method invocation, imported function.
     newFile('$testPackageLibPath/a.dart', content: '''
@@ -777,8 +817,7 @@
 import 'a.dart';
 var v = f$arguments;
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Super constructor invocation.
     addTestSource2('''
@@ -790,8 +829,7 @@
   B() : super$arguments;
 }
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // This constructor invocation.
     addTestSource2('''
@@ -801,8 +839,7 @@
   A.named() : this$arguments;
 }
 ''');
-    await computeSuggestions();
-    check();
+    await computeAndCheck();
 
     // Invalid: getter invocation.
     // Parameters not used. Check not used.
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_check.dart b/pkg/analysis_server/test/services/completion/dart/completion_check.dart
new file mode 100644
index 0000000..669cf76
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/completion_check.dart
@@ -0,0 +1,148 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer_utilities/check/check.dart';
+
+class CompletionResponseForTesting {
+  final int requestOffset;
+  final int replacementOffset;
+  final int replacementLength;
+  final List<CompletionSuggestion> suggestions;
+
+  CompletionResponseForTesting({
+    required this.requestOffset,
+    required this.replacementOffset,
+    required this.replacementLength,
+    required this.suggestions,
+  });
+
+  factory CompletionResponseForTesting.legacy(
+    int requestOffset,
+    CompletionResultsParams parameters,
+  ) {
+    return CompletionResponseForTesting(
+      requestOffset: requestOffset,
+      replacementOffset: parameters.replacementOffset,
+      replacementLength: parameters.replacementLength,
+      suggestions: parameters.results,
+    );
+  }
+}
+
+/// A completion suggestion with the response for context.
+class CompletionSuggestionForTesting {
+  final CompletionResponseForTesting response;
+  final CompletionSuggestion suggestion;
+
+  CompletionSuggestionForTesting({
+    required this.response,
+    required this.suggestion,
+  });
+
+  /// Return the effective replacement length.
+  int get replacementLength =>
+      suggestion.replacementLength ?? response.replacementLength;
+
+  /// Return the effective replacement offset.
+  int get replacementOffset =>
+      suggestion.replacementOffset ?? response.replacementOffset;
+
+  @override
+  String toString() => '(completion: ${suggestion.completion})';
+}
+
+extension CompletionResponseExtension
+    on CheckTarget<CompletionResponseForTesting> {
+  CheckTarget<List<CompletionSuggestionForTesting>> get suggestions {
+    var suggestions = value.suggestions
+        .map((e) =>
+            CompletionSuggestionForTesting(response: value, suggestion: e))
+        .toList();
+    return nest(
+      suggestions,
+      (selected) => 'suggestions ${valueStr(selected)}',
+    );
+  }
+}
+
+extension CompletionSuggestionExtension
+    on CheckTarget<CompletionSuggestionForTesting> {
+  CheckTarget<String> get completion {
+    return nest(
+      value.suggestion.completion,
+      (selected) => 'has completion ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<String?> get parameterType {
+    return nest(
+      value.suggestion.parameterType,
+      (selected) => 'has parameterType ${valueStr(selected)}',
+    );
+  }
+
+  /// Return the effective replacement length.
+  CheckTarget<int> get replacementLength {
+    return nest(
+      value.replacementLength,
+      (selected) => 'has replacementLength ${valueStr(selected)}',
+    );
+  }
+
+  /// Return the effective replacement offset.
+  CheckTarget<int> get replacementOffset {
+    return nest(
+      value.replacementOffset,
+      (selected) => 'has replacementOffset ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<int> get selectionLength {
+    return nest(
+      value.suggestion.selectionLength,
+      (selected) => 'has selectionLength ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<int> get selectionOffset {
+    return nest(
+      value.suggestion.selectionOffset,
+      (selected) => 'has selectionOffset ${valueStr(selected)}',
+    );
+  }
+
+  /// Check that the effective replacement offset is the completion request
+  /// offset, and the length of the replacement is zero.
+  void hasEmptyReplacement() {
+    hasReplacement(left: 0, right: 0);
+  }
+
+  /// Check that the effective replacement offset is the completion request
+  /// offset minus [left], and the length of the replacement is `left + right`.
+  void hasReplacement({int left = 0, int right = 0}) {
+    replacementOffset.isEqualTo(value.response.requestOffset - left);
+    replacementLength.isEqualTo(left + right);
+  }
+
+  void hasSelection({required int offset, int length = 0}) {
+    selectionOffset.isEqualTo(offset);
+    selectionLength.isEqualTo(length);
+  }
+}
+
+extension CompletionSuggestionsExtension
+    on CheckTarget<Iterable<CompletionSuggestionForTesting>> {
+  CheckTarget<Iterable<CompletionSuggestionForTesting>> get namedArguments {
+    var result = value
+        .where((suggestion) =>
+            suggestion.suggestion.kind ==
+            CompletionSuggestionKind.NAMED_ARGUMENT)
+        .toList();
+    return nest(
+      result,
+      (selected) => 'named arguments ${valueStr(selected)}',
+    );
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 0b49b4e..6d7e98d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -334,8 +334,8 @@
 
   /// Compute [_constants] in all units.
   void _computeConstants() {
-    computeConstants(_typeProvider, _typeSystem, _declaredVariables,
-        _constants.toList(), _libraryElement.featureSet);
+    computeConstants(
+        _declaredVariables, _constants.toList(), _libraryElement.featureSet);
   }
 
   void _computeHints(FileState file, CompilationUnit unit) {
diff --git a/pkg/analyzer/lib/src/dart/constant/compute.dart b/pkg/analyzer/lib/src/dart/constant/compute.dart
index cb56ffe..b2b67c8 100644
--- a/pkg/analyzer/lib/src/dart/constant/compute.dart
+++ b/pkg/analyzer/lib/src/dart/constant/compute.dart
@@ -4,20 +4,14 @@
 
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/constant/evaluation.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/summary/link.dart' as graph
     show DependencyWalker, Node;
 
 /// Compute values of the given [constants] with correct ordering.
-void computeConstants(
-    TypeProvider typeProvider,
-    TypeSystemImpl typeSystem,
-    DeclaredVariables declaredVariables,
-    List<ConstantEvaluationTarget> constants,
-    FeatureSet featureSet) {
+void computeConstants(DeclaredVariables declaredVariables,
+    List<ConstantEvaluationTarget> constants, FeatureSet featureSet) {
   var walker = _ConstantWalker(declaredVariables, featureSet);
 
   for (var constant in constants) {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 43e9949..0a2341a 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1594,8 +1594,7 @@
   /// of formal parameters, are evaluated.
   void computeConstantDependencies() {
     if (!isConstantEvaluated) {
-      computeConstants(library.typeProvider, library.typeSystem,
-          context.declaredVariables, [this], library.featureSet);
+      computeConstants(context.declaredVariables, [this], library.featureSet);
     }
   }
 }
@@ -1680,8 +1679,7 @@
           '[reference: $reference]',
         );
       }
-      computeConstants(library.typeProvider, library.typeSystem,
-          context.declaredVariables, [this], library.featureSet);
+      computeConstants(context.declaredVariables, [this], library.featureSet);
     }
     return evaluationResult?.value;
   }
@@ -2031,9 +2029,8 @@
   @override
   DartObject? computeConstantValue() {
     if (evaluationResult == null) {
-      var library = compilationUnit.library;
-      computeConstants(library.typeProvider, library.typeSystem,
-          context.declaredVariables, [this], library.featureSet);
+      computeConstants(context.declaredVariables, [this],
+          compilationUnit.library.featureSet);
     }
     return evaluationResult?.value;
   }
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index d3ba759..2caa7a1 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -196,8 +196,8 @@
 
   /// Compute [_constants] in all units.
   void _computeConstants() {
-    computeConstants(_typeProvider, _typeSystem, _declaredVariables,
-        _constants.toList(), _libraryElement.featureSet);
+    computeConstants(
+        _declaredVariables, _constants.toList(), _libraryElement.featureSet);
   }
 
   void _computeDiagnostics({
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 8b32896..542e9ec 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -375,8 +375,6 @@
     );
 
     computeConstants(
-      typeProvider,
-      typeSystem,
       declaredVariables,
       dependencies,
       libraryElement.featureSet,
@@ -483,8 +481,6 @@
     var dependenciesFinder = ConstantExpressionsDependenciesFinder();
     node.accept(dependenciesFinder);
     computeConstants(
-      typeProvider,
-      typeSystem,
       declaredVariables,
       dependenciesFinder.dependencies.toList(),
       libraryElement.featureSet,
diff --git a/pkg/analyzer_utilities/lib/check/iterable.dart b/pkg/analyzer_utilities/lib/check/iterable.dart
index 0e3e0d3..e6415c3 100644
--- a/pkg/analyzer_utilities/lib/check/iterable.dart
+++ b/pkg/analyzer_utilities/lib/check/iterable.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer_utilities/check/check.dart';
 import 'package:meta/meta.dart';
+import 'package:test/test.dart' as test_package;
 
 extension IterableExtension<T> on CheckTarget<Iterable<T>> {
   void get isEmpty {
@@ -28,4 +29,51 @@
 
     return nest(actual, (length) => 'has length $length');
   }
+
+  /// Succeeds if the number of [matchers] is exactly the same as the number
+  /// of elements in [value], and for each matcher there is exactly one element
+  /// that matches.
+  void matchesInAnyOrder(
+    Iterable<void Function(CheckTarget<T> element)> matchers,
+  ) {
+    var elementList = value.toList();
+    var matcherList = matchers.toList();
+    if (elementList.length != matcherList.length) {
+      fail('Expected ${valueStr(matcherList.length)} elements, '
+          'actually ${valueStr(elementList.length)}');
+    }
+
+    for (var matcherIndex = 0;
+        matcherIndex < matcherList.length;
+        matcherIndex++) {
+      var matcher = matcherList[matcherIndex];
+      T? matchedElement;
+      for (var elementIndex = 0;
+          elementIndex < elementList.length;
+          elementIndex++) {
+        var element = elementList[elementIndex];
+        var elementTarget = nest(
+          element,
+          (element) =>
+              'element ${valueStr(element)} at ${valueStr(elementIndex)}',
+        );
+        // Jump to the next element if does not match.
+        try {
+          matcher(elementTarget);
+        } on test_package.TestFailure {
+          continue;
+        }
+        // The element matches, check that it is unique.
+        if (matchedElement == null) {
+          matchedElement = element;
+        } else {
+          fail('Already matched ${valueStr(matchedElement)}, '
+              'found ${valueStr(element)}');
+        }
+      }
+      if (matchedElement == null) {
+        fail('No match at ${valueStr(matcherIndex)}');
+      }
+    }
+  }
 }
diff --git a/pkg/analyzer_utilities/test/check/check_test.dart b/pkg/analyzer_utilities/test/check/check_test.dart
index 907438f..bab4572 100644
--- a/pkg/analyzer_utilities/test/check/check_test.dart
+++ b/pkg/analyzer_utilities/test/check/check_test.dart
@@ -96,6 +96,46 @@
         _fails(() => check(<int>[]).isNotEmpty);
         _fails(() => check(<int>{}).isNotEmpty);
       });
+      test('matchesInAnyOrder', () {
+        // Order does not matter.
+        check([0, 1]).matchesInAnyOrder([
+          (e) => e.isEqualTo(0),
+          (e) => e.isEqualTo(1),
+        ]);
+        check([0, 1]).matchesInAnyOrder([
+          (e) => e.isEqualTo(1),
+          (e) => e.isEqualTo(0),
+        ]);
+        // Matchers can be different.
+        check([0, 1]).matchesInAnyOrder([
+          (e) => e.isZero,
+          (e) => e.isEqualTo(1),
+        ]);
+        check([0, 10]).matchesInAnyOrder([
+          (e) => e.isZero,
+          (e) => e.isGreaterThan(5),
+        ]);
+        // Wrong number of matchers.
+        _fails(
+          () => check([0, 1]).matchesInAnyOrder([
+            (e) => e.isZero,
+          ]),
+        );
+        // The first matcher accepts more than one element.
+        _fails(
+          () => check([1, 2]).matchesInAnyOrder([
+            (e) => e.isGreaterThan(0),
+            (e) => e.isEqualTo(2),
+          ]),
+        );
+        // The second matcher accepts more than one element.
+        _fails(
+          () => check([1, 2]).matchesInAnyOrder([
+            (e) => e.isEqualTo(2),
+            (e) => e.isGreaterThan(0),
+          ]),
+        );
+      });
     });
     group('nullability', () {
       const int? notNullable = 0;
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
diff --git a/tools/VERSION b/tools/VERSION
index 967b65e..a94e232 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 16
 PATCH 0
-PRERELEASE 140
+PRERELEASE 141
 PRERELEASE_PATCH 0
\ No newline at end of file
