[CFE] Explicitly initialize to null in outlines too

Currently initializers (in, say, a Constructor) is included in the
outline if it is not null. Null values are explicitly added only when
building the bodies.
This has the unfortunate effect of initializers copied in the outline
phase (e.g. for mixins) not including the null initializer. If, however,
later recompiling (even without changes, and if the split is correct)
suddenly an initializer changes.

This CL fixes the issue by initializing to null in the outline phase.

Change-Id: I1269da25ab893d4610cf2dbb4fbfdbd5697e5323
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/242282
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 0a4424c..68f16e3 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -8,7 +8,7 @@
     show FormalParameterKind, FormalParameterKindExtension;
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
 import 'package:kernel/ast.dart'
-    show DartType, DynamicType, Expression, VariableDeclaration;
+    show DartType, DynamicType, Expression, NullLiteral, VariableDeclaration;
 
 import '../constant_context.dart' show ConstantContext;
 import '../kernel/body_builder.dart' show BodyBuilder;
@@ -219,23 +219,23 @@
   /// formal parameter on a const constructor or instance method.
   void buildOutlineExpressions(SourceLibraryBuilder library,
       List<DelayedActionPerformer> delayedActionPerformers) {
-    if (initializerToken != null) {
-      // For modular compilation we need to include default values for optional
-      // and named parameters in several cases:
-      // * for const constructors to enable constant evaluation,
-      // * for instance methods because these might be needed to generated
-      //   noSuchMethod forwarders, and
-      // * for generative constructors to support forwarding constructors
-      //   in mixin applications.
-      bool needsDefaultValues = false;
-      if (parent is ConstructorBuilder) {
-        needsDefaultValues = true;
-      } else if (parent is SourceFactoryBuilder) {
-        needsDefaultValues = parent!.isFactory && parent!.isConst;
-      } else {
-        needsDefaultValues = parent!.isClassInstanceMember;
-      }
-      if (needsDefaultValues) {
+    // For modular compilation we need to include default values for optional
+    // and named parameters in several cases:
+    // * for const constructors to enable constant evaluation,
+    // * for instance methods because these might be needed to generated
+    //   noSuchMethod forwarders, and
+    // * for generative constructors to support forwarding constructors
+    //   in mixin applications.
+    bool needsDefaultValues = false;
+    if (parent is ConstructorBuilder) {
+      needsDefaultValues = true;
+    } else if (parent is SourceFactoryBuilder) {
+      needsDefaultValues = parent!.isFactory && parent!.isConst;
+    } else {
+      needsDefaultValues = parent!.isClassInstanceMember;
+    }
+    if (needsDefaultValues) {
+      if (initializerToken != null) {
         final ClassBuilder classBuilder = parent!.parent as ClassBuilder;
         Scope scope = classBuilder.scope;
         BodyBuilder bodyBuilder = library.loader
@@ -255,6 +255,9 @@
             library.library);
         initializerWasInferred = true;
         bodyBuilder.performBacklogComputations(delayedActionPerformers);
+      } else if (kind != FormalParameterKind.requiredPositional) {
+        // As done by BodyBuilder.endFormalParameter.
+        variable!.initializer = new NullLiteral()..parent = variable;
       }
     }
     initializerToken = null;
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index 84d3b6c..a8394f1 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -59,6 +59,13 @@
 import 'package:kernel/class_hierarchy.dart'
     show ClassHierarchy, ClosedWorldClassHierarchy, ForTestingClassInfo;
 
+import 'package:kernel/src/equivalence.dart'
+    show
+        EquivalenceResult,
+        EquivalenceStrategy,
+        EquivalenceVisitor,
+        checkEquivalence;
+
 import 'package:kernel/target/targets.dart'
     show
         LateLowering,
@@ -110,6 +117,7 @@
     const Expectation.fail("UnexpectedInitializationError");
 const Expectation ReachableLibrariesError =
     const Expectation.fail("ReachableLibrariesError");
+const Expectation EquivalenceError = const Expectation.fail("EquivalenceError");
 const Expectation UriToSourceError = const Expectation.fail("UriToSourceError");
 const Expectation MissingPlatformLibraries =
     const Expectation.fail("MissingPlatformLibraries");
@@ -761,6 +769,16 @@
         }
       }
 
+      if (world["compareToPrevious"] == true && newestWholeComponent != null) {
+        EquivalenceResult result = checkEquivalence(
+            newestWholeComponent!, component!,
+            strategy: const Strategy());
+        if (!result.isEquivalent) {
+          return new Result<TestData>(
+              data, EquivalenceError, result.toString());
+        }
+      }
+
       newestWholeComponentData = util.postProcess(component!);
       newestWholeComponent = component;
       String actualSerialized = componentToStringSdkFiltered(component!);
@@ -1135,6 +1153,31 @@
   }
 }
 
+class Strategy extends EquivalenceStrategy {
+  const Strategy();
+
+  @override
+  bool checkComponent_libraries(
+      EquivalenceVisitor visitor, Component node, Component other) {
+    return visitor.checkSets(node.libraries.toSet(), other.libraries.toSet(),
+        visitor.matchNamedNodes, visitor.checkNodes, 'libraries');
+  }
+
+  @override
+  bool checkClass_procedures(
+      EquivalenceVisitor visitor, Class node, Class other) {
+    // Check procedures as a set instead of a list to allow for reordering.
+    return visitor.checkSets(node.procedures.toSet(), other.procedures.toSet(),
+        visitor.matchNamedNodes, visitor.checkNodes, 'procedures');
+  }
+
+  @override
+  bool checkVariableDeclaration_binaryOffsetNoTag(EquivalenceVisitor visitor,
+      VariableDeclaration node, VariableDeclaration other) {
+    return true;
+  }
+}
+
 Result? checkNNBDSettings(Component component) {
   NonNullableByDefaultCompiledMode mode = component.mode;
   if (mode == NonNullableByDefaultCompiledMode.Invalid) return null;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.outline.expect
index 7c7ba9c..822ba26 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.outline.expect
@@ -23,7 +23,7 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  constructor •([core::int? field]) → self::Class4
+  constructor •([core::int? field = null]) → self::Class4
     ;
   static method _#new#tearOff([core::int? field]) → self::Class4
     return new self::Class4::•(field);
@@ -31,7 +31,7 @@
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  constructor •(core::int field1, [core::int? field2]) → self::Class5
+  constructor •(core::int field1, [core::int? field2 = null]) → self::Class5
     ;
   static method _#new#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::•(field1, field2);
@@ -40,7 +40,7 @@
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  constructor •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
+  constructor •(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
     ;
   static method _#new#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::•(field1, field2: field2, field3: field3);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect
index daea2b6..830da60 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.outline.expect
@@ -35,7 +35,7 @@
 }
 class Class4 extends core::Object {
   final field core::int? field;
-  constructor _([core::int? field]) → self::Class4
+  constructor _([core::int? field = null]) → self::Class4
     ;
   static method _#_#tearOff([core::int? field]) → self::Class4
     return new self::Class4::_(field);
@@ -47,7 +47,7 @@
 class Class5 extends core::Object {
   final field core::int field1;
   final field core::int? field2;
-  constructor _(core::int field1, [core::int? field2]) → self::Class5
+  constructor _(core::int field1, [core::int? field2 = null]) → self::Class5
     ;
   static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
@@ -60,7 +60,7 @@
   final field core::int field1;
   final field core::int? field2;
   final field core::int field3;
-  constructor _(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
+  constructor _(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
     ;
   static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
index 146ad99..d38cf02 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -43,7 +43,7 @@
 class Class4 extends core::Object {
   final field core::int? field;
   static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field]) → self::Class4
+  constructor _([core::int? field = null]) → self::Class4
     ;
   static method _#_#tearOff([core::int? field]) → self::Class4
     return new self::Class4::_(field);
@@ -56,7 +56,7 @@
   final field core::int field1;
   final field core::int? field2;
   static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2]) → self::Class5
+  constructor _(core::int field1, [core::int? field2 = null]) → self::Class5
     ;
   static method _#_#tearOff(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
@@ -70,7 +70,7 @@
   final field core::int? field2;
   final field core::int field3;
   static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
+  constructor _(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
     ;
   static method _#_#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
index 451d45b..b5be0c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
@@ -10,7 +10,7 @@
   static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
   constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
     ;
-  constructor named(self::Class::S% a, [self::Class::T? b, core::int c = 42]) → self::Class<self::Class::S%, self::Class::T%>
+  constructor named(self::Class::S% a, [self::Class::T? b = null, core::int c = 42]) → self::Class<self::Class::S%, self::Class::T%>
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect
index 53cbd09..b458764 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect
@@ -74,7 +74,7 @@
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
 static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
   return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
   return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
 
 constants  {
@@ -86,4 +86,5 @@
   #C6 = static-tearoff mai::_#F#named#tearOff
   #C7 = static-tearoff mai::_#F#fact#tearOff
   #C8 = static-tearoff mai::_#F#redirect#tearOff
+  #C9 = null
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
index fdfd1c3..829a8ce 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
@@ -37,7 +37,7 @@
   static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
   constructor •() → mai::A<mai::A::T%>
     ;
-  constructor named(mai::A::T% a, [core::int? b]) → mai::A<mai::A::T%>
+  constructor named(mai::A::T% a, [core::int? b = #C2]) → mai::A<mai::A::T%>
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::A<mai::A::_#new#tearOff::T%>
     return new mai::A::•<mai::A::_#new#tearOff::T%>();
@@ -79,4 +79,5 @@
 
 constants  {
   #C1 = constructor-tearoff mai::A::redirect
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
index 26c6cb7..6a47350 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
@@ -37,7 +37,7 @@
   static final field dynamic _redirecting# = <dynamic>[typ::A::redirect]/*isLegacy*/;
   constructor •() → typ::A<typ::A::T%>
     ;
-  constructor named(typ::A::T% a, [core::int? b]) → typ::A<typ::A::T%>
+  constructor named(typ::A::T% a, [core::int? b = null]) → typ::A<typ::A::T%>
     ;
   static method _#new#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#new#tearOff::T%>
     return new typ::A::•<typ::A::_#new#tearOff::T%>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
index bae6873..23dbb32 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.outline.expect
@@ -29,7 +29,7 @@
 class Class4 extends core::Object {
   final field core::int? field;
   static final field dynamic _redirecting# = <dynamic>[self::Class4::•]/*isLegacy*/;
-  constructor _([core::int? field]) → self::Class4
+  constructor _([core::int? field = null]) → self::Class4
     ;
   static factory •([core::int? field]) → self::Class4
     return new self::Class4::_(field);
@@ -38,7 +38,7 @@
   final field core::int field1;
   final field core::int? field2;
   static final field dynamic _redirecting# = <dynamic>[self::Class5::•]/*isLegacy*/;
-  constructor _(core::int field1, [core::int? field2]) → self::Class5
+  constructor _(core::int field1, [core::int? field2 = null]) → self::Class5
     ;
   static factory •(core::int field1, [core::int? field2]) → self::Class5
     return new self::Class5::_(field1, field2);
@@ -48,7 +48,7 @@
   final field core::int? field2;
   final field core::int field3;
   static final field dynamic _redirecting# = <dynamic>[self::Class6::•]/*isLegacy*/;
-  constructor _(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
+  constructor _(core::int field1, {core::int? field2 = null, required core::int field3 = null}) → self::Class6
     ;
   static factory •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
     return new self::Class6::_(field1, field2: field2, field3: field3);
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
index 927a4e3..839811b 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
@@ -8,7 +8,7 @@
   final field core::int bar;
   static const field self::E0 one = const self::E0::•(0, "one", 1, bar: 1);
   static const field self::E0 two = const self::E0::•(1, "two", 2, bar: 2);
-  const constructor •(core::int index, core::String name, core::int foo, {required core::int bar}) → self::E0
+  const constructor •(core::int index, core::String name, core::int foo, {required core::int bar = null}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
   method toString() → core::String
@@ -19,7 +19,7 @@
   final field self::E1::X% foo;
   static const field self::E1<core::String> one = const self::E1::•<core::String>(0, "one", foo: "1");
   static const field self::E1<core::int> two = const self::E1::•<core::int>(1, "two", foo: 2);
-  const constructor •(core::int index, core::String name, {required self::E1::X% foo}) → self::E1<self::E1::X%>
+  const constructor •(core::int index, core::String name, {required self::E1::X% foo = null}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
   method toString() → core::String
@@ -33,7 +33,7 @@
   static const field self::E2<core::int, core::String, core::double> one = const self::E2::•<core::int, core::String, core::double>(0, "one", 1, bar: "1", baz: 3.14);
   static const field self::E2<core::String, core::int, core::double> two = const self::E2::•<core::String, core::int, core::double>(1, "two", "2", baz: 3.14, bar: 2);
   static const field self::E2<core::double, core::bool, dynamic> three = const self::E2::•<core::double, core::bool, dynamic>(2, "three", 3.0, bar: false);
-  const constructor •(core::int index, core::String name, self::E2::X% foo, {required self::E2::Y% bar, has-declared-initializer self::E2::Z? baz = null}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+  const constructor •(core::int index, core::String name, self::E2::X% foo, {required self::E2::Y% bar = null, has-declared-initializer self::E2::Z? baz = null}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
   method toString() → core::String
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
index 670f664..9119e8f 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
@@ -44,12 +44,12 @@
 abstract class I extends core::Object {
   synthetic constructor •() → self::I
     ;
-  abstract method foo([dynamic a]) → void;
+  abstract method foo([dynamic a = null]) → void;
 }
 abstract class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  abstract method foo([dynamic a]) → void;
+  abstract method foo([dynamic a = null]) → void;
 }
 class C extends self::B {
   synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
index 2ca5306..8bd0275 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
@@ -16,9 +16,9 @@
     ;
   static factory bazFactory(dynamic factoryFormal) → self::Baz
     ;
-  method fisk(dynamic formal1, dynamic formal2, dynamic formal3, dynamic formal4, [dynamic optional]) → dynamic
+  method fisk(dynamic formal1, dynamic formal2, dynamic formal3, dynamic formal4, [dynamic optional = null]) → dynamic
     ;
-  method hest({dynamic named}) → dynamic
+  method hest({dynamic named = null}) → dynamic
     ;
 }
 static const field core::int foo = 42;
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
index 60f8e3e..39e35eb 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
@@ -7,7 +7,7 @@
 class Node extends core::Object {
   final field core::List<self::Node>? nested;
   final field core::String name;
-  constructor •(core::String name, [core::List<self::Node>? nested]) → self::Node
+  constructor •(core::String name, [core::List<self::Node>? nested = null]) → self::Node
     ;
   method toString() → core::String
     ;
diff --git a/pkg/front_end/testcases/general/bug32426.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug32426.dart.weak.outline.expect
index 4da5082..1f233dd 100644
--- a/pkg/front_end/testcases/general/bug32426.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug32426.dart.weak.outline.expect
@@ -20,7 +20,7 @@
 class C extends core::Object implements self::I {
   synthetic constructor •() → self::C*
     ;
-  method call([core::int* x]) → void
+  method call([core::int* x = null]) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
index d73794e..c83eee4 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
@@ -125,7 +125,7 @@
   @core::override
   method removeWhere((core::String, core::String) → core::bool predicate) → void
     ;
-  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent}) → core::String
+  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent = null}) → core::String
     ;
   method map<K2 extends core::Object? = dynamic, V2 extends core::Object? = dynamic>((core::String, core::String) → core::MapEntry<self::CustomMap::map::K2%, self::CustomMap::map::V2%> f) → core::Map<self::CustomMap::map::K2%, self::CustomMap::map::V2%>
     ;
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect
index 413db05..d738bdb 100644
--- a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.outline.expect
@@ -7,27 +7,27 @@
     ;
   method method1(core::int a) → void
     ;
-  method method2({core::int? a}) → void
+  method method2({core::int? a = null}) → void
     ;
   method method3(core::int a) → void
     ;
   method method4(core::num a) → void
     ;
-  method method5({core::int? a}) → void
+  method method5({core::int? a = null}) → void
     ;
-  method method6({core::num? a}) → void
+  method method6({core::num? a = null}) → void
     ;
   method method7(covariant-by-class core::List<self::Super::T%> a) → void
     ;
-  method method8({covariant-by-class core::List<self::Super::T%>? a}) → void
+  method method8({covariant-by-class core::List<self::Super::T%>? a = null}) → void
     ;
   method method9(covariant-by-class core::List<self::Super::T%> a) → void
     ;
   method method10(covariant-by-class core::Iterable<self::Super::T%> a) → void
     ;
-  method method11({covariant-by-class core::List<self::Super::T%>? a}) → void
+  method method11({covariant-by-class core::List<self::Super::T%>? a = null}) → void
     ;
-  method method12({covariant-by-class core::Iterable<self::Super::T%>? a}) → void
+  method method12({covariant-by-class core::Iterable<self::Super::T%>? a = null}) → void
     ;
   set setter1(core::int a) → void
     ;
@@ -43,11 +43,11 @@
     ;
   method method1(covariant-by-declaration core::num a) → void
     ;
-  method method2({covariant-by-declaration core::num? a}) → void
+  method method2({covariant-by-declaration core::num? a = null}) → void
     ;
   method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void
     ;
-  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%>? a}) → void
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%>? a = null}) → void
     ;
   set setter1(covariant-by-declaration core::num a) → void
     ;
@@ -61,17 +61,17 @@
     return super.{self::Super::method3}(a);
   forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method4(covariant-by-declaration core::num a) → void
     return super.{self::Super::method4}(a);
-  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::num?}) → void */ method5({covariant-by-declaration core::int? a}) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::num?}) → void */ method5({covariant-by-declaration core::int? a = null}) → void
     return super.{self::Super::method5}(a: a);
-  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::int?}) → void */ method6({covariant-by-declaration core::num? a}) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::int?}) → void */ method6({covariant-by-declaration core::num? a = null}) → void
     return super.{self::Super::method6}(a: a);
   forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::List<self::Class::T%> a) → void
     return super.{self::Super::method9}(a);
   forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method10(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
     return super.{self::Super::method10}(a);
-  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::Iterable<self::Class::T%>?}) → void */ method11({covariant-by-declaration covariant-by-class core::List<self::Class::T%>? a}) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::Iterable<self::Class::T%>?}) → void */ method11({covariant-by-declaration covariant-by-class core::List<self::Class::T%>? a = null}) → void
     return super.{self::Super::method11}(a: a);
-  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::List<self::Class::T%>?}) → void */ method12({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a}) → void
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::List<self::Class::T%>?}) → void */ method12({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a = null}) → void
     return super.{self::Super::method12}(a: a);
   forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter2(covariant-by-declaration core::num a) → void
     return super.{self::Super::setter2} = a;
@@ -95,27 +95,27 @@
     ;
   method method1(covariant-by-declaration core::num a) → void
     ;
-  method method2({covariant-by-declaration core::num? a}) → void
+  method method2({covariant-by-declaration core::num? a = null}) → void
     ;
   method method3(covariant-by-declaration core::num a) → void
     ;
   method method4(covariant-by-declaration core::num a) → void
     ;
-  method method5({covariant-by-declaration core::num? a}) → void
+  method method5({covariant-by-declaration core::num? a = null}) → void
     ;
-  method method6({covariant-by-declaration core::num? a}) → void
+  method method6({covariant-by-declaration core::num? a = null}) → void
     ;
   method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
     ;
-  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = null}) → void
     ;
   method method9(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
     ;
   method method10(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void
     ;
-  method method11({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+  method method11({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = null}) → void
     ;
-  method method12({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a}) → void
+  method method12({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = null}) → void
     ;
   set setter1(covariant-by-declaration core::num a) → void
     ;
diff --git a/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect
index a5176a6..4e28f66 100644
--- a/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.outline.expect
@@ -140,9 +140,9 @@
     ;
   method method3(core::num a, core::int b) → void
     ;
-  method method4({required core::num a}) → void
+  method method4({required core::num a = null}) → void
     ;
-  method method5({required core::int b}) → void
+  method method5({required core::int b = null}) → void
     ;
   method method7(covariant-by-class core::Iterable<self::Super::T%> a) → void
     ;
@@ -150,9 +150,9 @@
     ;
   method method9(covariant-by-class core::Iterable<self::Super::T%> a, covariant-by-class core::List<self::Super::T%> b) → void
     ;
-  method method10({required covariant-by-class core::Iterable<self::Super::T%> a}) → void
+  method method10({required covariant-by-class core::Iterable<self::Super::T%> a = null}) → void
     ;
-  method method11({required covariant-by-class core::List<self::Super::T%> b}) → void
+  method method11({required covariant-by-class core::List<self::Super::T%> b = null}) → void
     ;
   set setter1(core::num a) → void
     ;
@@ -166,13 +166,13 @@
     ;
   method method3(core::num a, covariant-by-declaration core::num b) → void
     ;
-  method method5({required core::int b}) → void
+  method method5({required core::int b = null}) → void
     ;
   method method8(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void
     ;
   method method9(covariant-by-class core::Iterable<self::Interface::T%> a, covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void
     ;
-  method method11({required covariant-by-class core::List<self::Interface::T%> b}) → void
+  method method11({required covariant-by-class core::List<self::Interface::T%> b = null}) → void
     ;
 }
 class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
@@ -204,9 +204,9 @@
     ;
   method method3(covariant-by-declaration core::double a, covariant-by-declaration core::double b) → void
     ;
-  method method4({required core::double a}) → void
+  method method4({required core::double a = null}) → void
     ;
-  method method5({required core::double b}) → void
+  method method5({required core::double b = null}) → void
     ;
   method method7(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a) → void
     ;
@@ -214,9 +214,9 @@
     ;
   method method9(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a, covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> b) → void
     ;
-  method method10({required covariant-by-class core::Set<self::Class1::T%> a}) → void
+  method method10({required covariant-by-class core::Set<self::Class1::T%> a = null}) → void
     ;
-  method method11({required covariant-by-class core::Set<self::Class1::T%> b}) → void
+  method method11({required covariant-by-class core::Set<self::Class1::T%> b = null}) → void
     ;
   set setter1(covariant-by-declaration core::double a) → void
     ;
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect
index 3f03f7a..9ec5019 100644
--- a/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.outline.expect
@@ -17,7 +17,7 @@
 class Super2 extends core::Object {
   synthetic constructor •() → self::Super2
     ;
-  method call(core::int a, [core::int? b]) → core::int
+  method call(core::int a, [core::int? b = null]) → core::int
     ;
 }
 class Class2 extends self::Super2 {
@@ -29,7 +29,7 @@
 class Super3 extends core::Object {
   synthetic constructor •() → self::Super3
     ;
-  method call(core::int a, {core::int? b, core::int? c}) → core::int
+  method call(core::int a, {core::int? b = null, core::int? c = null}) → core::int
     ;
 }
 class Class3 extends self::Super3 {
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
index 839e7f4..92c304b 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
@@ -686,167 +686,167 @@
     ;
   operator ==([core::Object a = 0]) → core::bool
     ;
-  operator <([dynamic a]) → dynamic
+  operator <([dynamic a = null]) → dynamic
     ;
-  operator >([dynamic a]) → dynamic
+  operator >([dynamic a = null]) → dynamic
     ;
-  operator <=([dynamic a]) → dynamic
+  operator <=([dynamic a = null]) → dynamic
     ;
-  operator >=([dynamic a]) → dynamic
+  operator >=([dynamic a = null]) → dynamic
     ;
-  operator -([dynamic a]) → dynamic
+  operator -([dynamic a = null]) → dynamic
     ;
-  operator +([dynamic a]) → dynamic
+  operator +([dynamic a = null]) → dynamic
     ;
-  operator /([dynamic a]) → dynamic
+  operator /([dynamic a = null]) → dynamic
     ;
-  operator ~/([dynamic a]) → dynamic
+  operator ~/([dynamic a = null]) → dynamic
     ;
-  operator *([dynamic a]) → dynamic
+  operator *([dynamic a = null]) → dynamic
     ;
-  operator %([dynamic a]) → dynamic
+  operator %([dynamic a = null]) → dynamic
     ;
-  operator |([dynamic a]) → dynamic
+  operator |([dynamic a = null]) → dynamic
     ;
-  operator ^([dynamic a]) → dynamic
+  operator ^([dynamic a = null]) → dynamic
     ;
-  operator &([dynamic a]) → dynamic
+  operator &([dynamic a = null]) → dynamic
     ;
-  operator <<([dynamic a]) → dynamic
+  operator <<([dynamic a = null]) → dynamic
     ;
-  operator >>([dynamic a]) → dynamic
+  operator >>([dynamic a = null]) → dynamic
     ;
-  operator []=([dynamic a, dynamic b]) → void
+  operator []=([dynamic a = null, dynamic b = null]) → void
     ;
-  operator []([dynamic a]) → dynamic
+  operator []([dynamic a = null]) → dynamic
     ;
-  operator ~([dynamic a]) → dynamic
+  operator ~([dynamic a = null]) → dynamic
     ;
 }
 class Operators4 extends core::Object {
   synthetic constructor •() → self::Operators4
     ;
-  operator ==({dynamic a}) → core::bool
+  operator ==({dynamic a = null}) → core::bool
     ;
-  operator <({dynamic a}) → dynamic
+  operator <({dynamic a = null}) → dynamic
     ;
-  operator >({dynamic a}) → dynamic
+  operator >({dynamic a = null}) → dynamic
     ;
-  operator <=({dynamic a}) → dynamic
+  operator <=({dynamic a = null}) → dynamic
     ;
-  operator >=({dynamic a}) → dynamic
+  operator >=({dynamic a = null}) → dynamic
     ;
-  operator -({dynamic a}) → dynamic
+  operator -({dynamic a = null}) → dynamic
     ;
-  operator +({dynamic a}) → dynamic
+  operator +({dynamic a = null}) → dynamic
     ;
-  operator /({dynamic a}) → dynamic
+  operator /({dynamic a = null}) → dynamic
     ;
-  operator ~/({dynamic a}) → dynamic
+  operator ~/({dynamic a = null}) → dynamic
     ;
-  operator *({dynamic a}) → dynamic
+  operator *({dynamic a = null}) → dynamic
     ;
-  operator %({dynamic a}) → dynamic
+  operator %({dynamic a = null}) → dynamic
     ;
-  operator |({dynamic a}) → dynamic
+  operator |({dynamic a = null}) → dynamic
     ;
-  operator ^({dynamic a}) → dynamic
+  operator ^({dynamic a = null}) → dynamic
     ;
-  operator &({dynamic a}) → dynamic
+  operator &({dynamic a = null}) → dynamic
     ;
-  operator <<({dynamic a}) → dynamic
+  operator <<({dynamic a = null}) → dynamic
     ;
-  operator >>({dynamic a}) → dynamic
+  operator >>({dynamic a = null}) → dynamic
     ;
-  operator []=({dynamic a, dynamic b}) → void
+  operator []=({dynamic a = null, dynamic b = null}) → void
     ;
-  operator []({dynamic a}) → dynamic
+  operator []({dynamic a = null}) → dynamic
     ;
-  operator ~({dynamic a}) → dynamic
+  operator ~({dynamic a = null}) → dynamic
     ;
 }
 class Operators5 extends core::Object {
   synthetic constructor •() → self::Operators5
     ;
-  operator ==(core::Object a, [dynamic b]) → core::bool
+  operator ==(core::Object a, [dynamic b = null]) → core::bool
     ;
-  operator <(dynamic a, [dynamic b]) → dynamic
+  operator <(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator >(dynamic a, [dynamic b]) → dynamic
+  operator >(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator <=(dynamic a, [dynamic b]) → dynamic
+  operator <=(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator >=(dynamic a, [dynamic b]) → dynamic
+  operator >=(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator -(dynamic a, [dynamic b]) → dynamic
+  operator -(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator +(dynamic a, [dynamic b]) → dynamic
+  operator +(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator /(dynamic a, [dynamic b]) → dynamic
+  operator /(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator ~/(dynamic a, [dynamic b]) → dynamic
+  operator ~/(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator *(dynamic a, [dynamic b]) → dynamic
+  operator *(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator %(dynamic a, [dynamic b]) → dynamic
+  operator %(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator |(dynamic a, [dynamic b]) → dynamic
+  operator |(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator ^(dynamic a, [dynamic b]) → dynamic
+  operator ^(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator &(dynamic a, [dynamic b]) → dynamic
+  operator &(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator <<(dynamic a, [dynamic b]) → dynamic
+  operator <<(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator >>(dynamic a, [dynamic b]) → dynamic
+  operator >>(dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator []=(dynamic a, dynamic b, [dynamic c]) → void
+  operator []=(dynamic a, dynamic b, [dynamic c = null]) → void
     ;
-  operator [](dynamic a, [dynamic b]) → dynamic
+  operator [](dynamic a, [dynamic b = null]) → dynamic
     ;
-  operator ~(dynamic a, [dynamic b]) → dynamic
+  operator ~(dynamic a, [dynamic b = null]) → dynamic
     ;
 }
 class Operators6 extends core::Object {
   synthetic constructor •() → self::Operators6
     ;
-  operator ==(core::Object a, {dynamic b}) → core::bool
+  operator ==(core::Object a, {dynamic b = null}) → core::bool
     ;
-  operator <(dynamic a, {dynamic b}) → dynamic
+  operator <(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator >(dynamic a, {dynamic b}) → dynamic
+  operator >(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator <=(dynamic a, {dynamic b}) → dynamic
+  operator <=(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator >=(dynamic a, {dynamic b}) → dynamic
+  operator >=(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator -(dynamic a, {dynamic b}) → dynamic
+  operator -(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator +(dynamic a, {dynamic b}) → dynamic
+  operator +(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator /(dynamic a, {dynamic b}) → dynamic
+  operator /(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator ~/(dynamic a, {dynamic b}) → dynamic
+  operator ~/(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator *(dynamic a, {dynamic b}) → dynamic
+  operator *(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator %(dynamic a, {dynamic b}) → dynamic
+  operator %(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator |(dynamic a, {dynamic b}) → dynamic
+  operator |(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator ^(dynamic a, {dynamic b}) → dynamic
+  operator ^(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator &(dynamic a, {dynamic b}) → dynamic
+  operator &(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator <<(dynamic a, {dynamic b}) → dynamic
+  operator <<(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator >>(dynamic a, {dynamic b}) → dynamic
+  operator >>(dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator []=(dynamic a, dynamic b, {dynamic c}) → void
+  operator []=(dynamic a, dynamic b, {dynamic c = null}) → void
     ;
-  operator [](dynamic a, {dynamic b}) → dynamic
+  operator [](dynamic a, {dynamic b = null}) → dynamic
     ;
-  operator ~(dynamic a, {dynamic b}) → dynamic
+  operator ~(dynamic a, {dynamic b = null}) → dynamic
     ;
 }
 class Operators7 extends core::Object {
diff --git a/pkg/front_end/testcases/general/issue42615.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue42615.dart.weak.outline.expect
index 1cd32a4..d0547dd 100644
--- a/pkg/front_end/testcases/general/issue42615.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 import "dart:async";
 
 class Class<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({() →* FutureOr<core::List<self::Class::T*>*>* a}) → self::Class<self::Class::T*>*
+  constructor •({() →* FutureOr<core::List<self::Class::T*>*>* a = null}) → self::Class<self::Class::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
index 8ff791a..bb955ac 100644
--- a/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
@@ -8,7 +8,7 @@
     ;
   method foo(core::int n) → core::num
     ;
-  method bar({required core::int x}) → core::num
+  method bar({required core::int x = null}) → core::num
     ;
   set baz(core::int x) → void
     ;
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::B<self::B::X%>
     ;
   abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
-  abstract method bar({required covariant-by-class self::B::X% x}) → self::B::X%;
+  abstract method bar({required covariant-by-class self::B::X% x = null}) → self::B::X%;
   abstract set baz(covariant-by-class self::B::X% x) → void;
   abstract set boz(covariant-by-class self::B::X% x) → void;
 }
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
index bad6433..f84d0ad 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.outline.expect
@@ -10,7 +10,7 @@
 }
 class Settings extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Settings::•]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar}) → self::Settings
+  static factory •({self::Sidebar sidebar = null}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
@@ -20,7 +20,7 @@
 }
 abstract class _SSettings extends core::Object implements self::Settings {
   static final field dynamic _redirecting# = <dynamic>[self::_SSettings::•]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar}) → self::_SSettings
+  static factory •({self::Sidebar sidebar = null}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue47994a.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47994a.dart.weak.outline.expect
index 0347e2e..4e6414d 100644
--- a/pkg/front_end/testcases/general/issue47994a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47994a.dart.weak.outline.expect
@@ -8,7 +8,7 @@
     ;
 }
 class BuildAssert extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::bool condition, [core::Object? message]) → self::BuildAssert
+  const constructor •(core::bool condition, [core::Object? message = null]) → self::BuildAssert
     : assert(condition, message), super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect
index fe420e8..e400a72 100644
--- a/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect
@@ -8,7 +8,7 @@
 }
 abstract class TestFailure<A extends core::Object? = dynamic> extends self::Base /*isMixinDeclaration*/  {
   @core::override
-  abstract method methodWithDefaultImpl({covariant-by-class self::TestFailure::A? nameParam}) → core::Object?;
+  abstract method methodWithDefaultImpl({covariant-by-class self::TestFailure::A? nameParam = null}) → core::Object?;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
index a0a1070..b5bf4ad 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
@@ -128,7 +128,7 @@
 class S extends core::Object {
   synthetic constructor •() → self::S
     ;
-  method foo([dynamic x]) → dynamic
+  method foo([dynamic x = null]) → dynamic
     ;
 }
 class M extends core::Object {
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
index 40e7e6a..27daeeb 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
@@ -44,9 +44,9 @@
     ;
   method positional(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void
     ;
-  method optional([covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d]) → void
+  method optional([covariant-by-declaration core::int? a = null, core::int? b = null, covariant-by-declaration core::int? c = null, core::int? d = null]) → void
     ;
-  method named({covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d}) → void
+  method named({covariant-by-declaration core::int? a = null, core::int? b = null, covariant-by-declaration core::int? c = null, core::int? d = null}) → void
     ;
 }
 class Inherited extends self::Direct {
diff --git a/pkg/front_end/testcases/general/named_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/general/named_parameters.dart.weak.outline.expect
index a660886..9f54111 100644
--- a/pkg/front_end/testcases/general/named_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/named_parameters.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class Superclass extends core::Object {
   synthetic constructor •() → self::Superclass
     ;
-  method foo({dynamic alpha, dynamic beta}) → dynamic
+  method foo({dynamic alpha = null, dynamic beta = null}) → dynamic
     ;
-  method bar({dynamic beta, dynamic alpha}) → dynamic
+  method bar({dynamic beta = null, dynamic alpha = null}) → dynamic
     ;
   method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic
     ;
@@ -15,9 +15,9 @@
 class Subclass extends self::Superclass {
   synthetic constructor •() → self::Subclass
     ;
-  method foo({dynamic beta, dynamic alpha}) → dynamic
+  method foo({dynamic beta = null, dynamic alpha = null}) → dynamic
     ;
-  method bar({dynamic alpha, dynamic beta}) → dynamic
+  method bar({dynamic alpha = null, dynamic beta = null}) → dynamic
     ;
   method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
index 6ab71bf..6a88f7b 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
@@ -62,17 +62,17 @@
   synthetic constructor •() → nsm::A<nsm::A::T%>
     ;
   abstract method _method1(core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d) → void;
-  abstract method _method2({core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d}) → void;
+  abstract method _method2({core::int a = null, core::int b = null, covariant-by-class nsm::A::T% c = null, covariant-by-class nsm::A::T% d = null}) → void;
   abstract method _method3(core::int a, covariant-by-class nsm::A::T% b) → void;
-  abstract method _method4({core::int a, covariant-by-class nsm::A::T% b}) → void;
+  abstract method _method4({core::int a = null, covariant-by-class nsm::A::T% b = null}) → void;
 }
 abstract class B extends core::Object {
   synthetic constructor •() → nsm::B
     ;
   abstract method _method1(core::int x, covariant-by-declaration core::int y, core::int z, covariant-by-declaration core::int w) → void;
-  abstract method _method2({core::int a, covariant-by-declaration core::int b, core::int c, covariant-by-declaration core::int d}) → void;
+  abstract method _method2({core::int a = null, covariant-by-declaration core::int b = null, core::int c = null, covariant-by-declaration core::int d = null}) → void;
   abstract method _method3(covariant-by-declaration core::int x, core::int y) → void;
-  abstract method _method4({covariant-by-declaration core::int a, core::int b}) → void;
+  abstract method _method4({covariant-by-declaration core::int a = null, core::int b = null}) → void;
 }
 abstract class C1 extends core::Object implements nsm::A<core::int>, nsm::B {
   synthetic constructor •() → nsm::C1
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.outline.expect b/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
index 0d055ce..39abe43 100644
--- a/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
@@ -5,36 +5,36 @@
 class Foo extends core::Object {
   synthetic constructor •() → self::Foo
     ;
-  method method(dynamic x, [dynamic y, dynamic z]) → dynamic
+  method method(dynamic x, [dynamic y = null, dynamic z = null]) → dynamic
     ;
 }
 abstract class External extends core::Object {
   synthetic constructor •() → self::External
     ;
-  abstract method externalMethod(core::int x, [core::int y, core::int z]) → core::String;
+  abstract method externalMethod(core::int x, [core::int y = null, core::int z = null]) → core::String;
   abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
   synthetic constructor •() → self::Listener
     ;
-  abstract method event(core::String input, [core::int? x, core::int? y]) → void;
+  abstract method event(core::String input, [core::int? x = null, core::int? y = null]) → void;
 }
 class TestListener extends self::Listener {
   synthetic constructor •() → self::TestListener
     ;
-  method event(core::String input, [core::int? x, core::int? y]) → void
+  method event(core::String input, [core::int? x = null, core::int? y = null]) → void
     ;
 }
 class ExtendedListener extends self::Listener {
   synthetic constructor •() → self::ExtendedListener
     ;
-  method event(core::String input, [core::int? x, core::int? y, dynamic z]) → void
+  method event(core::String input, [core::int? x = null, core::int? y = null, dynamic z = null]) → void
     ;
 }
 class InvalidListener extends core::Object {
   synthetic constructor •() → self::InvalidListener
     ;
-  method event(dynamic input, [dynamic x]) → void
+  method event(dynamic input, [dynamic x = null]) → void
     ;
 }
 external static method createExternal() → self::External;
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
index 50f0b43..85c382b 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
@@ -58,9 +58,9 @@
     ;
   method f1(self::A x) → void
     ;
-  method f2([self::A? x]) → void
+  method f2([self::A? x = null]) → void
     ;
-  method f3({self::A? x}) → void
+  method f3({self::A? x = null}) → void
     ;
   method f4() → self::A?
     ;
@@ -70,9 +70,9 @@
     ;
   method f1(core::Object x) → void
     ;
-  method f2([core::Object? x]) → void
+  method f2([core::Object? x = null]) → void
     ;
-  method f3({core::Object? x}) → void
+  method f3({core::Object? x = null}) → void
     ;
   method f4() → self::B?
     ;
@@ -82,9 +82,9 @@
     ;
   method f1(self::B x) → void
     ;
-  method f2([self::B? x]) → void
+  method f2([self::B? x = null]) → void
     ;
-  method f3({self::B? x}) → void
+  method f3({self::B? x = null}) → void
     ;
   method f4() → core::Object?
     ;
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
index 17f1de7..beb4abd 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
@@ -5,37 +5,37 @@
 class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  method foo({core::bool? c = true, core::bool? a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a = null}) → dynamic
     ;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  method foo({core::bool? c = true, core::bool? a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a = null}) → dynamic
     ;
 }
 class C extends self::B {
   synthetic constructor •() → self::C
     ;
-  method foo({core::bool? c = true, core::bool? a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a = null}) → dynamic
     ;
 }
 class A1 extends core::Object {
   synthetic constructor •() → self::A1
     ;
-  method foo({core::bool? a = true, core::bool? c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c = null}) → dynamic
     ;
 }
 class B1 extends self::A1 {
   synthetic constructor •() → self::B1
     ;
-  method foo({core::bool? a = true, core::bool? c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c = null}) → dynamic
     ;
 }
 class C1 extends self::B1 {
   synthetic constructor •() → self::C1
     ;
-  method foo({core::bool? a = true, core::bool? c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c = null}) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
index 70bc2cc..a663626 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.outline.expect
@@ -16,7 +16,7 @@
   final field self::Class2 _c2;
   constructor •(self::Class2 _c2) → self::Class2
     ;
-  method method({dynamic a}) → dynamic
+  method method({dynamic a = null}) → dynamic
     ;
   get call() → core::int
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
index ac02ea3..d242338 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.outline.expect
@@ -31,10 +31,10 @@
   constructor •() → self::Class<self::Class::T%>
     ;
   @self::Const::internal()
-  method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2]) → dynamic
+  method method1<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = null]) → dynamic
     ;
   @self::Const::internal()
-  method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2}) → dynamic
+  method method2<@self::Const::internal() T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = null}) → dynamic
     ;
 }
 @self::Const::internal()
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect
index 8972be7..95eee3f 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   constructor fromT(self::Foo::T _init) → self::Foo<self::Foo::T>
     ;
-  constructor _internal({required self::Foo::T x}) → self::Foo<self::Foo::T>
+  constructor _internal({required self::Foo::T x = null}) → self::Foo<self::Foo::T>
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
index 9c7ccb9..3aac044 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
@@ -22,7 +22,7 @@
     ;
   constructor fromT(self::Foo::T* _init) → self::Foo<self::Foo::T*>*
     ;
-  constructor _internal({self::Foo::T* x}) → self::Foo<self::Foo::T*>*
+  constructor _internal({self::Foo::T* x = null}) → self::Foo<self::Foo::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
index 5e288fa..d0557a9 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   covariant-by-class field self::Foo::T% x;
   constructor from(core::String _init) → self::Foo<self::Foo::T%>
     ;
-  constructor _internal({required self::Foo::T% x}) → self::Foo<self::Foo::T%>
+  constructor _internal({required self::Foo::T% x = null}) → self::Foo<self::Foo::T%>
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect
index 5048b8e..ed37270 100644
--- a/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  method instance1({dynamic z}) → void
+  method instance1({dynamic z = null}) → void
     ;
-  method instance2(dynamic a, {dynamic z}) → void
+  method instance2(dynamic a, {dynamic z = null}) → void
     ;
 }
 class Bad extends core::Object {
diff --git a/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml
new file mode 100644
index 0000000..e60bc44
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml
@@ -0,0 +1,29 @@
+# Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Recompiling with no change shouldn't change the initializer - even from
+# null to Constant(null).
+
+type: newworld
+worlds:
+  - entry: main.dart
+    sources:
+      main.dart: |
+        import "lib.dart";
+        class B {}
+        class C = A with B;
+      lib.dart: |
+        class A {
+          final int? a;
+          A([this.a]);
+        }
+    expectedLibraryCount: 2
+
+  - entry: main.dart
+    worldType: updated
+    compareToPrevious: true
+    expectInitializeFromDill: false
+    invalidate:
+      - main.dart
+    expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.1.expect b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.1.expect
new file mode 100644
index 0000000..8290d7d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.1.expect
@@ -0,0 +1,28 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib.dart" as lib {
+
+  class A extends dart.core::Object {
+    final field dart.core::int? a;
+    constructor •([dart.core::int? a = #C1]) → lib::A
+      : lib::A::a = a, super dart.core::Object::•()
+      ;
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib.dart";
+
+  class B extends dart.core::Object {
+    synthetic constructor •() → main::B
+      : super dart.core::Object::•()
+      ;
+  }
+  class C extends lib::A implements main::B /*isEliminatedMixin*/  {
+    synthetic constructor •([dart.core::int? a = #C1]) → main::C
+      : super lib::A::•(a)
+      ;
+  }
+}
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.2.expect b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.2.expect
new file mode 100644
index 0000000..8290d7d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/initializer_implicit_null.yaml.world.2.expect
@@ -0,0 +1,28 @@
+main = <No Member>;
+library from "org-dartlang-test:///lib.dart" as lib {
+
+  class A extends dart.core::Object {
+    final field dart.core::int? a;
+    constructor •([dart.core::int? a = #C1]) → lib::A
+      : lib::A::a = a, super dart.core::Object::•()
+      ;
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "org-dartlang-test:///lib.dart";
+
+  class B extends dart.core::Object {
+    synthetic constructor •() → main::B
+      : super dart.core::Object::•()
+      ;
+  }
+  class C extends lib::A implements main::B /*isEliminatedMixin*/  {
+    synthetic constructor •([dart.core::int? a = #C1]) → main::C
+      : super lib::A::•(a)
+      ;
+  }
+}
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.weak.outline.expect b/pkg/front_end/testcases/inference/bug30624.dart.weak.outline.expect
index 7b44ed7..2d19b55 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.weak.outline.expect
@@ -5,17 +5,17 @@
 class C<E extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::E*>*
     ;
-  method barA([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barA([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barB([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barB([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barC([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barC([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barD([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barD([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barE([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barE([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
-  method barF([(self::C::E*, self::C::E*) →* core::int* cmp]) → void
+  method barF([(self::C::E*, self::C::E*) →* core::int* cmp = null]) → void
     ;
   static method _default(dynamic a, dynamic b) → core::int*
     ;
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
index 79e8640..0e0f2e4 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
     ;
-  method call([covariant-by-class self::ActionDispatcher::P* value]) → void
+  method call([covariant-by-class self::ActionDispatcher::P* value = null]) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
index b4bd378..f77a3ad 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F1 extends core::Object {
-  constructor •({core::List<core::int*>* a}) → self::F1*
+  constructor •({core::List<core::int*>* a = null}) → self::F1*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -59,7 +59,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4 extends core::Object {
-  constructor •({core::Iterable<core::Iterable<core::int*>*>* a}) → self::F4*
+  constructor •({core::Iterable<core::Iterable<core::int*>*>* a = null}) → self::F4*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
index 0a9290c..568d09d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a}) → self::F4<self::F4::T*>*
+  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = null}) → self::F4<self::F4::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
index 6ad323d..bc46cfe 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F1<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::List<self::F1::T*>* a}) → self::F1<self::F1::T*>*
+  constructor •({core::List<self::F1::T*>* a = null}) → self::F1<self::F1::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -59,7 +59,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F4<T extends core::Object* = dynamic> extends core::Object {
-  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a}) → self::F4<self::F4::T*>*
+  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = null}) → self::F4<self::F4::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
index 6b90f7f..a2ec85f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
@@ -43,9 +43,9 @@
     ;
 }
 class F<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::F::S*, self::F::T*> {
-  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a, core::List<self::F::T*>* b}) → self::F<self::F::S*, self::F::T*>*
+  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a = null, core::List<self::F::T*>* b = null}) → self::F<self::F::S*, self::F::T*>*
     ;
-  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a, self::F::T* b]) → self::F<self::F::S*, self::F::T*>*
+  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a = null, self::F::T* b = null]) → self::F<self::F::S*, self::F::T*>*
     ;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
index 1e5bf1d..9492fb2 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
index 65c689a..6bf7851 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
index dec6dfa..d8325ea 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
index 716cde4..bd648b9 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
index b9060d8..bdf2de4 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
index f7c82fa..6308c69 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
index 3a661d0..c6f1986 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
index 68bc085..c076dc4 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
index bb3f357..9969d8c 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
index c9869bc..242640b 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
index c2dff99..072b257 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
index 4bf3e0c..78864f5 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
index 3719c43..174999b 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
index 0838a5b..2f7fa11 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
index 244190b..d1dd603 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
index 0096c45..1d10649 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
index 45d1408..41c31af 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
index 6e0c9a1..0b1b385 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
@@ -12,7 +12,7 @@
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
index 53ccca1..871785f 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
@@ -8,11 +8,11 @@
 class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
   constructor •() → self::MyFuture<self::MyFuture::T*>*
     ;
-  constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
index f4f33bc..cec3e52 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
@@ -8,11 +8,11 @@
 class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
   constructor •() → self::MyFuture<self::MyFuture::T*>*
     ;
-  constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
index cd98612..2ba5919 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
@@ -8,11 +8,11 @@
 class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
   constructor •() → self::MyFuture<self::MyFuture::T*>*
     ;
-  constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
index 57e4893..a8d85df 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
@@ -8,11 +8,11 @@
 class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
   constructor •() → self::MyFuture<self::MyFuture::T*>*
     ;
-  constructor value([dynamic x]) → self::MyFuture<self::MyFuture::T*>*
+  constructor value([dynamic x = null]) → self::MyFuture<self::MyFuture::T*>*
     ;
   method noSuchMethod(core::Invocation* invocation) → dynamic
     ;
-  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = null}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
index 3603daa..d909d15 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class C<E extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::E*>*
     ;
-  method sort([(self::C::E*, self::C::E*) →* core::int* compare]) → void
+  method sort([(self::C::E*, self::C::E*) →* core::int* compare = null]) → void
     ;
   static method _compareAny(dynamic a, dynamic b) → core::int*
     ;
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
index 6756bd4..66062f6 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.outline.expect
@@ -41,11 +41,11 @@
 class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
-  method f(self::A* x, {self::A* y}) → self::A*
+  method f(self::A* x, {self::A* y = null}) → self::A*
     ;
-  method g(self::A* x, {self::A* y}) → self::A*
+  method g(self::A* x, {self::A* y = null}) → self::A*
     ;
-  method h(self::A* x, {self::A* y}) → self::A*
+  method h(self::A* x, {self::A* y = null}) → self::A*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -61,21 +61,21 @@
 class B extends self::A implements self::I {
   synthetic constructor •() → self::B*
     ;
-  method f(invalid-type x, {invalid-type y}) → invalid-type
+  method f(invalid-type x, {invalid-type y = null}) → invalid-type
     ;
-  method g(invalid-type x, {invalid-type y}) → invalid-type
+  method g(invalid-type x, {invalid-type y = null}) → invalid-type
     ;
-  method h(invalid-type x, {invalid-type y}) → invalid-type
+  method h(invalid-type x, {invalid-type y = null}) → invalid-type
     ;
 }
 class I extends core::Object {
   synthetic constructor •() → self::I*
     ;
-  method f(self::I* x, {self::I* y}) → self::I*
+  method f(self::I* x, {self::I* y = null}) → self::I*
     ;
-  method g(self::I* x, {self::I* y}) → self::A*
+  method g(self::I* x, {self::I* y = null}) → self::A*
     ;
-  method h(self::A* x, {self::I* y}) → self::A*
+  method h(self::A* x, {self::I* y = null}) → self::A*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
index 3588046..01a5825 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b, self::C::m::T* c}) → self::C::m::T*
+  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b = null, self::C::m::T* c = null}) → self::C::m::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
index 7cd51f6..5e7e617 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b]) → self::C::m::T*
+  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b = null]) → self::C::m::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
index bc24a94..0ed9a74 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b, self::C::m::T* c]) → self::C::m::T*
+  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b = null, self::C::m::T* c = null]) → self::C::m::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
index bacc059..a063f88 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.outline.expect
@@ -38,9 +38,9 @@
   synthetic constructor •() → self::A*
     ;
   abstract method f(core::int* x, core::int* y) → core::int*;
-  abstract method g(core::int* x, [core::int* y]) → core::int*;
-  abstract method h(core::int* x, {core::int* y}) → core::int*;
-  abstract method i(core::int* x, {core::int* y}) → core::int*;
+  abstract method g(core::int* x, [core::int* y = null]) → core::int*;
+  abstract method h(core::int* x, {core::int* y = null}) → core::int*;
+  abstract method i(core::int* x, {core::int* y = null}) → core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -58,7 +58,7 @@
   abstract method f(core::int* x) → core::int*;
   abstract method g(core::int* x) → core::int*;
   abstract method h(core::int* x) → core::int*;
-  abstract method i(core::int* x, {core::int* z}) → core::int*;
+  abstract method i(core::int* x, {core::int* z = null}) → core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -74,9 +74,9 @@
   synthetic constructor •() → self::C*
     ;
   abstract method f(invalid-type x, invalid-type y) → invalid-type;
-  abstract method g(core::int* x, [core::int* y]) → core::int*;
-  abstract method h(core::int* x, {core::int* y}) → core::int*;
-  abstract method i(invalid-type x, {invalid-type y, invalid-type z}) → invalid-type;
+  abstract method g(core::int* x, [core::int* y = null]) → core::int*;
+  abstract method h(core::int* x, {core::int* y = null}) → core::int*;
+  abstract method i(invalid-type x, {invalid-type y = null, invalid-type z = null}) → invalid-type;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
index ab7f834..ad8cba6 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class A<X extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
-  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x}) → void;
+  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = null}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,7 +20,7 @@
 class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
   synthetic constructor •() → self::B<self::B::Y*>*
     ;
-  method foo({covariant-by-class core::Iterable<self::B::Y*>* x}) → void
+  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = null}) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
index 933cc07..0cf94f7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<T extends core::num*, S extends core::List<self::B::T*>* = core::List<core::num*>*> extends self::A<self::B::T*> {
-  constructor •([self::B::T* x]) → self::B<self::B::T*, self::B::S*>*
+  constructor •([self::B::T* x = null]) → self::B<self::B::T*, self::B::S*>*
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
index 23ee911..74d3bdb 100644
--- a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
@@ -4,13 +4,13 @@
 
 typedef B = self::A;
 class A extends core::Object {
-  constructor •(core::int x, core::int y, {required core::int z}) → self::A
+  constructor •(core::int x, core::int y, {required core::int z = null}) → self::A
     ;
   static factory foo(core::int x, core::int y, {required core::int z}) → self::A
     ;
   get property() → (core::int, core::int, {required z: core::int}) → void
     ;
-  method bar(core::int x, core::int y, {required core::int z}) → void
+  method bar(core::int x, core::int y, {required core::int z = null}) → void
     ;
 }
 class Test extends self::A {
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect
index ccf5a7c..48bc7c5 100644
--- a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::A::bar]/*isLegacy*/;
-  constructor •(core::int x, core::bool y, {required core::String z}) → self::A
+  constructor •(core::int x, core::bool y, {required core::String z = null}) → self::A
     ;
   constructor foo() → self::A
     ;
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect
index 5048b8e..ed37270 100644
--- a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  method instance1({dynamic z}) → void
+  method instance1({dynamic z = null}) → void
     ;
-  method instance2(dynamic a, {dynamic z}) → void
+  method instance2(dynamic a, {dynamic z = null}) → void
     ;
 }
 class Bad extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
index 1b3a496..a58937a 100644
--- a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
@@ -5,17 +5,17 @@
 class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  method method1({required core::int a}) → void
+  method method1({required core::int a = null}) → void
     ;
-  method method2({core::int? a, required core::int b}) → void
+  method method2({core::int? a = null, required core::int b = null}) → void
     ;
 }
 class B extends core::Object {
   synthetic constructor •() → self::B
     ;
-  method method1({required covariant-by-declaration core::int a}) → void
+  method method1({required covariant-by-declaration core::int a = null}) → void
     ;
-  method method2({covariant-by-declaration core::int? a, required core::int b}) → void
+  method method2({covariant-by-declaration core::int? a = null, required core::int b = null}) → void
     ;
 }
 class C extends self::A implements self::B {
@@ -29,9 +29,9 @@
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  method method1({required covariant-by-declaration core::int a}) → void
+  method method1({required covariant-by-declaration core::int a = null}) → void
     ;
-  method method2({covariant-by-declaration core::int? a, required core::int b}) → void
+  method method2({covariant-by-declaration core::int? a = null, required core::int b = null}) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.outline.expect
index 920efc0..4a18759 100644
--- a/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.outline.expect
@@ -13,9 +13,9 @@
   static field FutureOr<FutureOr<dynamic>>staticField3;
   synthetic constructor •() → self::Class1
     ;
-  method instanceMethod1([FutureOr<dynamic>parameter1, FutureOr<core::int?>parameter2, FutureOr<FutureOr<dynamic>>parameter3]) → void
+  method instanceMethod1([FutureOr<dynamic>parameter1 = null, FutureOr<core::int?>parameter2 = null, FutureOr<FutureOr<dynamic>>parameter3 = null]) → void
     ;
-  method instanceMethod2({FutureOr<dynamic>parameter1, FutureOr<core::int?>parameter2, FutureOr<FutureOr<dynamic>>parameter3}) → void
+  method instanceMethod2({FutureOr<dynamic>parameter1 = null, FutureOr<core::int?>parameter2 = null, FutureOr<FutureOr<dynamic>>parameter3 = null}) → void
     ;
   static method staticMethod1([FutureOr<dynamic>parameter1, FutureOr<core::int?>parameter2, FutureOr<FutureOr<dynamic>>parameter3]) → void
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
index 36bd369..d9e0522 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
@@ -14,7 +14,7 @@
   covariant-by-class final field self::B<self::A::X%> b;
   synthetic constructor •() → self::A<self::A::X%>
     ;
-  method foo([covariant-by-class FutureOr<self::A::X%>? x]) → dynamic
+  method foo([covariant-by-class FutureOr<self::A::X%>? x = null]) → dynamic
     ;
 }
 class C<T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/issue40954.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue40954.dart.weak.outline.expect
index 35e6233..2869359 100644
--- a/pkg/front_end/testcases/nnbd/issue40954.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue40954.dart.weak.outline.expect
@@ -52,9 +52,9 @@
     ;
   static method test2(dynamic v, {self::A a}) → void
     ;
-  method test11(dynamic v, [self::A a]) → void
+  method test11(dynamic v, [self::A a = null]) → void
     ;
-  method test22(dynamic v, {self::A a}) → void
+  method test22(dynamic v, {self::A a = null}) → void
     ;
 }
 static method test1(dynamic v, [self::A a]) → void
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
index 48dab81..1ca1edd 100644
--- a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.outline.expect
@@ -88,23 +88,23 @@
 class A extends core::Object {
   final field core::int i;
   static final field dynamic _redirecting# = <dynamic>[self::A::factory3, self::A::factory4, self::A::factory5, self::A::factory6, self::A::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i]) → self::A
+  constructor constructor1([core::int i = null]) → self::A
     ;
-  constructor constructor2({core::int i}) → self::A
+  constructor constructor2({core::int i = null}) → self::A
     ;
-  constructor constructor3([core::int i]) → self::A
+  constructor constructor3([core::int i = null]) → self::A
     ;
-  constructor constructor4({core::int i}) → self::A
+  constructor constructor4({core::int i = null}) → self::A
     ;
-  constructor constructor5([core::int? i]) → self::A
+  constructor constructor5([core::int? i = null]) → self::A
     ;
-  constructor constructor6({core::int? i}) → self::A
+  constructor constructor6({core::int? i = null}) → self::A
     ;
-  constructor constructor7({required core::int i}) → self::A
+  constructor constructor7({required core::int i = null}) → self::A
     ;
-  external constructor constructor8([core::int i]) → self::A
+  external constructor constructor8([core::int i = null]) → self::A
     ;
-  external constructor constructor9({core::int i}) → self::A
+  external constructor constructor9({core::int i = null}) → self::A
     ;
   static factory factory3([core::int i]) → self::A
     return new self::A::constructor3(i);
@@ -120,45 +120,45 @@
     ;
   static factory factory9({core::int i}) → self::A
     ;
-  method method3([core::int i]) → dynamic
+  method method3([core::int i = null]) → dynamic
     ;
-  method method4({core::int i}) → dynamic
+  method method4({core::int i = null}) → dynamic
     ;
-  method method5([core::int? i]) → dynamic
+  method method5([core::int? i = null]) → dynamic
     ;
-  method method6({core::int? i}) → dynamic
+  method method6({core::int? i = null}) → dynamic
     ;
-  method method7({required core::int i}) → dynamic
+  method method7({required core::int i = null}) → dynamic
     ;
-  external method method8([core::int i]) → dynamic;
-  external method method9({core::int i}) → dynamic;
+  external method method8([core::int i = null]) → dynamic;
+  external method method9({core::int i = null}) → dynamic;
 }
 abstract class B extends core::Object {
   field core::int i;
   synthetic constructor •() → self::B
     ;
-  abstract method method3([core::int i]) → dynamic;
-  abstract method method4({core::int i}) → dynamic;
-  abstract method method5([core::int? i]) → dynamic;
-  abstract method method6({core::int? i}) → dynamic;
-  abstract method method7({required core::int i}) → dynamic;
+  abstract method method3([core::int i = null]) → dynamic;
+  abstract method method4({core::int i = null}) → dynamic;
+  abstract method method5([core::int? i = null]) → dynamic;
+  abstract method method6({core::int? i = null}) → dynamic;
+  abstract method method7({required core::int i = null}) → dynamic;
 }
 class C extends core::Object implements self::B {
   field core::int i;
   static final field dynamic _redirecting# = <dynamic>[self::C::factory3, self::C::factory4, self::C::factory5, self::C::factory6, self::C::factory7]/*isLegacy*/;
-  constructor constructor1([core::int i]) → self::C
+  constructor constructor1([core::int i = null]) → self::C
     ;
-  constructor constructor2({core::int i}) → self::C
+  constructor constructor2({core::int i = null}) → self::C
     ;
-  constructor constructor3([core::int i]) → self::C
+  constructor constructor3([core::int i = null]) → self::C
     ;
-  constructor constructor4({core::int i}) → self::C
+  constructor constructor4({core::int i = null}) → self::C
     ;
-  constructor constructor5([core::int? i]) → self::C
+  constructor constructor5([core::int? i = null]) → self::C
     ;
-  constructor constructor6({core::int? i}) → self::C
+  constructor constructor6({core::int? i = null}) → self::C
     ;
-  constructor constructor7({required core::int i}) → self::C
+  constructor constructor7({required core::int i = null}) → self::C
     ;
   static factory factory3([core::int i]) → self::C
     return new self::C::constructor3(i);
@@ -174,15 +174,15 @@
     ;
   static factory factory9({core::int i}) → self::C
     ;
-  method method3([core::int i]) → dynamic
+  method method3([core::int i = null]) → dynamic
     ;
-  method method4({core::int i}) → dynamic
+  method method4({core::int i = null}) → dynamic
     ;
-  method method5([core::int? i]) → dynamic
+  method method5([core::int? i = null]) → dynamic
     ;
-  method method6({core::int? i}) → dynamic
+  method method6({core::int? i = null}) → dynamic
     ;
-  method method7({required core::int i}) → dynamic
+  method method7({required core::int i = null}) → dynamic
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
index 110f141..62b1633 100644
--- a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.outline.expect
@@ -17,7 +17,7 @@
 
 class C extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::redirect]/*isLegacy*/;
-  constructor gen({core::int i}) → self::C
+  constructor gen({core::int i = null}) → self::C
     ;
   static factory fact({core::int i}) → self::C
     ;
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.outline.expect
index e04c31a..b6d9901 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.outline.expect
@@ -4,9 +4,9 @@
 
 class A extends core::Object {
   field ({required s: core::String}) → void f;
-  constructor •({required core::int x}) → self::A
+  constructor •({required core::int x = null}) → self::A
     ;
-  method foo({required core::int y}) → dynamic
+  method foo({required core::int y = null}) → dynamic
     ;
 }
 static field ({required s: core::String}) → void g;
diff --git a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.outline.expect
index 1570628..4e356a4 100644
--- a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 
 class Class extends core::Object {
   field self::Class? field;
-  constructor •([self::Class? field]) → self::Class
+  constructor •([self::Class? field = null]) → self::Class
     ;
   get getter1() → self::Class
     ;
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
index 3b7cf09..ede32af 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
@@ -20,7 +20,7 @@
     return super.{core::Object::noSuchMethod}(invocation);
   forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
     return super.{core::Object::==}(o);
-  abstract method toString({core::Object o}) → core::String;
+  abstract method toString({core::Object o = null}) → core::String;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
index 1dcea19..fcc5fcb 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
@@ -155,9 +155,9 @@
   abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
   abstract method method5a(core::int x, core::num y) → void;
   abstract method method5b(core::int x, core::num y) → void;
-  abstract method method6a({core::int x, core::num y}) → void;
-  abstract method method6b({core::num y, core::int x}) → void;
-  method method7a(core::Object? o, {core::Object? named}) → core::Object?
+  abstract method method6a({core::int x = null, core::num y = null}) → void;
+  abstract method method6b({core::num y = null, core::int x = null}) → void;
+  method method7a(core::Object? o, {core::Object? named = null}) → core::Object?
     ;
   abstract get getter1a() → core::Object;
   abstract get getter1b() → core::String;
@@ -202,9 +202,9 @@
   abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
   abstract method method5a(core::num x, core::int y) → void;
   abstract method method5b(core::num x, core::int y) → void;
-  abstract method method6a({core::Object x, core::num y}) → void;
-  abstract method method6b({core::int x, core::Object y}) → void;
-  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named}) → FutureOr<dynamic>;
+  abstract method method6a({core::Object x = null, core::num y = null}) → void;
+  abstract method method6b({core::int x = null, core::Object y = null}) → void;
+  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named = null}) → FutureOr<dynamic>;
   abstract get getter1a() → core::String;
   abstract get getter1b() → core::Object;
   abstract get getter1c() → core::int;
@@ -254,14 +254,14 @@
   abstract method method2a(core::Object? x) → void;
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
-  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y]) → void;
+  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = null]) → void;
   abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
-  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z]) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z = null]) → void;
   abstract method method5a(invalid-type x, invalid-type y) → void;
-  abstract method method5b(core::num x, core::num y, [invalid-type z]) → void;
-  abstract method method6a({core::Object x, core::num y}) → void;
-  abstract method method6b({core::int x, core::Object y, dynamic z}) → void;
-  abstract method method7a(core::Object? o, {core::Object? named}) → core::Object?;
+  abstract method method5b(core::num x, core::num y, [invalid-type z = null]) → void;
+  abstract method method6a({core::Object x = null, core::num y = null}) → void;
+  abstract method method6b({core::int x = null, core::Object y = null, dynamic z = null}) → void;
+  abstract method method7a(core::Object? o, {core::Object? named = null}) → core::Object?;
   abstract get getter1a() → core::String;
   abstract get getter1b() → core::String;
   abstract get getter1c() → invalid-type;
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
index 1a1e26d..ede4192 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
@@ -50,11 +50,11 @@
 class Class extends core::Object {
   synthetic constructor •() → self2::Class
     ;
-  method method([core::int i]) → void
+  method method([core::int i = null]) → void
     ;
   @_in::patch
-  external method patchedMethod([core::int i]) → void;
-  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i]) → void
+  external method patchedMethod([core::int i = null]) → void;
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = null]) → void
     ;
 }
 static method method([core::int i]) → void
diff --git a/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
index 91153eb..d2d1598 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
@@ -15,18 +15,18 @@
 class Class extends core::Object {
   synthetic constructor •() → self::Class
     ;
-  method method({core::int a = 42, required core::int b, required final core::int c, required covariant-by-declaration final core::int d}) → dynamic
+  method method({core::int a = 42, required core::int b = null, required final core::int c = null, required covariant-by-declaration final core::int d = null}) → dynamic
     ;
 }
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  abstract method foo({core::int x}) → dynamic;
+  abstract method foo({core::int x = null}) → dynamic;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  method foo({core::int x}) → dynamic
+  method foo({core::int x = null}) → dynamic
     ;
 }
 class C extends self::A {
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.outline.expect
index 02e531b..245c869 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   field core::int zero;
   field core::int? zeroOrNull;
-  constructor •(core::int zero, [core::int? zeroOrNull]) → self::A
+  constructor •(core::int zero, [core::int? zeroOrNull = null]) → self::A
     ;
 }
 class Foo extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.outline.expect
index cdeab6f..b48701e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.outline.expect
@@ -149,7 +149,7 @@
 class Super extends core::Object {
   synthetic constructor •() → in_2::Super
     ;
-  method nullabilityMethod(core::int i, {required core::int j}) → core::int
+  method nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
     ;
   get nullabilityGetter() → core::int
     ;
@@ -161,13 +161,13 @@
 abstract class SuperExtra extends core::Object {
   synthetic constructor •() → in_2::SuperExtra
     ;
-  method optionalArgumentsMethod(core::int i, [core::int? j]) → core::int
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
     ;
 }
 abstract class SuperQ extends core::Object {
   synthetic constructor •() → in_2::SuperQ
     ;
-  method nullabilityMethod(core::int? i, {core::int? j}) → core::int?
+  method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
     ;
   get nullabilityGetter() → core::int?
     ;
@@ -224,7 +224,7 @@
   const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
     : super core::Object::•()
     ;
-  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int i, {required core::int j}) → core::int
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
     ;
   get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int
     ;
@@ -252,7 +252,7 @@
   const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
     : super core::Object::•()
     ;
-  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int? i, {core::int? j}) → core::int?
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
     ;
   get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int?
     ;
@@ -276,3 +276,7 @@
     ;
   abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
 }
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect
index 1f01c40..b620e23 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect
@@ -221,9 +221,9 @@
   synthetic constructor •() → in_::LegacyClass*
     : super in_2::Super::•()
     ;
-  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j}) → core::int*; -> in_2::Super::nullabilityMethod
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::Super::nullabilityMethod
   abstract member-signature get nullabilityGetter() → core::int*; -> in_2::Super::nullabilityGetter
-  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -240,9 +240,9 @@
   synthetic constructor •() → in_::LegacyClassQ*
     : super in_2::SuperQ::•()
     ;
-  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j}) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::SuperQ::nullabilityMethod
   abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
-  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -259,7 +259,7 @@
   const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
     : super core::Object::•()
     ;
-  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j}) → core::int*
+  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*
     return super.{in_2::Super::nullabilityMethod}(i, j: j);
   mixin-super-stub get nullabilityGetter() → core::int*
     return super.{in_2::Super::nullabilityGetter};
@@ -282,13 +282,13 @@
   synthetic constructor •() → in_::LegacyMixedIn*
     : super in_::_LegacyMixedIn&Object&Super::•()
     ;
-  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
 }
 abstract class _LegacyMixedInQ&Object&SuperQ = core::Object with in_2::SuperQ /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
     : super core::Object::•()
     ;
-  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j}) → core::int*
+  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*
     return super.{in_2::SuperQ::nullabilityMethod}(i, j: j);
   mixin-super-stub get nullabilityGetter() → core::int*
     return super.{in_2::SuperQ::nullabilityGetter};
@@ -311,5 +311,9 @@
   synthetic constructor •() → in_::LegacyMixedInQ*
     : super in_::_LegacyMixedInQ&Object&SuperQ::•()
     ;
-  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+constants  {
+  #C1 = null
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.outline.expect
index 386b09f..fbbade0 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.outline.expect
@@ -230,7 +230,7 @@
 class Super extends core::Object {
   synthetic constructor •() → in_2::Super
     ;
-  method nullabilityMethod(core::int i, {required core::int j}) → core::int
+  method nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
     ;
   get nullabilityGetter() → core::int
     ;
@@ -242,13 +242,13 @@
 abstract class SuperExtra extends core::Object {
   synthetic constructor •() → in_2::SuperExtra
     ;
-  method optionalArgumentsMethod(core::int i, [core::int? j]) → core::int
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
     ;
 }
 abstract class SuperQ extends core::Object {
   synthetic constructor •() → in_2::SuperQ
     ;
-  method nullabilityMethod(core::int? i, {core::int? j}) → core::int?
+  method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
     ;
   get nullabilityGetter() → core::int?
     ;
@@ -257,3 +257,7 @@
   method optionalArgumentsMethod(core::int? i) → core::int?
     ;
 }
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.outline.expect
index 7e98c01..2ea0668 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.outline.expect
@@ -144,7 +144,7 @@
 abstract class SuperExtra extends core::Object {
   synthetic constructor •() → in_2::SuperExtra
     ;
-  method optionalArgumentsMethod(core::int i, [core::int? j]) → core::int
+  method optionalArgumentsMethod(core::int i, [core::int? j = null]) → core::int
     ;
 }
 abstract class SuperQ extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
index 8ed2bcc..a036c93 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
@@ -46,7 +46,7 @@
   final field iss::Iterable::E% element;
   constructor •(iss::Iterable::E% element) → iss::Iterable<iss::Iterable::E%>
     ;
-  method singleWhere((iss::Iterable::E%) → core::bool test, {covariant-by-class () →? iss::Iterable::E% orElse}) → iss::Iterable::E%
+  method singleWhere((iss::Iterable::E%) → core::bool test, {covariant-by-class () →? iss::Iterable::E% orElse = null}) → iss::Iterable::E%
     ;
 }
 static method foo(() → iss::Map<core::String, core::String> f) → void
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect
index 35340a8..dbabb6a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect
@@ -14,7 +14,7 @@
   synthetic constructor •() → self::_TestSchedulerBinding&BindingBase&SchedulerBinding*
     : super fou::BindingBase::•()
     ;
-  abstract member-signature method registerSignalServiceExtension({core::String* name, () →* asy::Future<Null>* callback}) → void; -> fou::BindingBase::registerSignalServiceExtension
+  abstract member-signature method registerSignalServiceExtension({core::String* name = #C1, () →* asy::Future<Null>* callback = #C1}) → void; -> fou::BindingBase::registerSignalServiceExtension
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -37,3 +37,7 @@
     ;
 }
 static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.outline.expect
index 135d07e..6bee12f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.outline.expect
@@ -54,7 +54,7 @@
 abstract class BindingBase extends core::Object {
   synthetic constructor •() → fou::BindingBase
     ;
-  method registerSignalServiceExtension({required core::String name, required () → asy::Future<Null> callback}) → void
+  method registerSignalServiceExtension({required core::String name = #C1, required () → asy::Future<Null> callback = #C1}) → void
     ;
 }
 
@@ -133,3 +133,8 @@
 additionalExports = (ser::ServicesBinding)
 
 export "org-dartlang-testcase:///services_binding_lib.dart";
+
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect
index e31e167..25f2899 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect
@@ -110,10 +110,11 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant-by-declaration core::String* a, core::num* b]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2, core::num* b = #C2]) → dynamic;
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = "hello"
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
index 794d06d..7f95ece 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
@@ -147,7 +147,7 @@
 abstract class C2 extends core::Object {
   synthetic constructor •() → mai::C2
     ;
-  abstract method method2([core::String a]) → dynamic;
+  abstract method method2([core::String a = #C2]) → dynamic;
 }
 abstract class C3 extends core::Object implements mai::C1, mai::C2 {
   synthetic constructor •() → mai::C3
@@ -157,7 +157,7 @@
 abstract class C4 extends core::Object {
   synthetic constructor •() → mai::C4
     ;
-  abstract method method2([covariant-by-declaration core::String a]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
@@ -167,9 +167,10 @@
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
     ;
-  abstract method method2([core::String a, core::num b]) → dynamic;
+  abstract method method2([core::String a = #C2, core::num b = #C2]) → dynamic;
 }
 
 constants  {
   #C1 = "hello"
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
index 4e1eec5..e07fd30 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
@@ -147,7 +147,7 @@
 abstract class C2 extends core::Object {
   synthetic constructor •() → mai::C2
     ;
-  abstract method method2([core::String a]) → dynamic;
+  abstract method method2([core::String a = null]) → dynamic;
 }
 abstract class C3 extends core::Object implements mai::C1, mai::C2 {
   synthetic constructor •() → mai::C3
@@ -157,7 +157,7 @@
 abstract class C4 extends core::Object {
   synthetic constructor •() → mai::C4
     ;
-  abstract method method2([covariant-by-declaration core::String a]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a = null]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
@@ -167,5 +167,5 @@
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
     ;
-  abstract method method2([core::String a, core::num b]) → dynamic;
+  abstract method method2([core::String a = null, core::num b = null]) → dynamic;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.outline.expect
index e706863..09e5ea1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.outline.expect
@@ -18,17 +18,17 @@
     ;
   method method6a(core::int* a, core::int* b) → core::int*
     ;
-  method method6b(core::int* a, [core::int* b]) → core::int*
+  method method6b(core::int* a, [core::int* b = null]) → core::int*
     ;
-  method method6c([core::int* a, core::int* b]) → core::int*
+  method method6c([core::int* a = null, core::int* b = null]) → core::int*
     ;
   method method8a(core::int* a, {core::int* b = 0}) → core::int*
     ;
-  method method8b({core::int* a, core::int* b = 0}) → core::int*
+  method method8b({core::int* a = null, core::int* b = 0}) → core::int*
     ;
-  method method10a(core::int* a, {core::int* b}) → core::int*
+  method method10a(core::int* a, {core::int* b = null}) → core::int*
     ;
-  method method10b({core::int* a, core::int* b}) → core::int*
+  method method10b({core::int* a = null, core::int* b = null}) → core::int*
     ;
   get getter3() → core::int*
     ;
@@ -101,19 +101,19 @@
   abstract method method3() → core::int;
   abstract method method4() → core::int?;
   abstract method method5a(core::int a, core::int? b) → core::int;
-  abstract method method5b(core::int a, [core::int? b]) → core::int;
-  abstract method method5c([core::int a = 0, core::int? b]) → core::int;
+  abstract method method5b(core::int a, [core::int? b = null]) → core::int;
+  abstract method method5c([core::int a = 0, core::int? b = null]) → core::int;
   abstract method method6a(core::int? a, core::int b) → core::int?;
   abstract method method6b(core::int? a, [core::int b = 0]) → core::int?;
-  abstract method method6c([core::int? a, core::int b = 0]) → core::int?;
-  abstract method method7a(core::int a, {core::int? b}) → core::int;
-  abstract method method7b({core::int a = 0, core::int? b}) → core::int;
+  abstract method method6c([core::int? a = null, core::int b = 0]) → core::int?;
+  abstract method method7a(core::int a, {core::int? b = null}) → core::int;
+  abstract method method7b({core::int a = 0, core::int? b = null}) → core::int;
   abstract method method8a(core::int? a, {core::int b = 0}) → core::int?;
-  abstract method method8b({core::int? a, core::int b = 0}) → core::int?;
-  abstract method method9a(core::int a, {required core::int? b}) → core::int;
-  abstract method method9b({required core::int a, required core::int? b}) → core::int;
-  abstract method method10a(core::int? a, {required core::int b}) → core::int?;
-  abstract method method10b({required core::int? a, required core::int b}) → core::int?;
+  abstract method method8b({core::int? a = null, core::int b = 0}) → core::int?;
+  abstract method method9a(core::int a, {required core::int? b = null}) → core::int;
+  abstract method method9b({required core::int a = null, required core::int? b = null}) → core::int;
+  abstract method method10a(core::int? a, {required core::int b = null}) → core::int?;
+  abstract method method10b({required core::int? a = null, required core::int b = null}) → core::int?;
   abstract get getter1() → core::int?;
   abstract get getter2() → core::int;
   abstract get getter3() → core::int;
@@ -152,17 +152,17 @@
     ;
   method method5a(core::int a, core::int? b) → core::int
     ;
-  method method5b(core::int a, [core::int? b]) → core::int
+  method method5b(core::int a, [core::int? b = null]) → core::int
     ;
-  method method5c([core::int a = 0, core::int? b]) → core::int
+  method method5c([core::int a = 0, core::int? b = null]) → core::int
     ;
-  method method7a(core::int a, {core::int? b}) → core::int
+  method method7a(core::int a, {core::int? b = null}) → core::int
     ;
-  method method7b({core::int a = 0, core::int? b}) → core::int
+  method method7b({core::int a = 0, core::int? b = null}) → core::int
     ;
-  method method9a(core::int a, {required core::int? b}) → core::int
+  method method9a(core::int a, {required core::int? b = null}) → core::int
     ;
-  method method9b({required core::int a, required core::int? b}) → core::int
+  method method9b({required core::int a = null, required core::int? b = null}) → core::int
     ;
   get getter1() → core::int
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.outline.expect
index 01c1893..9ef4cfb 100644
--- a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.outline.expect
@@ -15,17 +15,17 @@
   abstract method method1() → core::int;
   abstract method method2() → core::int?;
   abstract method method3a(core::int a, core::int b) → core::int;
-  abstract method method3b(core::int a, [core::int b]) → core::int;
-  abstract method method3c([core::int a, core::int b]) → core::int;
+  abstract method method3b(core::int a, [core::int b = null]) → core::int;
+  abstract method method3c([core::int a = null, core::int b = null]) → core::int;
   abstract method method4a(core::int? a, core::int? b) → core::int?;
-  abstract method method4b(core::int? a, [core::int? b]) → core::int?;
-  abstract method method4c([core::int? a, core::int? b]) → core::int?;
+  abstract method method4b(core::int? a, [core::int? b = null]) → core::int?;
+  abstract method method4c([core::int? a = null, core::int? b = null]) → core::int?;
   abstract method method5a(core::int a, {core::int b = 0}) → core::int;
   abstract method method5b({core::int a = 0, core::int b = 0}) → core::int;
-  abstract method method5c({required core::int a, required core::int b}) → core::int;
-  abstract method method6a(core::int? a, {core::int? b}) → core::int?;
-  abstract method method6b({core::int? a, core::int? b}) → core::int?;
-  abstract method method6c({required core::int? a, required core::int? b}) → core::int?;
+  abstract method method5c({required core::int a = null, required core::int b = null}) → core::int;
+  abstract method method6a(core::int? a, {core::int? b = null}) → core::int?;
+  abstract method method6b({core::int? a = null, core::int? b = null}) → core::int?;
+  abstract method method6c({required core::int? a = null, required core::int? b = null}) → core::int?;
   abstract get getter1() → core::int;
   abstract get getter2() → core::int?;
   abstract set setter1(core::int value) → void;
@@ -107,21 +107,21 @@
     ;
   method method4a(core::int? a, core::int? b) → core::int?
     ;
-  method method4b(core::int? a, [core::int? b]) → core::int?
+  method method4b(core::int? a, [core::int? b = null]) → core::int?
     ;
-  method method4c([core::int? a, core::int? b]) → core::int?
+  method method4c([core::int? a = null, core::int? b = null]) → core::int?
     ;
   method method5a(core::int a, {core::int b = 0}) → core::int
     ;
   method method5b({core::int a = 0, core::int b = 0}) → core::int
     ;
-  method method5c({required core::int a, required core::int b}) → core::int
+  method method5c({required core::int a = null, required core::int b = null}) → core::int
     ;
-  method method6a(core::int? a, {core::int? b}) → core::int?
+  method method6a(core::int? a, {core::int? b = null}) → core::int?
     ;
-  method method6b({core::int? a, core::int? b}) → core::int?
+  method method6b({core::int? a = null, core::int? b = null}) → core::int?
     ;
-  method method6c({required core::int? a, required core::int? b}) → core::int?
+  method method6c({required core::int? a = null, required core::int? b = null}) → core::int?
     ;
   get getter1() → core::int
     ;
@@ -189,27 +189,27 @@
     ;
   method method3a(core::int* a, core::int* b) → core::int*
     ;
-  method method3b(core::int* a, [core::int* b]) → core::int*
+  method method3b(core::int* a, [core::int* b = null]) → core::int*
     ;
-  method method3c([core::int* a, core::int* b]) → core::int*
+  method method3c([core::int* a = null, core::int* b = null]) → core::int*
     ;
   method method4a(core::int* a, core::int* b) → core::int*
     ;
-  method method4b(core::int* a, [core::int* b]) → core::int*
+  method method4b(core::int* a, [core::int* b = null]) → core::int*
     ;
-  method method4c([core::int* a, core::int* b]) → core::int*
+  method method4c([core::int* a = null, core::int* b = null]) → core::int*
     ;
-  method method5a(core::int* a, {core::int* b}) → core::int*
+  method method5a(core::int* a, {core::int* b = null}) → core::int*
     ;
-  method method5b({core::int* a, core::int* b}) → core::int*
+  method method5b({core::int* a = null, core::int* b = null}) → core::int*
     ;
-  method method5c({core::int* a, core::int* b}) → core::int*
+  method method5c({core::int* a = null, core::int* b = null}) → core::int*
     ;
-  method method6a(core::int* a, {core::int* b}) → core::int*
+  method method6a(core::int* a, {core::int* b = null}) → core::int*
     ;
-  method method6b({core::int* a, core::int* b}) → core::int*
+  method method6b({core::int* a = null, core::int* b = null}) → core::int*
     ;
-  method method6c({core::int* a, core::int* b}) → core::int*
+  method method6c({core::int* a = null, core::int* b = null}) → core::int*
     ;
   get getter1() → core::int*
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect
index f168a4e..e52566f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect
@@ -11,7 +11,7 @@
   synthetic constructor •() → self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin
     : super mai::RenderProxyBox::•()
     ;
-  mixin-super-stub method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  mixin-super-stub method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     return super.{mai::RenderProxyBoxMixin::hitTestChildren}(result, position: position);
 }
 abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin = self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin with self::RenderAnimatedOpacityMixin<mai::RenderBox> /*isAnonymousMixin*/  {
@@ -27,3 +27,7 @@
 static method main() → dynamic {
   new self::RenderAnimatedOpacity::•();
 }
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
index c282428..1d90524 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
@@ -64,9 +64,9 @@
 abstract class RenderBox extends mai::RenderObject {
   synthetic constructor •() → mai::RenderBox
     ;
-  method hitTest(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  method hitTest(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     ;
-  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     ;
 }
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
@@ -79,8 +79,8 @@
     ;
 }
 abstract class RenderProxyBoxMixin<T extends mai::RenderBox> extends mai::_RenderProxyBoxMixin&RenderBox&RenderObjectWithChildMixin<mai::RenderProxyBoxMixin::T> /*isMixinDeclaration*/  {
-  @#C1
-  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  @#C2
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     ;
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
@@ -95,8 +95,8 @@
   synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin
     : super mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin::•()
     ;
-  @#C1
-  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+  @#C2
+  method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position = #C1}) → core::bool
     ;
 }
 class RenderProxyBox extends mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin {
@@ -105,5 +105,6 @@
 }
 
 constants  {
-  #C1 = core::_Override {}
+  #C1 = null
+  #C2 = core::_Override {}
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.outline.expect
index d463ddf..a0aeef1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.outline.expect
@@ -48,7 +48,7 @@
 abstract class C2 extends core::Object {
   synthetic constructor •() → self::C2*
     ;
-  abstract method method(core::int* i, {dynamic optional}) → core::int*;
+  abstract method method(core::int* i, {dynamic optional = null}) → core::int*;
   abstract method genericMethod1<T extends core::Object* = dynamic>(self::C2::genericMethod1::T* t) → self::C2::genericMethod1::T*;
   abstract method genericMethod2<T extends core::Object*>(self::C2::genericMethod2::T* t) → self::C2::genericMethod2::T*;
   abstract method genericMethod3<T extends core::Object*>(self::C2::genericMethod3::T* t) → self::C2::genericMethod3::T*;
@@ -93,7 +93,7 @@
 abstract class C1 extends core::Object {
   synthetic constructor •() → nsm::C1
     ;
-  abstract method method(core::int? i, {dynamic optional}) → core::int;
+  abstract method method(core::int? i, {dynamic optional = null}) → core::int;
   abstract method genericMethod1<T extends core::Object? = dynamic>(nsm::C1::genericMethod1::T% t) → nsm::C1::genericMethod1::T%;
   abstract method genericMethod2<T extends core::Object?>(nsm::C1::genericMethod2::T% t) → nsm::C1::genericMethod2::T%;
   abstract method genericMethod3<T extends core::Object>(nsm::C1::genericMethod3::T t) → nsm::C1::genericMethod3::T;
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.outline.expect
index 0817c84..327d98f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.outline.expect
@@ -25,7 +25,7 @@
 class B extends core::Object {
   synthetic constructor •() → self::B
     ;
-  method test_default({core::int? i}) → void
+  method test_default({core::int? i = null}) → void
     ;
   method test_nondefault({core::int? i = 1}) → void
     ;
@@ -33,11 +33,11 @@
 class A extends self::B implements req::C {
   synthetic constructor •() → self::A
     ;
-  method test_default({required core::int? i}) → void
+  method test_default({required core::int? i = null}) → void
     ;
-  method test_nondefault({required core::int? i}) → void
+  method test_nondefault({required core::int? i = null}) → void
     ;
-  method test_legacy({required core::int? i}) → void
+  method test_legacy({required core::int? i = null}) → void
     ;
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
@@ -51,7 +51,7 @@
 class C extends core::Object {
   synthetic constructor •() → req::C*
     ;
-  method test_legacy({core::int* i}) → void
+  method test_legacy({core::int* i = null}) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
index 1e8de64..a448ffc 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
@@ -8,7 +8,7 @@
 class Super extends core::Object {
   synthetic constructor •() → self::Super
     ;
-  method method({required covariant-by-declaration core::int named}) → void
+  method method({required covariant-by-declaration core::int named = null}) → void
     ;
 }
 abstract class _Class&Super&Mixin = self::Super with req::Mixin /*isAnonymousMixin*/  {
@@ -26,7 +26,7 @@
 class SubClass extends self::Class {
   synthetic constructor •() → self::SubClass
     ;
-  method method({required covariant-by-declaration core::int named}) → void
+  method method({required covariant-by-declaration core::int named = null}) → void
     ;
 }
 static method main() → dynamic
@@ -37,7 +37,7 @@
 import "dart:core" as core;
 
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
-  method method({core::int* named}) → void
+  method method({core::int* named = null}) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
index d7affcd..344c08e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.outline.expect
@@ -43,7 +43,7 @@
 class MockCat3 extends self::MockCat2 implements self::Cat {
   synthetic constructor •() → self::MockCat3*
     ;
-  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount}) → core::bool*
+  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = null}) → core::bool*
     return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#eatFood, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#amount: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
 }
 class MockCat4 extends self::MockCat2 implements self::HungryCat {
@@ -55,7 +55,7 @@
 abstract class HungryCat extends core::Object {
   synthetic constructor •() → self::HungryCat*
     ;
-  abstract method eatFood(core::String* food, {core::double* amount, core::double* yetAnother}) → core::bool*;
+  abstract method eatFood(core::String* food, {core::double* amount = null, core::double* yetAnother = null}) → core::bool*;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
index 595f2f9..8be6aa2 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.outline.expect
@@ -10,7 +10,7 @@
     ;
   abstract set foo(core::int* value) → void;
   abstract get bar() → core::int*;
-  abstract method baz(core::int* x, {core::String* y, core::double* z}) → void;
+  abstract method baz(core::int* x, {core::String* y = null, core::double* z = null}) → void;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
index d282494..d6cfde1 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.outline.expect
@@ -44,7 +44,7 @@
 class B extends core::Object {
   synthetic constructor •() → self::B*
     ;
-  method foo(core::int* x, {core::int* y}) → dynamic
+  method foo(core::int* x, {core::int* y = null}) → dynamic
     ;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -83,7 +83,7 @@
 class E extends self::D {
   synthetic constructor •() → self::E*
     ;
-  abstract method foo(core::int* x, {core::int* y}) → dynamic;
+  abstract method foo(core::int* x, {core::int* y = null}) → dynamic;
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
index d5ecfdf..f427dbb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
@@ -23,7 +23,7 @@
     ;
   method f1(covariant-by-class core::int* x) → void
     ;
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y]) → void
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = null]) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -41,7 +41,7 @@
     ;
   method f1(covariant-by-class core::int* x) → void
     ;
-  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y]) → void
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = null]) → void
     ;
 }
 static method g1(self::C<core::num*>* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
index 2528b84..232826f 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
@@ -26,8 +26,8 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f([covariant-by-class self::I::T* x]) → void;
-  abstract method g({covariant-by-class self::I::T* x}) → void;
+  abstract method f([covariant-by-class self::I::T* x = null]) → void;
+  abstract method g({covariant-by-class self::I::T* x = null}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
index 06e1b40..3139116 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
@@ -7,7 +7,7 @@
     ;
   method f(covariant-by-class self::B::T* x) → void
     ;
-  method g({covariant-by-class self::B::T* x}) → void
+  method g({covariant-by-class self::B::T* x = null}) → void
     ;
   method h<covariant-by-class U extends self::B::T*>() → void
     ;
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
index fd3f672..e490058 100644
--- 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
@@ -67,7 +67,7 @@
     ;
 }
 class C5 extends self::S5 {
-  constructor •([core::int x]) → self::C5
+  constructor •([core::int x = null]) → self::C5
     ;
 }
 class S6 extends core::Object {
@@ -77,11 +77,11 @@
 }
 class C6 extends self::S6 {
   field core::int? b;
-  constructor •([core::int? x]) → self::C6
+  constructor •([core::int? x = null]) → self::C6
     ;
 }
 class D6 extends self::C6 {
-  constructor •([core::int x]) → self::D6
+  constructor •([core::int x = null]) → self::D6
     ;
 }
 class S7 extends core::Object {
@@ -134,7 +134,7 @@
     ;
 }
 class Bp extends self::Ap {
-  constructor •([core::int x]) → self::Bp
+  constructor •([core::int x = null]) → self::Bp
     ;
   constructor req(core::int x) → self::Bp
     ;
@@ -144,9 +144,9 @@
     ;
 }
 class Bn extends self::An {
-  constructor •({core::int x}) → self::Bn
+  constructor •({core::int x = null}) → self::Bn
     ;
-  constructor req({required core::int x}) → self::Bn
+  constructor req({required core::int x = null}) → self::Bn
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect
index 00d1860..c9f3c12 100644
--- a/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.weak.outline.expect
@@ -20,15 +20,15 @@
     ;
 }
 class C21 extends self::S2 {
-  constructor •({dynamic foo, core::String one = "1", dynamic bar, dynamic baz, core::int three = 3, core::num five = 3.14}) → self::C21
+  constructor •({dynamic foo = null, core::String one = "1", dynamic bar = null, dynamic baz = null, core::int three = 3, core::num five = 3.14}) → self::C21
     ;
 }
 class C22 extends self::S2 {
-  constructor •({dynamic foo, core::List<core::String> six = const <core::String>["six"], dynamic bar, dynamic baz, core::double four = 4.0, core::bool two = false}) → self::C22
+  constructor •({dynamic foo = null, core::List<core::String> six = const <core::String>["six"], dynamic bar = null, dynamic baz = null, core::double four = 4.0, core::bool two = false}) → self::C22
     ;
 }
 class C23 extends self::S2 {
-  constructor •({core::int three = 3, dynamic foo, core::String one = "1", core::double four = 4.0, dynamic bar, core::bool two = false, dynamic baz}) → self::C23
+  constructor •({core::int three = 3, dynamic foo = null, core::String one = "1", core::double four = 4.0, dynamic bar = null, core::bool two = false, dynamic baz = null}) → self::C23
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect
index 0c84a13..e395e95 100644
--- a/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect
@@ -51,17 +51,17 @@
     ;
 }
 class A1 extends core::Object {
-  constructor •({dynamic x, dynamic y}) → self::A1
+  constructor •({dynamic x = null, dynamic y = null}) → self::A1
     ;
 }
 class B1 extends self::A1 {
-  constructor foo({dynamic x}) → self::B1
+  constructor foo({dynamic x = null}) → self::B1
     ;
-  constructor bar({dynamic x}) → self::B1
+  constructor bar({dynamic x = null}) → self::B1
     ;
 }
 class A2 extends core::Object {
-  constructor •(dynamic x, {dynamic y}) → self::A2
+  constructor •(dynamic x, {dynamic y = null}) → self::A2
     ;
 }
 class B2 extends self::A2 {
@@ -71,28 +71,28 @@
     ;
 }
 class A3 extends core::Object {
-  constructor •(dynamic x, {dynamic y}) → self::A3
+  constructor •(dynamic x, {dynamic y = null}) → self::A3
     ;
 }
 class B3 extends self::A3 {
-  constructor foo({dynamic y}) → self::B3
+  constructor foo({dynamic y = null}) → self::B3
     ;
-  constructor bar({dynamic y}) → self::B3
+  constructor bar({dynamic y = null}) → self::B3
     ;
 }
 class A4 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({dynamic x, dynamic y}) → self::A4
+  const constructor •({dynamic x = null, dynamic y = null}) → self::A4
     : super core::Object::•()
     ;
 }
 class B4 extends self::A4 {
-  constructor foo({dynamic x}) → self::B4
+  constructor foo({dynamic x = null}) → self::B4
     ;
-  constructor bar({dynamic x}) → self::B4
+  constructor bar({dynamic x = null}) → self::B4
     ;
 }
 class A5 extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic x, {dynamic y}) → self::A5
+  const constructor •(dynamic x, {dynamic y = null}) → self::A5
     : super core::Object::•()
     ;
 }
@@ -103,26 +103,26 @@
     ;
 }
 class A6 extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic x, {dynamic y}) → self::A6
+  const constructor •(dynamic x, {dynamic y = null}) → self::A6
     : super core::Object::•()
     ;
 }
 class B6 extends self::A6 {
-  constructor foo({dynamic y}) → self::B6
+  constructor foo({dynamic y = null}) → self::B6
     ;
-  constructor bar({dynamic y}) → self::B6
+  constructor bar({dynamic y = null}) → self::B6
     ;
 }
 class A7 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({dynamic x, dynamic y}) → self::A7
+  const constructor •({dynamic x = null, dynamic y = null}) → self::A7
     : super core::Object::•()
     ;
 }
 class B7 extends self::A7 /*hasConstConstructor*/  {
-  const constructor foo({dynamic x}) → self::B7
+  const constructor foo({dynamic x = null}) → self::B7
     : super self::A7::•(y: new self::Test::foo(), x: x)
     ;
-  const constructor bar({dynamic x}) → self::B7
+  const constructor bar({dynamic x = null}) → self::B7
     : super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
@@ -130,7 +130,7 @@
     ;
 }
 class A8 extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic x, {dynamic y}) → self::A8
+  const constructor •(dynamic x, {dynamic y = null}) → self::A8
     : super core::Object::•()
     ;
 }
@@ -146,15 +146,15 @@
     ;
 }
 class A9 extends core::Object /*hasConstConstructor*/  {
-  const constructor •(dynamic x, {dynamic y}) → self::A9
+  const constructor •(dynamic x, {dynamic y = null}) → self::A9
     : super core::Object::•()
     ;
 }
 class B9 extends self::A9 /*hasConstConstructor*/  {
-  const constructor foo({dynamic y}) → self::B9
+  const constructor foo({dynamic y = null}) → self::B9
     : super self::A9::•(new self::Test::foo(), y: y)
     ;
-  const constructor bar({dynamic y}) → self::B9
+  const constructor bar({dynamic y = null}) → self::B9
     : super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const B9.bar({super.y}) : super(new Test.bar()); // Error.
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect
index bbbaeed..05ade25 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect
index 1acdeb6..f71d862 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin extends self::B<self::A> implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect
index bbbaeed..05ade25 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect
index bbbaeed..05ade25 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect
index 4a28ead1..3450f1e 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect
@@ -12,16 +12,16 @@
 }
 abstract class B<D extends core::Object? = dynamic> extends core::Object {
   final field self::B::D% field;
-  constructor •({required self::B::D% field}) → self::B<self::B::D%>
+  constructor •({required self::B::D% field = null}) → self::B<self::B::D%>
     ;
 }
 abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = null}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
 class C extends self::_C&B&Mixin {
-  constructor •({required self::A field}) → self::C
+  constructor •({required self::A field = null}) → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect
index 1acdeb6..f71d862 100644
--- a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class _C&B&Mixin extends self::B<self::A> implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
     : super self::B::•(field: field)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect
index 7a8c89a..2882ba7 100644
--- a/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect
@@ -13,13 +13,13 @@
     ;
 }
 class A2 extends core::Object {
-  constructor •({required core::String x}) → self::A2
+  constructor •({required core::String x = null}) → self::A2
     ;
 }
 class B2 extends self::A2 {
-  constructor one({required dynamic x}) → self::B2
+  constructor one({required dynamic x = null}) → self::B2
     ;
-  constructor two({required dynamic x}) → self::B2
+  constructor two({required dynamic x = null}) → self::B2
     ;
 }
 class A3 extends core::Object {
@@ -33,13 +33,13 @@
     ;
 }
 class A4 extends core::Object {
-  constructor •({required (core::double) → core::num f}) → self::A4
+  constructor •({required (core::double) → core::num f = null}) → self::A4
     ;
 }
 class B4 extends self::A4 {
-  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f}) → self::B4
+  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f = null}) → self::B4
     ;
-  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f}) → self::B4
+  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f = null}) → self::B4
     ;
 }
 abstract class C5 extends core::Object {
@@ -58,21 +58,21 @@
     ;
 }
 class A6 extends core::Object {
-  constructor •({required (core::int, core::num) → core::String f}) → self::A6
+  constructor •({required (core::int, core::num) → core::String f = null}) → self::A6
     ;
 }
 class B6 extends self::A6 {
-  constructor one({required self::C5 f}) → self::B6
+  constructor one({required self::C5 f = null}) → self::B6
     ;
-  constructor two({required self::C5 f}) → self::B6
+  constructor two({required self::C5 f = null}) → self::B6
     ;
 }
 class A7 extends core::Object {
-  constructor •({required core::int x1, required core::int x2, required (core::Object) → core::bool f1, required (core::Object) → core::bool f2, required (dynamic) → void g1, required (dynamic) → void g2}) → self::A7
+  constructor •({required core::int x1 = null, required core::int x2 = null, required (core::Object) → core::bool f1 = null, required (core::Object) → core::bool f2 = null, required (dynamic) → void g1 = null, required (dynamic) → void g2 = null}) → self::A7
     ;
 }
 class B7 extends self::A7 {
-  constructor •({required dynamic x1, required dynamic x2, required <X extends core::Object? = dynamic>(core::Object) → X% f1, required <X extends core::Object? = dynamic>(core::Object) → X% f2, required <X extends core::Object? = dynamic>(X%) → void g1, required <X extends core::Object? = dynamic>(X%) → void g2}) → self::B7
+  constructor •({required dynamic x1 = null, required dynamic x2 = null, required <X extends core::Object? = dynamic>(core::Object) → X% f1 = null, required <X extends core::Object? = dynamic>(core::Object) → X% f2 = null, required <X extends core::Object? = dynamic>(X%) → void g1 = null, required <X extends core::Object? = dynamic>(X%) → void g2 = null}) → self::B7
     ;
 }
 static method main() → dynamic
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
index 3d11aa3..407250c 100644
--- 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
@@ -10,7 +10,7 @@
     ;
   constructor named2(core::int foo) → self::A1
     ;
-  constructor named3({required core::int foo}) → self::A1
+  constructor named3({required core::int foo = null}) → self::A1
     ;
 }
 class B1 extends self::A1 {
@@ -20,17 +20,17 @@
     ;
   constructor named2(core::int foo) → self::B1
     ;
-  constructor named3({required core::int foo}) → self::B1
+  constructor named3({required core::int foo = null}) → 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
+  constructor •({required core::int foo = null, required core::String bar = null}) → self::A2
     ;
 }
 class B2 extends self::A2 {
-  constructor •({required core::String bar, required core::int foo}) → self::B2
+  constructor •({required core::String bar = null, required core::int foo = null}) → self::B2
     ;
 }
 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 99e1ef3..e8c6dc4 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
@@ -4,21 +4,21 @@
 
 class A1 extends core::Object {
   final field core::int foo;
-  constructor •({required core::int foo}) → self::A1
+  constructor •({required core::int foo = null}) → self::A1
     ;
 }
 class B1 extends self::A1 {
-  constructor •({required core::int foo}) → self::B1
+  constructor •({required core::int foo = null}) → self::B1
     ;
 }
 class C1 extends self::A1 {
-  constructor •({required core::int foo}) → self::C1
+  constructor •({required core::int foo = null}) → self::C1
     ;
 }
 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
+  constructor •({required core::int foo = null, required core::String bar = null}) → self::A2
     ;
 }
 class B2 extends self::A2 {
@@ -26,9 +26,9 @@
     ;
 }
 class C2 extends self::A2 {
-  constructor •({required core::int foo}) → self::C2
+  constructor •({required core::int foo = null}) → self::C2
     ;
-  constructor other({required core::int foo}) → self::C2
+  constructor other({required core::int foo = null}) → self::C2
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
index 76d37eb..5b4efe7 100644
--- a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 import "org-dartlang-testcase:///main_lib.dart";
 
 class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
-  const constructor •({mai::Key? key}) → self::GalleryApp
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
     : super mai::StatefulWidget::•(key: key)
     ;
 }
@@ -22,7 +22,11 @@
 }
 class StatefulWidget extends core::Object /*hasConstConstructor*/  {
   final field mai::Key? key;
-  const constructor •({mai::Key? key}) → mai::StatefulWidget
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
     : mai::StatefulWidget::key = key, super core::Object::•()
     ;
 }
+
+constants  {
+  #C1 = null
+}
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
index c1a5b49..1d3e740 100644
--- 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
@@ -161,7 +161,7 @@
     ;
 }
 class C9 = syn::A9 with self::B9 {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 = syn::A8 with syn::B8 {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
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
index 782b4ee..8995764 100644
--- 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
@@ -161,7 +161,7 @@
     ;
 }
 class C9 extends syn::A9 implements self::B9 /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 extends syn::A8 implements syn::B8 /*isEliminatedMixin*/  {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
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
index c1a5b49..1d3e740 100644
--- 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
@@ -161,7 +161,7 @@
     ;
 }
 class C9 = syn::A9 with self::B9 {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 = syn::A8 with syn::B8 {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
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
index c1a5b49..1d3e740 100644
--- 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
@@ -161,7 +161,7 @@
     ;
 }
 class C9 = syn::A9 with self::B9 {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 = syn::A8 with syn::B8 {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
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
index 8e802f7..8752d3d 100644
--- 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
@@ -131,7 +131,7 @@
     ;
 }
 class D8 extends syn::C8 {
-  constructor •({core::int? a}) → self::D8
+  constructor •({core::int? a = null}) → self::D8
     ;
 }
 class B9 extends core::Object {
@@ -139,12 +139,12 @@
     ;
 }
 class C9 = syn::A9 with self::B9 {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = null]) → self::C9
     : super syn::A9::•(a)
     ;
 }
 class D9 extends self::C9 {
-  constructor •([core::int? a]) → self::D9
+  constructor •([core::int? a = null]) → self::D9
     ;
 }
 static method main() → dynamic
@@ -175,7 +175,7 @@
 }
 class A8 extends core::Object {
   final field core::int? a;
-  constructor •({core::int? a}) → syn::A8
+  constructor •({core::int? a = null}) → syn::A8
     ;
 }
 class B8 extends core::Object {
@@ -183,12 +183,12 @@
     ;
 }
 class C8 = syn::A8 with syn::B8 {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = null}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
 class A9 extends core::Object {
   final field core::int? a;
-  constructor •([core::int? a]) → syn::A9
+  constructor •([core::int? a = null]) → syn::A9
     ;
 }
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
index 782b4ee..8995764 100644
--- 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
@@ -161,7 +161,7 @@
     ;
 }
 class C9 extends syn::A9 implements self::B9 /*isEliminatedMixin*/  {
-  synthetic constructor •([core::int? a]) → self::C9
+  synthetic constructor •([core::int? a = #C3]) → self::C9
     : super syn::A9::•(a)
     ;
 }
@@ -210,7 +210,7 @@
     ;
 }
 class C8 extends syn::A8 implements syn::B8 /*isEliminatedMixin*/  {
-  synthetic constructor •({core::int? a}) → syn::C8
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
     : super syn::A8::•(a: a)
     ;
 }
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.outline.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.outline.expect
index 34eccb8..dbf9eec 100644
--- a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.outline.expect
@@ -49,25 +49,25 @@
 class Operators3 extends core::Object {
   synthetic constructor •() → self::Operators3
     ;
-  operator >>>([dynamic a]) → dynamic
+  operator >>>([dynamic a = null]) → dynamic
     ;
 }
 class Operators4 extends core::Object {
   synthetic constructor •() → self::Operators4
     ;
-  operator >>>({dynamic a}) → dynamic
+  operator >>>({dynamic a = null}) → dynamic
     ;
 }
 class Operators5 extends core::Object {
   synthetic constructor •() → self::Operators5
     ;
-  operator >>>(dynamic a, [dynamic b]) → dynamic
+  operator >>>(dynamic a, [dynamic b = null]) → dynamic
     ;
 }
 class Operators6 extends core::Object {
   synthetic constructor •() → self::Operators6
     ;
-  operator >>>(dynamic a, {dynamic b}) → dynamic
+  operator >>>(dynamic a, {dynamic b = null}) → dynamic
     ;
 }
 class Operators7 extends core::Object {
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.outline.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.outline.expect
index f6aa033..71cd6f2 100644
--- a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.outline.expect
@@ -20,7 +20,7 @@
 
 class Animal extends core::Object {
   final field core::int? numberOfLegs;
-  constructor •({required core::int? numberOfLegs}) → self::Animal
+  constructor •({required core::int? numberOfLegs = null}) → self::Animal
     ;
 }
 @val::valueClass
@@ -32,9 +32,9 @@
 class Foo extends core::Object {
   field core::int? bar;
   field core::int? bar2;
-  constructor •({core::int? bar, core::int? bar2}) → self::Foo
+  constructor •({core::int? bar = null, core::int? bar2 = null}) → self::Foo
     ;
-  method copyWith({core::int bar, core::int bar2}) → self::Foo
+  method copyWith({core::int bar = null, core::int bar2 = null}) → self::Foo
     ;
 }
 @val::valueClass
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.outline.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.outline.expect
index 6b5a117..6584a35 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.outline.expect
@@ -7,7 +7,7 @@
 
 class Animal extends core::Object {
   final field core::int numberOfLegs;
-  constructor •({required core::int numberOfLegs}) → self::Animal
+  constructor •({required core::int numberOfLegs = null}) → self::Animal
     ;
 }
 @val::valueClass
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
index cd364ee..ce7effd 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
@@ -18,7 +18,7 @@
     ;
   method method(self::A::T% t, (self::A::U%) → void u, covariant-by-class self::A::V% v) → void
     ;
-  method method2(self::A::T% x, [self::A::T? y]) → void
+  method method2(self::A::T% x, [self::A::T? y = null]) → void
     ;
   set x(self::A::T% t) → void
     ;
@@ -44,7 +44,7 @@
   final field (self::C::T%) →? void field;
   synthetic constructor •() → self::C<self::C::T%>
     ;
-  method method(self::C::T% x, [self::C::T? y]) → void
+  method method(self::C::T% x, [self::C::T? y = null]) → void
     ;
   set x(self::C::T% t) → void
     ;