Version 2.17.0-281.0.dev

Merge commit '6980a1b4c39a1c9ab70d44a02552a64f412552b8' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 3009ba1..0fd1abd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -1589,14 +1589,6 @@
   /// the kernel.
   final bool isImplicitlyTyped;
 
-  /// True if the initializer was specified by the programmer.
-  ///
-  /// Note that the variable might have a synthesized initializer expression,
-  /// so `hasDeclaredInitializer == false` doesn't imply `initializer == null`.
-  /// For instance, for duplicate variable names, an invalid expression is set
-  /// as the initializer of the second variable.
-  final bool hasDeclaredInitializer;
-
   // TODO(ahe): Remove this field. We can get rid of it by recording closure
   // mutation in [BodyBuilder].
   final int functionNestingLevel;
@@ -1625,7 +1617,7 @@
 
   VariableDeclarationImpl(String? name, this.functionNestingLevel,
       {this.forSyntheticToken: false,
-      this.hasDeclaredInitializer: false,
+      bool hasDeclaredInitializer: false,
       Expression? initializer,
       DartType? type,
       bool isFinal: false,
@@ -1648,7 +1640,8 @@
             isCovariantByDeclaration: isCovariantByDeclaration,
             isLate: isLate,
             isRequired: isRequired,
-            isLowered: isLowered);
+            isLowered: isLowered,
+            hasDeclaredInitializer: hasDeclaredInitializer);
 
   VariableDeclarationImpl.forEffect(Expression initializer)
       : forSyntheticToken = false,
@@ -1656,7 +1649,6 @@
         isImplicitlyTyped = false,
         isLocalFunction = false,
         isStaticLate = false,
-        hasDeclaredInitializer = true,
         super.forValue(initializer);
 
   VariableDeclarationImpl.forValue(Expression initializer)
@@ -1665,7 +1657,6 @@
         isImplicitlyTyped = true,
         isLocalFunction = false,
         isStaticLate = false,
-        hasDeclaredInitializer = true,
         super.forValue(initializer);
 
   // The synthesized local getter function for a lowered late variable.
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
index 0a19850..42c969f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -225,6 +225,7 @@
             synthesizedParameterType, SubtypeCheckMode.withNullabilities)) {
       _cloneInitializer(originalParameter, synthesizedParameter);
     } else {
+      synthesizedParameter.hasDeclaredInitializer = false;
       if (synthesizedParameterType.isPotentiallyNonNullable) {
         _libraryBuilder.addProblem(
             templateOptionalSuperParameterWithoutInitializer.withArguments(
@@ -260,10 +261,14 @@
     for (int i = 0; i < original.function!.positionalParameters.length; i++) {
       VariableDeclaration synthesizedParameter =
           synthesized.function!.positionalParameters[i];
-      VariableDeclaration constructorParameter =
+      VariableDeclaration originalParameter =
           original.function!.positionalParameters[i];
       synthesizedParameter.type =
-          substitution.substituteType(constructorParameter.type);
+          substitution.substituteType(originalParameter.type);
+      if (!synthesizedParameter.hasDeclaredInitializer) {
+        synthesizedParameter.hasDeclaredInitializer =
+            originalParameter.hasDeclaredInitializer;
+      }
     }
     for (int i = 0; i < original.function!.namedParameters.length; i++) {
       VariableDeclaration synthesizedParameter =
@@ -272,6 +277,10 @@
           original.function!.namedParameters[i];
       synthesizedParameter.type =
           substitution.substituteType(originalParameter.type);
+      if (!synthesizedParameter.hasDeclaredInitializer) {
+        synthesizedParameter.hasDeclaredInitializer =
+            originalParameter.hasDeclaredInitializer;
+      }
     }
     if (copyReturnType) {
       synthesized.function!.returnType =
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 176a1b9..0e6687b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -1001,6 +1001,7 @@
       VariableDeclaration copy = new VariableDeclaration(formal.name,
           isFinal: formal.isFinal,
           isConst: formal.isConst,
+          hasDeclaredInitializer: formal.hasDeclaredInitializer,
           type: const UnknownType());
       if (!hasTypeDependency && formal.type is! UnknownType) {
         copy.type = substitution.substituteType(formal.type);
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index 52e657e..7f77622 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -330,17 +330,10 @@
     }
 
     Constructor superTarget;
-    List<FormalParameterBuilder>? superFormals;
     FunctionNode? superConstructorFunction;
-    if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
-      superTarget = superTargetBuilder.constructor;
-      superFormals = superTargetBuilder.formals!;
-    } else if (superTargetBuilder is DillConstructorBuilder) {
+    if (superTargetBuilder != null) {
       superTarget = superTargetBuilder.constructor;
       superConstructorFunction = superTargetBuilder.function;
-      if (superTargetBuilder is SyntheticSourceConstructorBuilder) {
-        superFormals = superTargetBuilder.formals;
-      }
     } else {
       // The error in this case should be reported elsewhere. Here we perform a
       // simple recovery.
@@ -351,53 +344,17 @@
     List<bool> positionalSuperFormalHasInitializer = [];
     Map<String, DartType?> namedSuperFormalType = {};
     Map<String, bool> namedSuperFormalHasInitializer = {};
-    // TODO(johnniwinther): Clean this up when [VariableDeclaration] has a
-    // `hasDeclaredInitializer` flag.
-    if (superFormals != null && superConstructorFunction != null) {
-      for (VariableDeclaration formal
-          in superConstructorFunction.positionalParameters) {
-        positionalSuperFormalType.add(formal.type);
-      }
-      for (VariableDeclaration formal
-          in superConstructorFunction.namedParameters) {
-        namedSuperFormalType[formal.name!] = formal.type;
-      }
-      for (FormalParameterBuilder formal in superFormals) {
-        if (formal.isPositional) {
-          positionalSuperFormalHasInitializer
-              .add(formal.hasDeclaredInitializer);
-        } else {
-          namedSuperFormalHasInitializer[formal.name] =
-              formal.hasDeclaredInitializer;
-        }
-      }
-    } else if (superFormals != null) {
-      for (FormalParameterBuilder formal in superFormals) {
-        if (formal.isPositional) {
-          positionalSuperFormalType.add(formal.variable?.type);
-          positionalSuperFormalHasInitializer
-              .add(formal.hasDeclaredInitializer);
-        } else {
-          namedSuperFormalType[formal.name] = formal.variable?.type;
-          namedSuperFormalHasInitializer[formal.name] =
-              formal.hasDeclaredInitializer;
-        }
-      }
-    } else if (superConstructorFunction != null) {
-      for (VariableDeclaration formal
-          in superConstructorFunction.positionalParameters) {
-        positionalSuperFormalType.add(formal.type);
-        positionalSuperFormalHasInitializer.add(formal.initializer != null);
-      }
-      for (VariableDeclaration formal
-          in superConstructorFunction.namedParameters) {
-        namedSuperFormalType[formal.name!] = formal.type;
-        namedSuperFormalHasInitializer[formal.name!] =
-            formal.initializer != null;
-      }
-    } else {
-      // The error is reported elsewhere.
-      return performRecoveryForErroneousCase();
+
+    for (VariableDeclaration formal
+        in superConstructorFunction.positionalParameters) {
+      positionalSuperFormalType.add(formal.type);
+      positionalSuperFormalHasInitializer.add(formal.hasDeclaredInitializer);
+    }
+    for (VariableDeclaration formal
+        in superConstructorFunction.namedParameters) {
+      namedSuperFormalType[formal.name!] = formal.type;
+      namedSuperFormalHasInitializer[formal.name!] =
+          formal.hasDeclaredInitializer;
     }
 
     int superInitializingFormalIndex = -1;
@@ -423,9 +380,12 @@
               positionalSuperFormalType.length);
           if (superInitializingFormalIndex <
               positionalSuperFormalHasInitializer.length) {
-            formal.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer ||
-                positionalSuperFormalHasInitializer[
-                    superInitializingFormalIndex];
+            if (formal.isOptional) {
+              formal.hasDeclaredInitializer =
+                  hasImmediatelyDeclaredInitializer ||
+                      positionalSuperFormalHasInitializer[
+                          superInitializingFormalIndex];
+            }
             correspondingSuperFormalType =
                 positionalSuperFormalType[superInitializingFormalIndex];
             if (!hasImmediatelyDeclaredInitializer &&
@@ -439,8 +399,11 @@
           }
         } else {
           if (namedSuperFormalHasInitializer[formal.name] != null) {
-            formal.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer ||
-                namedSuperFormalHasInitializer[formal.name]!;
+            if (formal.isOptional) {
+              formal.hasDeclaredInitializer =
+                  hasImmediatelyDeclaredInitializer ||
+                      namedSuperFormalHasInitializer[formal.name]!;
+            }
             correspondingSuperFormalType = namedSuperFormalType[formal.name];
             if (!hasImmediatelyDeclaredInitializer && !formal.isRequiredNamed) {
               (namedSuperParameters ??= <String>[]).add(formal.name);
@@ -457,6 +420,7 @@
           }
           formal.variable!.type = type ?? const DynamicType();
         }
+        formal.variable!.hasDeclaredInitializer = formal.hasDeclaredInitializer;
       }
     }
 
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.outline.expect
index d5201b0..7439b74 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.outline.expect
@@ -19,9 +19,9 @@
 static const field core::int multi2 = self::multiFn(2);
 static method binaryFn(core::int a, core::int b) → core::int
   ;
-static method optionalFn(core::int c, [core::int d]) → core::int
+static method optionalFn(core::int c, [has-declared-initializer core::int d]) → core::int
   ;
-static method namedFn(core::int e, {core::int f}) → core::int
+static method namedFn(core::int e, {has-declared-initializer core::int f}) → core::int
   ;
 static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.outline.expect
index 337fe9c..b43137b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 static field core::Type test3;
 static method test() → dynamic
   ;
-static method test2([core::Type t]) → dynamic
+static method test2([has-declared-initializer core::Type t]) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.outline.expect
index 73a2bca..4c45b0b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.outline.expect
@@ -26,5 +26,5 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
index b497969..0a78c65 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
@@ -30,9 +30,9 @@
   const constructor named({core::List<self::Const> constants = const <self::Const>[const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<core::String>()]}) → self::Class
     : self::Class::constants = constants, super core::Object::•()
     ;
-  static method _#new#tearOff({core::List<self::Const> constants}) → self::Class
+  static method _#new#tearOff({has-declared-initializer core::List<self::Const> constants}) → self::Class
     return new self::Class::•(constants: constants);
-  static method _#named#tearOff({core::List<self::Const> constants}) → self::Class
+  static method _#named#tearOff({has-declared-initializer core::List<self::Const> constants}) → self::Class
     return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
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 8cdb742..7c7ba9c 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
@@ -54,5 +54,5 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.outline.expect
index c630d70..da765aa 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.outline.expect
@@ -6,14 +6,14 @@
   final field core::int field;
   constructor •([core::int field = 42]) → self::Class1
     ;
-  static method _#new#tearOff([core::int field]) → self::Class1
+  static method _#new#tearOff([has-declared-initializer core::int field]) → self::Class1
     return new self::Class1::•(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
   constructor •({core::int field = 42}) → self::Class2
     ;
-  static method _#new#tearOff({core::int field}) → self::Class2
+  static method _#new#tearOff({has-declared-initializer core::int field}) → self::Class2
     return new self::Class2::•(field: field);
 }
 static final field core::bool inSoundMode;
@@ -23,5 +23,5 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
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 5366579f..daea2b6 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
@@ -78,5 +78,5 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.outline.expect
index da300f3..111746e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.outline.expect
@@ -8,9 +8,9 @@
     ;
   static method _#_#tearOff(core::int field) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field]) → self::Class1
+  static factory •([has-declared-initializer core::int field]) → self::Class1
     ;
-  static method _#new#tearOff([core::int field]) → self::Class1
+  static method _#new#tearOff([has-declared-initializer core::int field]) → self::Class1
     return self::Class1::•(field);
 }
 class Class2 extends core::Object {
@@ -19,9 +19,9 @@
     ;
   static method _#_#tearOff(core::int field) → self::Class2
     return new self::Class2::_(field);
-  static factory •({core::int field}) → self::Class2
+  static factory •({has-declared-initializer core::int field}) → self::Class2
     ;
-  static method _#new#tearOff({core::int field}) → self::Class2
+  static method _#new#tearOff({has-declared-initializer core::int field}) → self::Class2
     return self::Class2::•(field: field);
 }
 static final field core::bool inSoundMode;
@@ -31,5 +31,5 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
index e737b01..cf308e9 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.outline.expect
@@ -9,7 +9,7 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.outline.expect
index e986061..67a8bb4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.outline.expect
@@ -41,5 +41,5 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.outline.expect
index 6216fd6..7387d35 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.outline.expect
@@ -61,5 +61,5 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
index eaa086d..917259b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.outline.expect
@@ -66,7 +66,7 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.outline.expect
index cc60ae4..d7e6f83 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.outline.expect
@@ -30,5 +30,5 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect
index b89a67b..1ec4a4a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.outline.expect
@@ -9,15 +9,15 @@
   ;
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length]) → core::List<self::_#MyList#new#tearOff::T>
   return core::List::•<self::_#MyList#new#tearOff::T>(length);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable}) → core::List<self::_#MyList#filled#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {has-declared-initializer core::bool growable}) → core::List<self::_#MyList#filled#tearOff::T>
   return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable}) → core::List<self::_#MyList#empty#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({has-declared-initializer core::bool growable}) → core::List<self::_#MyList#empty#tearOff::T>
   return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<self::_#MyList#from#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {has-declared-initializer core::bool growable}) → core::List<self::_#MyList#from#tearOff::T>
   return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable}) → core::List<self::_#MyList#of#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {has-declared-initializer core::bool growable}) → core::List<self::_#MyList#of#tearOff::T>
   return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable}) → core::List<self::_#MyList#generate#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {has-declared-initializer core::bool growable}) → core::List<self::_#MyList#generate#tearOff::T>
   return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
   return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
index a55684b..df2be93 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
@@ -78,7 +78,7 @@
   synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::redirectingGenerative(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([has-declared-initializer core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
     return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
     return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
index 149333a..b0d6eb1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
@@ -78,7 +78,7 @@
   synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::redirectingGenerative(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([has-declared-initializer core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
     return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
     return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
index 7093a76..3033b3d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
@@ -78,7 +78,7 @@
   synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::redirectingGenerative(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([has-declared-initializer core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
     return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
     return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
index 7093a76..3033b3d 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
@@ -78,7 +78,7 @@
   synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::redirectingGenerative(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([has-declared-initializer core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
     return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
     return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect
index dfa0d03..5466569 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.outline.expect
@@ -16,7 +16,7 @@
     ;
   constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field]) → self::Class<self::Class::_#new#tearOff::T%>
+  static method _#new#tearOff<T extends core::Object? = dynamic>([has-declared-initializer core::int field]) → self::Class<self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
@@ -43,7 +43,7 @@
   synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::redirectingGenerative(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([has-declared-initializer core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
     return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
     return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
index 0b49573..ee7364b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
@@ -78,7 +78,7 @@
   synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
     : super self::Class::redirectingGenerative(field)
     ;
-  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([has-declared-initializer core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
     return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
   static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
     return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
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 c867d2c..146ad99 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
@@ -122,7 +122,7 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
index a220416..4d29815 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   static final field dynamic _redirecting# = <dynamic>[self::Class1::•]/*isLegacy*/;
   constructor _([core::int field = 42]) → self::Class1
     ;
-  static method _#_#tearOff([core::int field]) → self::Class1
+  static method _#_#tearOff([has-declared-initializer core::int field]) → self::Class1
     return new self::Class1::_(field);
   static factory •([core::int field]) → self::Class1
     return new self::Class1::_(field);
@@ -19,7 +19,7 @@
   static final field dynamic _redirecting# = <dynamic>[self::Class2::•]/*isLegacy*/;
   constructor _({core::int field = 42}) → self::Class2
     ;
-  static method _#_#tearOff({core::int field}) → self::Class2
+  static method _#_#tearOff({has-declared-initializer core::int field}) → self::Class2
     return new self::Class2::_(field: field);
   static factory •({core::int field}) → self::Class2
     return new self::Class2::_(field: field);
@@ -33,7 +33,7 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
 
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
index d465217..4fe1ecd 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.outline.expect
@@ -10,7 +10,7 @@
     ;
   constructor named({core::int field1 = 1, core::int field2 = 2}) → self::Class1
     ;
-  static method _#positional#tearOff([core::int field1, core::int field2]) → self::Class1
+  static method _#positional#tearOff([has-declared-initializer core::int field1, has-declared-initializer core::int field2]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static factory redirectPositionalSame([core::int field1, core::int field2]) → self::Class1
     return new self::Class1::positional(field1, field2);
@@ -24,7 +24,7 @@
     return new self::Class1::positional();
   static method _#redirectPositionalFewer2#tearOff() → self::Class1
     return new self::Class1::positional();
-  static method _#named#tearOff({core::int field1, core::int field2}) → self::Class1
+  static method _#named#tearOff({has-declared-initializer core::int field1, has-declared-initializer core::int field2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static factory redirectNamedSame({core::int field1, core::int field2}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
@@ -54,7 +54,7 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
 
 
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 757a1e2..451d45b 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
@@ -14,11 +14,11 @@
     ;
   static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
     return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
-  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b, core::int c]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b, has-declared-initializer core::int c]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
     return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
-  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b, core::int c}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b, has-declared-initializer core::int c}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
     ;
-  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b, core::int c}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b, has-declared-initializer core::int c}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
     return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
@@ -29,9 +29,9 @@
   ;
 static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
   return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
-static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b, core::int c]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b, has-declared-initializer core::int c]) → self::Class<self::_#B#named#tearOff::S%, core::int>
   return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
-static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b, core::int c}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b, has-declared-initializer core::int c}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
   return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
 static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
   return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
@@ -46,9 +46,9 @@
 typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
   return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b, core::int c]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b, has-declared-initializer core::int c]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
   return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
-static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b, core::int c}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b, has-declared-initializer core::int c}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
   return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
   return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
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 fa9d121..53cbd09 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
@@ -68,7 +68,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, has-declared-initializer core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
   return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
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 6e66217..fdfd1c3 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
@@ -18,7 +18,7 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, has-declared-initializer core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
   return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
@@ -43,9 +43,9 @@
     return new mai::A::•<mai::A::_#new#tearOff::T%>();
   static method _#named#tearOff<T extends core::Object? = dynamic>(mai::A::_#named#tearOff::T% a, [core::int? b]) → mai::A<mai::A::_#named#tearOff::T%>
     return new mai::A::named<mai::A::_#named#tearOff::T%>(a, b);
-  static factory fact<T extends core::Object? = dynamic>(mai::A::fact::T% a, {core::int? b, core::int c}) → mai::A<mai::A::fact::T%>
+  static factory fact<T extends core::Object? = dynamic>(mai::A::fact::T% a, {core::int? b, has-declared-initializer core::int c}) → mai::A<mai::A::fact::T%>
     ;
-  static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b, core::int c}) → mai::A<mai::A::_#fact#tearOff::T%>
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(mai::A::_#fact#tearOff::T% a, {core::int? b, has-declared-initializer core::int c}) → mai::A<mai::A::_#fact#tearOff::T%>
     return mai::A::fact<mai::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → mai::A<mai::A::redirect::T%>
     return new mai::A::•<mai::A::redirect::T%>();
@@ -64,7 +64,7 @@
   return new mai::A::•<mai::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#named#tearOff::Y% a, [core::int? b]) → mai::A<mai::_#F#named#tearOff::Y%>
   return new mai::A::named<mai::_#F#named#tearOff::Y%>(a, b);
-static method _#F#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<mai::_#F#fact#tearOff::Y%>
+static method _#F#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#F#fact#tearOff::Y% a, {core::int? b, has-declared-initializer core::int c}) → mai::A<mai::_#F#fact#tearOff::Y%>
   return mai::A::fact<mai::_#F#fact#tearOff::Y%>(a, b: b, c: c);
 static method _#F#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#F#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<mai::_#F#redirect#tearOff::Y%>();
@@ -72,7 +72,7 @@
   return new mai::A::•<mai::_#G#new#tearOff::Y%>();
 static method _#G#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#G#named#tearOff::Y% a, [core::int? b]) → mai::A<mai::_#G#named#tearOff::Y%>
   return new mai::A::named<mai::_#G#named#tearOff::Y%>(a, b);
-static method _#G#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#G#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<mai::_#G#fact#tearOff::Y%>
+static method _#G#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(mai::_#G#fact#tearOff::Y% a, {core::int? b, has-declared-initializer core::int c}) → mai::A<mai::_#G#fact#tearOff::Y%>
   return mai::A::fact<mai::_#G#fact#tearOff::Y%>(a, b: b, c: c);
 static method _#G#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<mai::_#G#redirect#tearOff::Y%>
   return mai::A::_#redirect#tearOff<mai::_#G#redirect#tearOff::Y%>();
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 2fdb0b1..26c6cb7 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
@@ -22,7 +22,7 @@
   return new typ::A::•<self::_#H#new#tearOff::Y%>();
 static method /* from org-dartlang-testcase:///typedef_identical_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]) → typ::A<self::_#H#named#tearOff::Y%>
   return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, has-declared-initializer core::int c}) → typ::A<self::_#H#fact#tearOff::Y%>
   return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
 static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
@@ -43,9 +43,9 @@
     return new typ::A::•<typ::A::_#new#tearOff::T%>();
   static method _#named#tearOff<T extends core::Object? = dynamic>(typ::A::_#named#tearOff::T% a, [core::int? b]) → typ::A<typ::A::_#named#tearOff::T%>
     return new typ::A::named<typ::A::_#named#tearOff::T%>(a, b);
-  static factory fact<T extends core::Object? = dynamic>(typ::A::fact::T% a, {core::int? b, core::int c}) → typ::A<typ::A::fact::T%>
+  static factory fact<T extends core::Object? = dynamic>(typ::A::fact::T% a, {core::int? b, has-declared-initializer core::int c}) → typ::A<typ::A::fact::T%>
     ;
-  static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b, core::int c}) → typ::A<typ::A::_#fact#tearOff::T%>
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b, has-declared-initializer core::int c}) → typ::A<typ::A::_#fact#tearOff::T%>
     return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
   static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
     return new typ::A::•<typ::A::redirect::T%>();
@@ -64,7 +64,7 @@
   return new typ::A::•<typ::_#F#new#tearOff::Y%>();
 static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b]) → typ::A<typ::_#F#named#tearOff::Y%>
   return new typ::A::named<typ::_#F#named#tearOff::Y%>(a, b);
-static method _#F#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#fact#tearOff::Y% a, {core::int? b, core::int c}) → typ::A<typ::_#F#fact#tearOff::Y%>
+static method _#F#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#fact#tearOff::Y% a, {core::int? b, has-declared-initializer core::int c}) → typ::A<typ::_#F#fact#tearOff::Y%>
   return typ::A::fact<typ::_#F#fact#tearOff::Y%>(a, b: b, c: c);
 static method _#F#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<typ::_#F#redirect#tearOff::Y%>();
@@ -72,7 +72,7 @@
   return new typ::A::•<typ::_#G#new#tearOff::Y%>();
 static method _#G#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#G#named#tearOff::Y% a, [core::int? b]) → typ::A<typ::_#G#named#tearOff::Y%>
   return new typ::A::named<typ::_#G#named#tearOff::Y%>(a, b);
-static method _#G#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#G#fact#tearOff::Y% a, {core::int? b, core::int c}) → typ::A<typ::_#G#fact#tearOff::Y%>
+static method _#G#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#G#fact#tearOff::Y% a, {core::int? b, has-declared-initializer core::int c}) → typ::A<typ::_#G#fact#tearOff::Y%>
   return typ::A::fact<typ::_#G#fact#tearOff::Y%>(a, b: b, c: c);
 static method _#G#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#G#redirect#tearOff::Y%>
   return typ::A::_#redirect#tearOff<typ::_#G#redirect#tearOff::Y%>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.outline.expect
index 10537bf..cf95086 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.outline.expect
@@ -38,7 +38,7 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
 static method _#DA2#new#tearOff<unrelated X extends core::num>() → self::A
   return new self::A::•();
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 7d012c0..bae6873 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
@@ -80,7 +80,7 @@
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
+static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
   ;
 
 
diff --git a/pkg/front_end/testcases/dart2js/late_locals.dart.strong.expect b/pkg/front_end/testcases/dart2js/late_locals.dart.strong.expect
index 0ecd84b..732071d 100644
--- a/pkg/front_end/testcases/dart2js/late_locals.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/late_locals.dart.strong.expect
@@ -37,7 +37,7 @@
   core::print(x{core::int});
   x = 42;
   core::print(x{core::int});
-  late core::int? y = null;
+  late has-declared-initializer core::int? y = null;
   core::print(y);
   y = 42;
   core::print(y{core::int});
@@ -51,7 +51,7 @@
 static method testNullableInitializedFinalLocal() → void {
   late final core::int? x = 1.{core::int::unary-}(){() → core::int};
   core::print(x);
-  late final core::int? y = null;
+  late final has-declared-initializer core::int? y = null;
   core::print(y);
 }
 static method testNonNullableInitializedFinalLocal() → void {
diff --git a/pkg/front_end/testcases/dart2js/late_locals.dart.weak.expect b/pkg/front_end/testcases/dart2js/late_locals.dart.weak.expect
index 0ecd84b..732071d 100644
--- a/pkg/front_end/testcases/dart2js/late_locals.dart.weak.expect
+++ b/pkg/front_end/testcases/dart2js/late_locals.dart.weak.expect
@@ -37,7 +37,7 @@
   core::print(x{core::int});
   x = 42;
   core::print(x{core::int});
-  late core::int? y = null;
+  late has-declared-initializer core::int? y = null;
   core::print(y);
   y = 42;
   core::print(y{core::int});
@@ -51,7 +51,7 @@
 static method testNullableInitializedFinalLocal() → void {
   late final core::int? x = 1.{core::int::unary-}(){() → core::int};
   core::print(x);
-  late final core::int? y = null;
+  late final has-declared-initializer core::int? y = null;
   core::print(y);
 }
 static method testNonNullableInitializedFinalLocal() → void {
diff --git a/pkg/front_end/testcases/dart2js/late_locals.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/late_locals.dart.weak.modular.expect
index 0ecd84b..732071d 100644
--- a/pkg/front_end/testcases/dart2js/late_locals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/dart2js/late_locals.dart.weak.modular.expect
@@ -37,7 +37,7 @@
   core::print(x{core::int});
   x = 42;
   core::print(x{core::int});
-  late core::int? y = null;
+  late has-declared-initializer core::int? y = null;
   core::print(y);
   y = 42;
   core::print(y{core::int});
@@ -51,7 +51,7 @@
 static method testNullableInitializedFinalLocal() → void {
   late final core::int? x = 1.{core::int::unary-}(){() → core::int};
   core::print(x);
-  late final core::int? y = null;
+  late final has-declared-initializer core::int? y = null;
   core::print(y);
 }
 static method testNonNullableInitializedFinalLocal() → void {
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect
index 60cff2d..c6457e3 100644
--- a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect
@@ -30,7 +30,7 @@
 class B extends self2::_B&A&M {
   constructor •({core::double d = 2.71}) → self2::B
     ;
-  static method _#new#tearOff({core::double d}) → self2::B
+  static method _#new#tearOff({has-declared-initializer core::double d}) → self2::B
     return new self2::B::•(d: d);
 }
 
@@ -58,9 +58,9 @@
     ;
   constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
     ;
-  static method _#new#tearOff({core::double d, (core::String) → core::String s}) → a_l::A
+  static method _#new#tearOff({has-declared-initializer core::double d, has-declared-initializer (core::String) → core::String s}) → a_l::A
     return new a_l::A::•(d: d, s: s);
-  static method _#factoryConstructor#tearOff({core::double d, (core::String) → core::String s}) → a_l::A
+  static method _#factoryConstructor#tearOff({has-declared-initializer core::double d, has-declared-initializer (core::String) → core::String s}) → a_l::A
     return new a_l::A::factoryConstructor(d: d, s: s);
   method doStringy(core::String i) → core::String
     ;
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
index 5ab22e6..6a8286a 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
@@ -20,14 +20,14 @@
     : self2::Class::defaultValue = defaultValue, super core::Object::•()
     ;
   @_js::patch
-  external static factory fact({core::bool defaultValue}) → self2::Class;
-  static method _#fact#tearOff({core::bool defaultValue}) → self2::Class
+  external static factory fact({has-declared-initializer core::bool defaultValue}) → self2::Class;
+  static method _#fact#tearOff({has-declared-initializer core::bool defaultValue}) → self2::Class
     return self2::Class::fact(defaultValue: defaultValue);
   @_js::patch
   external static factory constFact({core::bool defaultValue = true}) → self2::Class;
-  static method _#constFact#tearOff({core::bool defaultValue}) → self2::Class
+  static method _#constFact#tearOff({has-declared-initializer core::bool defaultValue}) → self2::Class
     return self2::Class::constFact(defaultValue: defaultValue);
-  static method /* from org-dartlang-testcase:///patch_lib.dart */ _#_internal#tearOff({core::bool defaultValue}) → self2::Class
+  static method /* from org-dartlang-testcase:///patch_lib.dart */ _#_internal#tearOff({has-declared-initializer core::bool defaultValue}) → self2::Class
     return new self2::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
index db452f8..e03d77d 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
@@ -33,7 +33,7 @@
   static const field self::E2<core::int, core::String, core::double> one = #C15;
   static const field self::E2<core::String, core::int, core::double> two = #C17;
   static const field self::E2<core::double, core::bool, dynamic> three = #C21;
-  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, has-declared-initializer self::E2::Z? baz = #C9}) → 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/enhanced_enums/named_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
index db452f8..e03d77d 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
   static const field self::E2<core::int, core::String, core::double> one = #C15;
   static const field self::E2<core::String, core::int, core::double> two = #C17;
   static const field self::E2<core::double, core::bool, dynamic> three = #C21;
-  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, has-declared-initializer self::E2::Z? baz = #C9}) → 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/enhanced_enums/named_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
index 7e7d8fa..18e6b35 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
@@ -33,7 +33,7 @@
   static const field self::E2<core::int, core::String, core::double> one = #C15;
   static const field self::E2<core::String, core::int, core::double> two = #C17;
   static const field self::E2<core::double, core::bool, dynamic> three = #C21;
-  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, has-declared-initializer self::E2::Z? baz = #C9}) → 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/enhanced_enums/named_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
index 7e7d8fa..18e6b35 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
@@ -33,7 +33,7 @@
   static const field self::E2<core::int, core::String, core::double> one = #C15;
   static const field self::E2<core::String, core::int, core::double> two = #C17;
   static const field self::E2<core::double, core::bool, dynamic> three = #C21;
-  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, has-declared-initializer self::E2::Z? baz = #C9}) → 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/enhanced_enums/named_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
index 593c828..927a4e3 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
@@ -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, 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, 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/enhanced_enums/named_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
index 7e7d8fa..18e6b35 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
   static const field self::E2<core::int, core::String, core::double> one = #C15;
   static const field self::E2<core::String, core::int, core::double> two = #C17;
   static const field self::E2<core::double, core::bool, dynamic> three = #C21;
-  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
+  const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, has-declared-initializer self::E2::Z? baz = #C9}) → 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/expression/class_type_param_reference_var.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
index a77652b..7ce7b80 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return () → #lib1::A::T? {
-    #lib1::A::T? k = null;
+    has-declared-initializer #lib1::A::T? k = null;
     return k;
   };
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
index b4a7d36..0f18ef0 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
   return () → Null {
-    #lib1::A::debugExpr::T? k = null;
+    has-declared-initializer #lib1::A::debugExpr::T? k = null;
     k = #lib1::id<#lib1::A::debugExpr::T?>(k);
   };
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
index 2b35841..fa611da 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
   return () → Null {
-    #lib1::A::debugExpr::T? x = null;
+    has-declared-initializer #lib1::A::debugExpr::T? x = null;
   };
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/compounds.dart.weak.outline.expect
index 3bfb031..dfddc05 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.weak.outline.expect
@@ -102,5 +102,5 @@
   ;
 static method testExplicitNullAwareIntProperties(self::IntClass* v) → dynamic
   ;
-static method expect(dynamic expected, dynamic actual, [dynamic expectNull]) → dynamic
+static method expect(dynamic expected, dynamic actual, [has-declared-initializer dynamic expectNull]) → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/default_values.dart.weak.outline.expect
index 9469573..a200896 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.weak.outline.expect
@@ -31,15 +31,15 @@
   ;
 static method Extension|get#method0(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic a]) → dynamic => self::Extension|method0(#this, a);
-static method Extension|method1(lowered final self::Class* #this, [dynamic a]) → dynamic
+static method Extension|method1(lowered final self::Class* #this, [has-declared-initializer dynamic a]) → dynamic
   ;
 static method Extension|get#method1(lowered final self::Class* #this) → ([dynamic]) →* dynamic
   return ([dynamic a]) → dynamic => self::Extension|method1(#this, a);
-static method Extension|method2(lowered final self::Class* #this, {dynamic b}) → dynamic
+static method Extension|method2(lowered final self::Class* #this, {has-declared-initializer dynamic b}) → dynamic
   ;
 static method Extension|get#method2(lowered final self::Class* #this) → ({b: dynamic}) →* dynamic
   return ({dynamic b}) → dynamic => self::Extension|method2(#this, b: b);
-static method Extension|method3(lowered final self::Class* #this, {dynamic c}) → dynamic
+static method Extension|method3(lowered final self::Class* #this, {has-declared-initializer dynamic c}) → dynamic
   ;
 static method Extension|get#method3(lowered final self::Class* #this) → ({c: dynamic}) →* dynamic
   return ({dynamic c}) → dynamic => self::Extension|method3(#this, c: c);
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
index 1539e4a..eb86a4d 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.expect
@@ -57,18 +57,18 @@
 }
 static field invalid-type E|field1 = null;
 static field core::int? E|field2 = (() → Null {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
   return null;
 })(){() → Null};
 static field core::List<invalid-type>? E|field3 = null;
 static field (invalid-type) →? invalid-type E|field4 = null;
 static field (core::List<invalid-type>) →? core::List<invalid-type> E|field5 = null;
 static field core::int? E|field6 = (<E extends core::Object? = dynamic>() → Null {
-  E? x = null;
+  has-declared-initializer E? x = null;
   return null;
 })<core::String>(){() → Null};
 static field core::int? E|field7 = (<E extends core::Object? = dynamic>() → Null {
-  E? x = null;
+  has-declared-initializer E? x = null;
   return null;
 })<invalid-type>(){() → Null};
 static field core::Type E|field8 = #C1;
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.modular.expect
index 1539e4a..eb86a4d 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.modular.expect
@@ -57,18 +57,18 @@
 }
 static field invalid-type E|field1 = null;
 static field core::int? E|field2 = (() → Null {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
   return null;
 })(){() → Null};
 static field core::List<invalid-type>? E|field3 = null;
 static field (invalid-type) →? invalid-type E|field4 = null;
 static field (core::List<invalid-type>) →? core::List<invalid-type> E|field5 = null;
 static field core::int? E|field6 = (<E extends core::Object? = dynamic>() → Null {
-  E? x = null;
+  has-declared-initializer E? x = null;
   return null;
 })<core::String>(){() → Null};
 static field core::int? E|field7 = (<E extends core::Object? = dynamic>() → Null {
-  E? x = null;
+  has-declared-initializer E? x = null;
   return null;
 })<invalid-type>(){() → Null};
 static field core::Type E|field8 = #C1;
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
index 1539e4a..eb86a4d 100644
--- a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.transformed.expect
@@ -57,18 +57,18 @@
 }
 static field invalid-type E|field1 = null;
 static field core::int? E|field2 = (() → Null {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
   return null;
 })(){() → Null};
 static field core::List<invalid-type>? E|field3 = null;
 static field (invalid-type) →? invalid-type E|field4 = null;
 static field (core::List<invalid-type>) →? core::List<invalid-type> E|field5 = null;
 static field core::int? E|field6 = (<E extends core::Object? = dynamic>() → Null {
-  E? x = null;
+  has-declared-initializer E? x = null;
   return null;
 })<core::String>(){() → Null};
 static field core::int? E|field7 = (<E extends core::Object? = dynamic>() → Null {
-  E? x = null;
+  has-declared-initializer E? x = null;
   return null;
 })<invalid-type>(){() → Null};
 static field core::Type E|field8 = #C1;
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
index 9811ed6..d2d6b51 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
@@ -34,7 +34,7 @@
   self::expect(null, let final self::GenericClass<core::int*>* #t1 = invalid-expression "pkg/front_end/testcases/extensions/extension_setter_error.dart:13:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
   expect(null, GenericExtension<double>(genericClass).setter = null);
-                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double*>(#t1, #t2) in #t2);
+                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final has-declared-initializer Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double*>(#t1, #t2) in #t2);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect
index 9811ed6..d2d6b51 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect
@@ -34,7 +34,7 @@
   self::expect(null, let final self::GenericClass<core::int*>* #t1 = invalid-expression "pkg/front_end/testcases/extensions/extension_setter_error.dart:13:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
   expect(null, GenericExtension<double>(genericClass).setter = null);
-                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double*>(#t1, #t2) in #t2);
+                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final has-declared-initializer Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double*>(#t1, #t2) in #t2);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue38915.dart.weak.outline.expect
index 0d8feca..7a5e057 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.weak.outline.expect
@@ -26,19 +26,19 @@
   method method4 = self::Extension|method4;
   tearoff method4 = self::Extension|get#method4;
 }
-static method Extension|method1(lowered final self::Class* #this, {core::bool* b, core::String* s}) → void
+static method Extension|method1(lowered final self::Class* #this, {has-declared-initializer core::bool* b, has-declared-initializer core::String* s}) → void
   ;
 static method Extension|get#method1(lowered final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
   return ({core::bool* b, core::String* s}) → void => self::Extension|method1(#this, b: b, s: s);
-static method Extension|method2(lowered final self::Class* #this, [core::bool* b, core::String* s]) → void
+static method Extension|method2(lowered final self::Class* #this, [has-declared-initializer core::bool* b, has-declared-initializer core::String* s]) → void
   ;
 static method Extension|get#method2(lowered final self::Class* #this) → ([core::bool*, core::String*]) →* void
   return ([core::bool* b, core::String* s]) → void => self::Extension|method2(#this, b, s);
-static method Extension|method3(lowered final self::Class* #this, core::int* i, {core::bool* b, core::String* s}) → void
+static method Extension|method3(lowered final self::Class* #this, core::int* i, {has-declared-initializer core::bool* b, has-declared-initializer core::String* s}) → void
   ;
 static method Extension|get#method3(lowered final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
   return (core::int* i, {core::bool* b, core::String* s}) → void => self::Extension|method3(#this, i, b: b, s: s);
-static method Extension|method4(lowered final self::Class* #this, core::int* i, [core::bool* b, core::String* s]) → void
+static method Extension|method4(lowered final self::Class* #this, core::int* i, [has-declared-initializer core::bool* b, has-declared-initializer core::String* s]) → void
   ;
 static method Extension|get#method4(lowered final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
   return (core::int* i, [core::bool* b, core::String* s]) → void => self::Extension|method4(#this, i, b, s);
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.weak.expect b/pkg/front_end/testcases/extensions/null_aware.dart.weak.expect
index 31cc462..8d2b2f8 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.weak.expect
@@ -56,13 +56,13 @@
   self::expect(null, tearOff(){() →* core::int*});
   self::expect(42, let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : let final core::int* #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20, #t21) in #t21);
   self::expect(42, tearOff(){() →* core::int*});
-  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
+  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final has-declared-initializer Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
   self::expect(42, let final self::Class* #t26 = c in #t26 == null ?{core::int*} null : let final core::int* #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26, #t27) in #t27);
   let final self::Class* #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29, null);
   self::expect(null, let final self::Class* #t30 = c in #t30 == null ?{core::int*} null : self::Extension|get#property(#t30));
   self::expect(42, let final self::Class* #t31 = c in let final core::int* #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int*} let final core::int* #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32);
   self::expect(42, let final self::Class* #t35 = c in let final core::int* #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int*} let final core::int* #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36);
-  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
+  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
   let final self::Class* #t42 = c in self::Extension|get#property(#t42) == null ?{core::int*} self::Extension|set#property(#t42, 42) : null;
   self::expect(42, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : self::Extension|get#property(#t43));
   let final self::Class* #t44 = c in self::Extension|get#property(#t44) == null ?{core::int*} self::Extension|set#property(#t44, 87) : null;
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/null_aware.dart.weak.modular.expect
index 31cc462..8d2b2f8 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.weak.modular.expect
@@ -56,13 +56,13 @@
   self::expect(null, tearOff(){() →* core::int*});
   self::expect(42, let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : let final core::int* #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20, #t21) in #t21);
   self::expect(42, tearOff(){() →* core::int*});
-  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
+  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final has-declared-initializer Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
   self::expect(42, let final self::Class* #t26 = c in #t26 == null ?{core::int*} null : let final core::int* #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26, #t27) in #t27);
   let final self::Class* #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29, null);
   self::expect(null, let final self::Class* #t30 = c in #t30 == null ?{core::int*} null : self::Extension|get#property(#t30));
   self::expect(42, let final self::Class* #t31 = c in let final core::int* #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int*} let final core::int* #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32);
   self::expect(42, let final self::Class* #t35 = c in let final core::int* #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int*} let final core::int* #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36);
-  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
+  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
   let final self::Class* #t42 = c in self::Extension|get#property(#t42) == null ?{core::int*} self::Extension|set#property(#t42, 42) : null;
   self::expect(42, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : self::Extension|get#property(#t43));
   let final self::Class* #t44 = c in self::Extension|get#property(#t44) == null ?{core::int*} self::Extension|set#property(#t44, 87) : null;
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
index 6ea809e..b635d6c 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
@@ -56,13 +56,13 @@
   self::expect(null, tearOff(){() →* core::int*});
   self::expect(42, let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : let final core::int* #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20, #t21) in #t21);
   self::expect(42, tearOff(){() →* core::int*});
-  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
+  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final has-declared-initializer Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
   self::expect(42, let final self::Class* #t26 = c in #t26 == null ?{core::int*} null : let final core::int* #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26, #t27) in #t27);
   let final self::Class* #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29, null);
   self::expect(null, let final self::Class* #t30 = c in #t30 == null ?{core::int*} null : self::Extension|get#property(#t30));
   self::expect(42, let final self::Class* #t31 = c in let final core::int* #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int*} let final core::int* #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32);
   self::expect(42, let final self::Class* #t35 = c in let final core::int* #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int*} let final core::int* #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36);
-  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
+  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
   let final self::Class* #t42 = c in self::Extension|get#property(#t42) == null ?{core::int*} self::Extension|set#property(#t42, 42) : null;
   self::expect(42, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : self::Extension|get#property(#t43));
   let final self::Class* #t44 = c in self::Extension|get#property(#t44) == null ?{core::int*} self::Extension|set#property(#t44, 87) : null;
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
index 8b0ef07..461b238 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
@@ -383,9 +383,9 @@
 }
 static method chainTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable? prev = null;
-  self::Variable? first = null;
-  self::Variable? last = null;
+  has-declared-initializer self::Variable? prev = null;
+  has-declared-initializer self::Variable? first = null;
+  has-declared-initializer self::Variable? last = null;
   for (core::int i = 0; i.{core::num::<=}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     self::Variable v = new self::Variable::•("v${i}", 0);
     if(!(prev == null))
@@ -412,8 +412,8 @@
   self::planner = new self::Planner::•();
   self::Variable scale = new self::Variable::•("scale", 10);
   self::Variable offset = new self::Variable::•("offset", 1000);
-  self::Variable? src = null;
-  self::Variable? dst = null;
+  has-declared-initializer self::Variable? src = null;
+  has-declared-initializer self::Variable? dst = null;
   core::List<self::Variable> dests = <self::Variable>[];
   for (core::int i = 0; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     src = new self::Variable::•("src", i);
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect
index 8b0ef07..461b238 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect
@@ -383,9 +383,9 @@
 }
 static method chainTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable? prev = null;
-  self::Variable? first = null;
-  self::Variable? last = null;
+  has-declared-initializer self::Variable? prev = null;
+  has-declared-initializer self::Variable? first = null;
+  has-declared-initializer self::Variable? last = null;
   for (core::int i = 0; i.{core::num::<=}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     self::Variable v = new self::Variable::•("v${i}", 0);
     if(!(prev == null))
@@ -412,8 +412,8 @@
   self::planner = new self::Planner::•();
   self::Variable scale = new self::Variable::•("scale", 10);
   self::Variable offset = new self::Variable::•("offset", 1000);
-  self::Variable? src = null;
-  self::Variable? dst = null;
+  has-declared-initializer self::Variable? src = null;
+  has-declared-initializer self::Variable? dst = null;
   core::List<self::Variable> dests = <self::Variable>[];
   for (core::int i = 0; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     src = new self::Variable::•("src", i);
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
index f39595d..67cdcf7 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
@@ -383,9 +383,9 @@
 }
 static method chainTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable? prev = null;
-  self::Variable? first = null;
-  self::Variable? last = null;
+  has-declared-initializer self::Variable? prev = null;
+  has-declared-initializer self::Variable? first = null;
+  has-declared-initializer self::Variable? last = null;
   for (core::int i = 0; i.{core::num::<=}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     self::Variable v = new self::Variable::•("v${i}", 0);
     if(!(prev == null))
@@ -412,8 +412,8 @@
   self::planner = new self::Planner::•();
   self::Variable scale = new self::Variable::•("scale", 10);
   self::Variable offset = new self::Variable::•("offset", 1000);
-  self::Variable? src = null;
-  self::Variable? dst = null;
+  has-declared-initializer self::Variable? src = null;
+  has-declared-initializer self::Variable? dst = null;
   core::List<self::Variable> dests = core::_GrowableList::•<self::Variable>(0);
   for (core::int i = 0; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     src = new self::Variable::•("src", i);
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
index 01a1fee..7af3671 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
@@ -441,7 +441,7 @@
                 core::int #t33;
                 #L8:
                 while (true) {
-                  core::int i;
+                  has-declared-initializer core::int i;
                   if(#t32) {
                     #t32 = false;
                     [yield] let dynamic #t34 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.expect
index a82addd..60d0e878 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.expect
@@ -15,7 +15,7 @@
 static method main() → dynamic
   return self::test();
 static method test() → dynamic {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect
index a82addd..60d0e878 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect
@@ -15,7 +15,7 @@
 static method main() → dynamic
   return self::test();
 static method test() → dynamic {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.transformed.expect
index a82addd..60d0e878 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
 static method main() → dynamic
   return self::test();
 static method test() → dynamic {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
index 52401e8..7bea2cf 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
@@ -516,7 +516,7 @@
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t13 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t13 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t12.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t12;
@@ -534,7 +534,7 @@
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t16 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, dynamic>* #t17 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, dynamic>* #t17 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
         #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String*}, #t17.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
     #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
   } =>#t16;
@@ -552,7 +552,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t20 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t21 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t21 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String*}, #t21.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t20;
@@ -573,7 +573,7 @@
     final core::Map<core::String*, core::int*>* #t24 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t25 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t25 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
           #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String*}, #t25.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t24;
@@ -594,7 +594,7 @@
     final core::Map<core::String*, dynamic>* #t28 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, dynamic>* #t29 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, dynamic>* #t29 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
           #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String*}, #t29.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
     #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
   } =>#t28;
@@ -615,7 +615,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t32.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
@@ -667,7 +667,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t42 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t43 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String*}, #t43.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t42;
@@ -685,7 +685,7 @@
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t47 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t47 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t46;
@@ -721,7 +721,7 @@
     final core::Map<core::String*, core::int*>* #t54 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t55 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t55 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
           #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String*}, #t55.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t54;
@@ -739,7 +739,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t58 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t59 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t59 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String*}, #t59.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t58;
@@ -760,7 +760,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String*}, #t63.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t62;
@@ -829,10 +829,10 @@
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t73 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::num*>* #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
         #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String*}, #t74.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     else
-      for (final core::MapEntry<core::String*, core::num*>* #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
         #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String*}, #t75.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
   } =>#t73;
@@ -880,7 +880,7 @@
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t81 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::num*>* #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
         #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String*}, #t82.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     else
       #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
@@ -906,7 +906,7 @@
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t86 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final dynamic #t87 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final has-declared-initializer dynamic #t87 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t88 = #t87 as{TypeError} core::int*;
         #t86.{core::List::add}{Invariant}(#t88){(core::int*) →* void};
       }
@@ -914,7 +914,7 @@
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t89 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final dynamic #t90 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final has-declared-initializer dynamic #t90 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t91 = #t90 as{TypeError} core::int*;
         #t89.{core::Set::add}{Invariant}(#t91){(core::int*) →* core::bool*};
       }
@@ -923,7 +923,7 @@
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t92 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<dynamic, dynamic>* #t93 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t93 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
         final core::String* #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
         final core::int* #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
         #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String*, core::int*) →* void};
@@ -988,7 +988,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t104 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String*}, #t105.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
@@ -1259,7 +1259,7 @@
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::int*>* #t134 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t134 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String*}, #t134.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t133;
@@ -1277,7 +1277,7 @@
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t137 = <core::String*, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, dynamic>* #t138 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, dynamic>* #t138 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
         #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String*}, #t138.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
     #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
   } =>#t137;
@@ -1295,7 +1295,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t141 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t142 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t142 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String*}, #t142.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t141;
@@ -1316,7 +1316,7 @@
     final core::Map<core::String*, core::int*>* #t145 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t146 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t146 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
           #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String*}, #t146.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t145;
@@ -1337,7 +1337,7 @@
     final core::Map<core::String*, dynamic>* #t149 = <core::String*, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, dynamic>* #t150 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, dynamic>* #t150 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
           #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String*}, #t150.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
     #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
   } =>#t149;
@@ -1358,7 +1358,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t153 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t154 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t154 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String*}, #t154.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t153;
@@ -1376,7 +1376,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t157 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t158 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t158 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String*}, #t158.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t157;
@@ -1414,7 +1414,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t165 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t166 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t166 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String*}, #t166.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t165;
@@ -1432,7 +1432,7 @@
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t169 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::int*>* #t170 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t170 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String*}, #t170.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t169;
@@ -1478,7 +1478,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t179 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t180 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t180 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String*}, #t180.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t179;
@@ -1499,7 +1499,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t183 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t184 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t184 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String*}, #t184.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t183;
@@ -1587,10 +1587,10 @@
     final core::Map<core::String*, core::num*>* #t196 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::num*>* #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
           #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String*}, #t197.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       else
-        for (final core::MapEntry<core::String*, core::num*>* #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
           #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String*}, #t198.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
   } =>#t196;
@@ -1615,10 +1615,10 @@
     final core::Map<dynamic, dynamic>* #t201 = <dynamic, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<dynamic, dynamic>* #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
           #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
       else
-        for (final core::MapEntry<dynamic, dynamic>* #t203 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t203 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
           #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) →* void};
   } =>#t201;
@@ -1643,7 +1643,7 @@
     final core::Map<core::String*, core::num*>* #t206 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::num*>* #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
           #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       else
         #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
@@ -1669,7 +1669,7 @@
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t211 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final dynamic #t212 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final has-declared-initializer dynamic #t212 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t213 = #t212 as{TypeError} core::int*;
         #t211.{core::List::add}{Invariant}(#t213){(core::int*) →* void};
       }
@@ -1677,7 +1677,7 @@
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t214 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final dynamic #t215 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final has-declared-initializer dynamic #t215 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t216 = #t215 as{TypeError} core::int*;
         #t214.{core::Set::add}{Invariant}(#t216){(core::int*) →* core::bool*};
       }
@@ -1686,7 +1686,7 @@
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t217 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<dynamic, dynamic>* #t218 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t218 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
         final core::String* #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
         final core::int* #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
         #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String*, core::int*) →* void};
@@ -1804,7 +1804,7 @@
   block {
     final core::Map<core::int*, core::int*>* #t241 = <core::int*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final has-declared-initializer core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect
index 52401e8..7bea2cf 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect
@@ -516,7 +516,7 @@
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t13 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t13 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t12.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t12;
@@ -534,7 +534,7 @@
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t16 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, dynamic>* #t17 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, dynamic>* #t17 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
         #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String*}, #t17.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
     #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
   } =>#t16;
@@ -552,7 +552,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t20 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t21 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t21 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String*}, #t21.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t20;
@@ -573,7 +573,7 @@
     final core::Map<core::String*, core::int*>* #t24 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t25 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t25 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
           #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String*}, #t25.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t24;
@@ -594,7 +594,7 @@
     final core::Map<core::String*, dynamic>* #t28 = <core::String*, dynamic>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, dynamic>* #t29 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, dynamic>* #t29 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
           #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String*}, #t29.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
     #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
   } =>#t28;
@@ -615,7 +615,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t32.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
@@ -667,7 +667,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t42 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t43 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String*}, #t43.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t42;
@@ -685,7 +685,7 @@
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t47 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t47 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t46;
@@ -721,7 +721,7 @@
     final core::Map<core::String*, core::int*>* #t54 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t55 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t55 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
           #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String*}, #t55.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t54;
@@ -739,7 +739,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t58 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t59 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t59 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String*}, #t59.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t58;
@@ -760,7 +760,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String*}, #t63.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t62;
@@ -829,10 +829,10 @@
   core::Map<core::String*, core::num*>* map81 = block {
     final core::Map<core::String*, core::num*>* #t73 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::num*>* #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
         #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String*}, #t74.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     else
-      for (final core::MapEntry<core::String*, core::num*>* #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
         #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String*}, #t75.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
   } =>#t73;
@@ -880,7 +880,7 @@
   core::Map<core::String*, core::num*>* map83 = block {
     final core::Map<core::String*, core::num*>* #t81 = <core::String*, core::num*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::num*>* #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
         #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String*}, #t82.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     else
       #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
@@ -906,7 +906,7 @@
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t86 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final dynamic #t87 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final has-declared-initializer dynamic #t87 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t88 = #t87 as{TypeError} core::int*;
         #t86.{core::List::add}{Invariant}(#t88){(core::int*) →* void};
       }
@@ -914,7 +914,7 @@
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t89 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final dynamic #t90 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final has-declared-initializer dynamic #t90 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t91 = #t90 as{TypeError} core::int*;
         #t89.{core::Set::add}{Invariant}(#t91){(core::int*) →* core::bool*};
       }
@@ -923,7 +923,7 @@
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t92 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<dynamic, dynamic>* #t93 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t93 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
         final core::String* #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
         final core::int* #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
         #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String*, core::int*) →* void};
@@ -988,7 +988,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t104 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String*}, #t105.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
@@ -1259,7 +1259,7 @@
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::int*>* #t134 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t134 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String*}, #t134.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t133;
@@ -1277,7 +1277,7 @@
   core::Map<core::String*, dynamic>* map21 = block {
     final core::Map<core::String*, dynamic>* #t137 = <core::String*, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, dynamic>* #t138 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, dynamic>* #t138 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
         #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String*}, #t138.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
     #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
   } =>#t137;
@@ -1295,7 +1295,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map22 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t141 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t142 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t142 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String*}, #t142.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t141;
@@ -1316,7 +1316,7 @@
     final core::Map<core::String*, core::int*>* #t145 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::int*>* #t146 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t146 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
           #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String*}, #t146.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t145;
@@ -1337,7 +1337,7 @@
     final core::Map<core::String*, dynamic>* #t149 = <core::String*, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, dynamic>* #t150 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, dynamic>* #t150 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
           #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String*}, #t150.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
     #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
   } =>#t149;
@@ -1358,7 +1358,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t153 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t154 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t154 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String*}, #t154.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t153;
@@ -1376,7 +1376,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map40 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t157 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t158 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t158 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String*}, #t158.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t157;
@@ -1414,7 +1414,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t165 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t166 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t166 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String*}, #t166.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t165;
@@ -1432,7 +1432,7 @@
   core::Map<core::String*, core::int*>* map50 = block {
     final core::Map<core::String*, core::int*>* #t169 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::int*>* #t170 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t170 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String*}, #t170.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
   } =>#t169;
@@ -1478,7 +1478,7 @@
   core::Map<core::String*, core::List<core::int*>*>* map60 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t179 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t180 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t180 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
         #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String*}, #t180.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t179;
@@ -1499,7 +1499,7 @@
     final core::Map<core::String*, core::List<core::int*>*>* #t183 = <core::String*, core::List<core::int*>*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t184 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t184 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
           #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String*}, #t184.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
     #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
   } =>#t183;
@@ -1587,10 +1587,10 @@
     final core::Map<core::String*, core::num*>* #t196 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::num*>* #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
           #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String*}, #t197.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       else
-        for (final core::MapEntry<core::String*, core::num*>* #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
           #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String*}, #t198.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
     #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
   } =>#t196;
@@ -1615,10 +1615,10 @@
     final core::Map<dynamic, dynamic>* #t201 = <dynamic, dynamic>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<dynamic, dynamic>* #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
           #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
       else
-        for (final core::MapEntry<dynamic, dynamic>* #t203 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t203 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
           #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) →* void};
   } =>#t201;
@@ -1643,7 +1643,7 @@
     final core::Map<core::String*, core::num*>* #t206 = <core::String*, core::num*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        for (final core::MapEntry<core::String*, core::num*>* #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        for (final has-declared-initializer core::MapEntry<core::String*, core::num*>* #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
           #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
       else
         #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
@@ -1669,7 +1669,7 @@
   core::List<core::int*>* list91 = block {
     final core::List<core::int*>* #t211 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final dynamic #t212 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final has-declared-initializer dynamic #t212 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t213 = #t212 as{TypeError} core::int*;
         #t211.{core::List::add}{Invariant}(#t213){(core::int*) →* void};
       }
@@ -1677,7 +1677,7 @@
   core::Set<core::int*>* set91 = block {
     final core::Set<core::int*>* #t214 = col::LinkedHashSet::•<core::int*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final dynamic #t215 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      for (final has-declared-initializer dynamic #t215 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t216 = #t215 as{TypeError} core::int*;
         #t214.{core::Set::add}{Invariant}(#t216){(core::int*) →* core::bool*};
       }
@@ -1686,7 +1686,7 @@
   core::Map<core::String*, core::int*>* map91 = block {
     final core::Map<core::String*, core::int*>* #t217 = <core::String*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<dynamic, dynamic>* #t218 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t218 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
         final core::String* #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
         final core::int* #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
         #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String*, core::int*) →* void};
@@ -1804,7 +1804,7 @@
   block {
     final core::Map<core::int*, core::int*>* #t241 = <core::int*, core::int*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final has-declared-initializer core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect
index 2596bcd0..8e550b8 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect
@@ -506,7 +506,7 @@
   core::Map<core::String, core::int?> map20 = block {
     final core::Map<core::String, core::int?> #t12 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::int?> #t13 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t13 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String}, #t13.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t12.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t12;
@@ -524,7 +524,7 @@
   core::Map<core::String, dynamic> map21 = block {
     final core::Map<core::String, dynamic> #t16 = <core::String, dynamic>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, dynamic> #t17 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<core::String, dynamic> #t17 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
         #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String}, #t17.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
     #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
   } =>#t16;
@@ -542,7 +542,7 @@
   core::Map<core::String, core::List<core::int>?> map22 = block {
     final core::Map<core::String, core::List<core::int>?> #t20 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t21 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t21 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String}, #t21.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t20;
@@ -563,7 +563,7 @@
     final core::Map<core::String, core::int?> #t24 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::int?> #t25 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t25 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
           #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String}, #t25.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t24;
@@ -584,7 +584,7 @@
     final core::Map<core::String, dynamic> #t28 = <core::String, dynamic>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, dynamic> #t29 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<core::String, dynamic> #t29 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
           #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String}, #t29.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
     #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
   } =>#t28;
@@ -605,7 +605,7 @@
     final core::Map<core::String, core::List<core::int>?> #t32 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t33 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t33 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String}, #t33.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t32.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t32;
@@ -657,7 +657,7 @@
     final core::Map<core::String, core::List<core::int>?> #t42 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t43 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t43 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String}, #t43.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t42;
@@ -675,7 +675,7 @@
   core::Map<core::String, core::int?> map50 = block {
     final core::Map<core::String, core::int?> #t46 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::int?> #t47 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t47 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String}, #t47.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t46;
@@ -711,7 +711,7 @@
     final core::Map<core::String, core::int?> #t54 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::int?> #t55 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t55 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
           #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String}, #t55.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t54;
@@ -729,7 +729,7 @@
   core::Map<core::String, core::List<core::int>?> map60 = block {
     final core::Map<core::String, core::List<core::int>?> #t58 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t59 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t59 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String}, #t59.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t58;
@@ -750,7 +750,7 @@
     final core::Map<core::String, core::List<core::int>?> #t62 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t63 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t63 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String}, #t63.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t62;
@@ -819,10 +819,10 @@
   core::Map<core::String, core::num?> map81 = block {
     final core::Map<core::String, core::num?> #t73 = <core::String, core::num?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::num?> #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
         #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String}, #t74.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
     else
-      for (final core::MapEntry<core::String, core::num?> #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
         #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String}, #t75.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
     #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
   } =>#t73;
@@ -870,7 +870,7 @@
   core::Map<core::String, core::num?> map83 = block {
     final core::Map<core::String, core::num?> #t81 = <core::String, core::num?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::num?> #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
         #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String}, #t82.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
     else
       #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
@@ -896,7 +896,7 @@
   core::List<core::int> list91 = block {
     final core::List<core::int> #t86 = <core::int>[];
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final dynamic #t87 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      for (final has-declared-initializer dynamic #t87 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         final core::int #t88 = #t87 as{TypeError,ForNonNullableByDefault} core::int;
         #t86.{core::List::add}{Invariant}(#t88){(core::int) → void};
       }
@@ -904,7 +904,7 @@
   core::Set<core::int?> set91 = block {
     final core::Set<core::int?> #t89 = col::LinkedHashSet::•<core::int?>();
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final dynamic #t90 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      for (final has-declared-initializer dynamic #t90 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         final core::int? #t91 = #t90 as{TypeError,ForNonNullableByDefault} core::int?;
         #t89.{core::Set::add}{Invariant}(#t91){(core::int?) → core::bool};
       }
@@ -913,7 +913,7 @@
   core::Map<core::String, core::int?> map91 = block {
     final core::Map<core::String, core::int?> #t92 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<dynamic, dynamic> #t93 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t93 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
         final core::String #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
         final core::int? #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
         #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String, core::int?) → void};
@@ -978,7 +978,7 @@
   block {
     final core::Map<core::String, core::int?> #t104 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::int?> #t105 in <core::String, core::int?>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t105 in <core::String, core::int?>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   <String, int?>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String}, #t105.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
@@ -1249,7 +1249,7 @@
   core::Map<core::String, core::int?> map20 = block {
     final core::Map<core::String, core::int?> #t133 = <core::String, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::int?> #t134 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t134 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String}, #t134.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t133;
@@ -1267,7 +1267,7 @@
   core::Map<core::String, dynamic> map21 = block {
     final core::Map<core::String, dynamic> #t137 = <core::String, dynamic>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, dynamic> #t138 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<core::String, dynamic> #t138 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
         #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String}, #t138.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
     #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
   } =>#t137;
@@ -1285,7 +1285,7 @@
   core::Map<core::String, core::List<core::int>?> map22 = block {
     final core::Map<core::String, core::List<core::int>?> #t141 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t142 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t142 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String}, #t142.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t141;
@@ -1306,7 +1306,7 @@
     final core::Map<core::String, core::int?> #t145 = <core::String, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::int?> #t146 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t146 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
           #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String}, #t146.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t145;
@@ -1327,7 +1327,7 @@
     final core::Map<core::String, dynamic> #t149 = <core::String, dynamic>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, dynamic> #t150 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<core::String, dynamic> #t150 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
           #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String}, #t150.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
     #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
   } =>#t149;
@@ -1348,7 +1348,7 @@
     final core::Map<core::String, core::List<core::int>?> #t153 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t154 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t154 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String}, #t154.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t153;
@@ -1366,7 +1366,7 @@
   core::Map<core::String, core::List<core::int>?> map40 = block {
     final core::Map<core::String, core::List<core::int>?> #t157 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t158 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t158 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String}, #t158.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t157;
@@ -1404,7 +1404,7 @@
     final core::Map<core::String, core::List<core::int>?> #t165 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t166 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t166 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String}, #t166.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t165;
@@ -1422,7 +1422,7 @@
   core::Map<core::String, core::int?> map50 = block {
     final core::Map<core::String, core::int?> #t169 = <core::String, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::int?> #t170 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t170 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String}, #t170.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t169;
@@ -1468,7 +1468,7 @@
   core::Map<core::String, core::List<core::int>?> map60 = block {
     final core::Map<core::String, core::List<core::int>?> #t179 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t180 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t180 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String}, #t180.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t179;
@@ -1489,7 +1489,7 @@
     final core::Map<core::String, core::List<core::int>?> #t183 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t184 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t184 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String}, #t184.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t183;
@@ -1577,10 +1577,10 @@
     final core::Map<core::String, core::num?> #t196 = <core::String, core::num?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::num?> #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
           #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String}, #t197.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
       else
-        for (final core::MapEntry<core::String, core::num?> #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
           #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String}, #t198.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
     #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
   } =>#t196;
@@ -1605,10 +1605,10 @@
     final core::Map<dynamic, dynamic> #t201 = <dynamic, dynamic>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<dynamic, dynamic> #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
           #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
       else
-        for (final core::MapEntry<dynamic, dynamic> #t203 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t203 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
           #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) → void};
   } =>#t201;
@@ -1633,7 +1633,7 @@
     final core::Map<core::String, core::num?> #t206 = <core::String, core::num?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::num?> #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
           #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String}, #t207.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
       else
         #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
@@ -1659,7 +1659,7 @@
   core::List<core::int> list91 = block {
     final core::List<core::int> #t211 = <core::int>[];
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t212 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      for (final has-declared-initializer dynamic #t212 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         final core::int #t213 = #t212 as{TypeError,ForNonNullableByDefault} core::int;
         #t211.{core::List::add}{Invariant}(#t213){(core::int) → void};
       }
@@ -1667,7 +1667,7 @@
   core::Set<core::int?> set91 = block {
     final core::Set<core::int?> #t214 = col::LinkedHashSet::•<core::int?>();
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t215 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      for (final has-declared-initializer dynamic #t215 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         final core::int? #t216 = #t215 as{TypeError,ForNonNullableByDefault} core::int?;
         #t214.{core::Set::add}{Invariant}(#t216){(core::int?) → core::bool};
       }
@@ -1676,7 +1676,7 @@
   core::Map<core::String, core::int?> map91 = block {
     final core::Map<core::String, core::int?> #t217 = <core::String, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<dynamic, dynamic> #t218 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t218 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
         final core::String #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
         final core::int? #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
         #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String, core::int?) → void};
@@ -1794,7 +1794,7 @@
   block {
     final core::Map<core::int, core::int?> #t241 = <core::int, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::int, core::int?> #t242 in <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final has-declared-initializer core::MapEntry<core::int, core::int?> #t242 in <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                       ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect
index 2596bcd0..8e550b8 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect
@@ -506,7 +506,7 @@
   core::Map<core::String, core::int?> map20 = block {
     final core::Map<core::String, core::int?> #t12 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::int?> #t13 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t13 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String}, #t13.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t12.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t12;
@@ -524,7 +524,7 @@
   core::Map<core::String, dynamic> map21 = block {
     final core::Map<core::String, dynamic> #t16 = <core::String, dynamic>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, dynamic> #t17 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<core::String, dynamic> #t17 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
         #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String}, #t17.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
     #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
   } =>#t16;
@@ -542,7 +542,7 @@
   core::Map<core::String, core::List<core::int>?> map22 = block {
     final core::Map<core::String, core::List<core::int>?> #t20 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t21 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t21 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String}, #t21.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t20;
@@ -563,7 +563,7 @@
     final core::Map<core::String, core::int?> #t24 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::int?> #t25 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t25 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
           #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String}, #t25.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t24;
@@ -584,7 +584,7 @@
     final core::Map<core::String, dynamic> #t28 = <core::String, dynamic>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, dynamic> #t29 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<core::String, dynamic> #t29 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
           #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String}, #t29.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
     #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
   } =>#t28;
@@ -605,7 +605,7 @@
     final core::Map<core::String, core::List<core::int>?> #t32 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t33 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t33 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String}, #t33.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t32.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t32;
@@ -657,7 +657,7 @@
     final core::Map<core::String, core::List<core::int>?> #t42 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t43 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t43 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String}, #t43.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t42;
@@ -675,7 +675,7 @@
   core::Map<core::String, core::int?> map50 = block {
     final core::Map<core::String, core::int?> #t46 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::int?> #t47 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t47 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String}, #t47.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t46;
@@ -711,7 +711,7 @@
     final core::Map<core::String, core::int?> #t54 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::int?> #t55 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t55 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
           #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String}, #t55.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t54;
@@ -729,7 +729,7 @@
   core::Map<core::String, core::List<core::int>?> map60 = block {
     final core::Map<core::String, core::List<core::int>?> #t58 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t59 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t59 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String}, #t59.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t58;
@@ -750,7 +750,7 @@
     final core::Map<core::String, core::List<core::int>?> #t62 = <core::String, core::List<core::int>?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t63 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t63 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String}, #t63.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t62;
@@ -819,10 +819,10 @@
   core::Map<core::String, core::num?> map81 = block {
     final core::Map<core::String, core::num?> #t73 = <core::String, core::num?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::num?> #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
         #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String}, #t74.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
     else
-      for (final core::MapEntry<core::String, core::num?> #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
         #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String}, #t75.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
     #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
   } =>#t73;
@@ -870,7 +870,7 @@
   core::Map<core::String, core::num?> map83 = block {
     final core::Map<core::String, core::num?> #t81 = <core::String, core::num?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::num?> #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
         #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String}, #t82.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
     else
       #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
@@ -896,7 +896,7 @@
   core::List<core::int> list91 = block {
     final core::List<core::int> #t86 = <core::int>[];
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final dynamic #t87 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      for (final has-declared-initializer dynamic #t87 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         final core::int #t88 = #t87 as{TypeError,ForNonNullableByDefault} core::int;
         #t86.{core::List::add}{Invariant}(#t88){(core::int) → void};
       }
@@ -904,7 +904,7 @@
   core::Set<core::int?> set91 = block {
     final core::Set<core::int?> #t89 = col::LinkedHashSet::•<core::int?>();
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final dynamic #t90 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      for (final has-declared-initializer dynamic #t90 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         final core::int? #t91 = #t90 as{TypeError,ForNonNullableByDefault} core::int?;
         #t89.{core::Set::add}{Invariant}(#t91){(core::int?) → core::bool};
       }
@@ -913,7 +913,7 @@
   core::Map<core::String, core::int?> map91 = block {
     final core::Map<core::String, core::int?> #t92 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<dynamic, dynamic> #t93 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t93 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
         final core::String #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
         final core::int? #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
         #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String, core::int?) → void};
@@ -978,7 +978,7 @@
   block {
     final core::Map<core::String, core::int?> #t104 = <core::String, core::int?>{};
     if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-      for (final core::MapEntry<core::String, core::int?> #t105 in <core::String, core::int?>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t105 in <core::String, core::int?>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   <String, int?>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String}, #t105.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
@@ -1249,7 +1249,7 @@
   core::Map<core::String, core::int?> map20 = block {
     final core::Map<core::String, core::int?> #t133 = <core::String, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::int?> #t134 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t134 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String}, #t134.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t133;
@@ -1267,7 +1267,7 @@
   core::Map<core::String, dynamic> map21 = block {
     final core::Map<core::String, dynamic> #t137 = <core::String, dynamic>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, dynamic> #t138 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<core::String, dynamic> #t138 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
         #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String}, #t138.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
     #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
   } =>#t137;
@@ -1285,7 +1285,7 @@
   core::Map<core::String, core::List<core::int>?> map22 = block {
     final core::Map<core::String, core::List<core::int>?> #t141 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t142 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t142 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String}, #t142.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t141;
@@ -1306,7 +1306,7 @@
     final core::Map<core::String, core::int?> #t145 = <core::String, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::int?> #t146 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t146 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
           #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String}, #t146.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t145;
@@ -1327,7 +1327,7 @@
     final core::Map<core::String, dynamic> #t149 = <core::String, dynamic>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, dynamic> #t150 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<core::String, dynamic> #t150 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
           #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String}, #t150.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
     #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
   } =>#t149;
@@ -1348,7 +1348,7 @@
     final core::Map<core::String, core::List<core::int>?> #t153 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t154 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t154 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String}, #t154.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t153;
@@ -1366,7 +1366,7 @@
   core::Map<core::String, core::List<core::int>?> map40 = block {
     final core::Map<core::String, core::List<core::int>?> #t157 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t158 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t158 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String}, #t158.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t157;
@@ -1404,7 +1404,7 @@
     final core::Map<core::String, core::List<core::int>?> #t165 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t166 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t166 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String}, #t166.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t165;
@@ -1422,7 +1422,7 @@
   core::Map<core::String, core::int?> map50 = block {
     final core::Map<core::String, core::int?> #t169 = <core::String, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::int?> #t170 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int?> #t170 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
         #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String}, #t170.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
     #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
   } =>#t169;
@@ -1468,7 +1468,7 @@
   core::Map<core::String, core::List<core::int>?> map60 = block {
     final core::Map<core::String, core::List<core::int>?> #t179 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::String, core::List<core::int>?> #t180 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t180 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
         #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String}, #t180.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t179;
@@ -1489,7 +1489,7 @@
     final core::Map<core::String, core::List<core::int>?> #t183 = <core::String, core::List<core::int>?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::List<core::int>?> #t184 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>?> #t184 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
           #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String}, #t184.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
     #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
   } =>#t183;
@@ -1577,10 +1577,10 @@
     final core::Map<core::String, core::num?> #t196 = <core::String, core::num?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::num?> #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
           #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String}, #t197.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
       else
-        for (final core::MapEntry<core::String, core::num?> #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
           #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String}, #t198.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
     #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
   } =>#t196;
@@ -1605,10 +1605,10 @@
     final core::Map<dynamic, dynamic> #t201 = <dynamic, dynamic>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<dynamic, dynamic> #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
           #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
       else
-        for (final core::MapEntry<dynamic, dynamic> #t203 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t203 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
           #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) → void};
   } =>#t201;
@@ -1633,7 +1633,7 @@
     final core::Map<core::String, core::num?> #t206 = <core::String, core::num?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
-        for (final core::MapEntry<core::String, core::num?> #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        for (final has-declared-initializer core::MapEntry<core::String, core::num?> #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
           #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String}, #t207.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
       else
         #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
@@ -1659,7 +1659,7 @@
   core::List<core::int> list91 = block {
     final core::List<core::int> #t211 = <core::int>[];
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t212 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      for (final has-declared-initializer dynamic #t212 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         final core::int #t213 = #t212 as{TypeError,ForNonNullableByDefault} core::int;
         #t211.{core::List::add}{Invariant}(#t213){(core::int) → void};
       }
@@ -1667,7 +1667,7 @@
   core::Set<core::int?> set91 = block {
     final core::Set<core::int?> #t214 = col::LinkedHashSet::•<core::int?>();
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t215 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      for (final has-declared-initializer dynamic #t215 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
         final core::int? #t216 = #t215 as{TypeError,ForNonNullableByDefault} core::int?;
         #t214.{core::Set::add}{Invariant}(#t216){(core::int?) → core::bool};
       }
@@ -1676,7 +1676,7 @@
   core::Map<core::String, core::int?> map91 = block {
     final core::Map<core::String, core::int?> #t217 = <core::String, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<dynamic, dynamic> #t218 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t218 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
         final core::String #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
         final core::int? #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
         #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String, core::int?) → void};
@@ -1794,7 +1794,7 @@
   block {
     final core::Map<core::int, core::int?> #t241 = <core::int, core::int?>{};
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final core::MapEntry<core::int, core::int?> #t242 in <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final has-declared-initializer core::MapEntry<core::int, core::int?> #t242 in <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                       ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
diff --git a/pkg/front_end/testcases/general/default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/default_values.dart.weak.outline.expect
index 1ac5c52..e568250 100644
--- a/pkg/front_end/testcases/general/default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/default_values.dart.weak.outline.expect
@@ -1,7 +1,7 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 
-static method topLevel([dynamic a]) → dynamic
+static method topLevel([has-declared-initializer dynamic a]) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.outline.expect
index 85267ee..e4f53d9 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  static method m({core::int a}) → dynamic
+  static method m({has-declared-initializer core::int a}) → dynamic
     ;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
index 639b7a5..cc584f7 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
@@ -21,7 +21,7 @@
     : self2::Class::defaultValue = defaultValue, super core::Object::•()
     ;
   @_in::patch
-  external static factory fact({core::bool defaultValue}) → self2::Class;
+  external static factory fact({has-declared-initializer core::bool defaultValue}) → self2::Class;
   @_in::patch
   external static factory constFact({core::bool defaultValue = true}) → self2::Class;
   @_in::patch
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.expect
index 7f6fc7d..ca2d152 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.expect
@@ -17,6 +17,6 @@
 
 typedef F = ((core::String) → core::int) → core::int;
 static method main() → dynamic {
-  ((core::String) → core::int) →? core::int f = null;
-  ((core::int) → core::String) →? core::String g = null;
+  has-declared-initializer ((core::String) → core::int) →? core::int f = null;
+  has-declared-initializer ((core::int) → core::String) →? core::String g = null;
 }
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect
index 7f6fc7d..ca2d152 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect
@@ -17,6 +17,6 @@
 
 typedef F = ((core::String) → core::int) → core::int;
 static method main() → dynamic {
-  ((core::String) → core::int) →? core::int f = null;
-  ((core::int) → core::String) →? core::String g = null;
+  has-declared-initializer ((core::String) → core::int) →? core::int f = null;
+  has-declared-initializer ((core::int) → core::String) →? core::String g = null;
 }
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.transformed.expect
index 7f6fc7d..ca2d152 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.transformed.expect
@@ -17,6 +17,6 @@
 
 typedef F = ((core::String) → core::int) → core::int;
 static method main() → dynamic {
-  ((core::String) → core::int) →? core::int f = null;
-  ((core::int) → core::String) →? core::String g = null;
+  has-declared-initializer ((core::String) → core::int) →? core::int f = null;
+  has-declared-initializer ((core::int) → core::String) →? core::String g = null;
 }
diff --git a/pkg/front_end/testcases/general/getter_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/getter_call.dart.weak.outline.expect
index 9152257..d6bfb51 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.weak.outline.expect
@@ -75,13 +75,13 @@
   ;
 static method method3(core::int a, core::int b) → core::int
   ;
-static method method4(core::int a, [core::int b]) → core::int
+static method method4(core::int a, [has-declared-initializer core::int b]) → core::int
   ;
-static method method5([core::int a, core::int b]) → core::int
+static method method5([has-declared-initializer core::int a, has-declared-initializer core::int b]) → core::int
   ;
-static method method6(core::int a, {core::int b}) → core::int
+static method method6(core::int a, {has-declared-initializer core::int b}) → core::int
   ;
-static method method7({core::int a, core::int b}) → core::int
+static method method7({has-declared-initializer core::int a, has-declared-initializer core::int b}) → core::int
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue43721.dart.weak.expect b/pkg/front_end/testcases/general/issue43721.dart.weak.expect
index 4ca7943..0abf282 100644
--- a/pkg/front_end/testcases/general/issue43721.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue43721.dart.weak.expect
@@ -18,7 +18,7 @@
 static method ok<T extends FutureOr<core::num*>*>(self::ok::T* t) → dynamic {}
 static method error<T extends FutureOr<core::int*>*>(self::error::T* t) → dynamic {}
 static method bar(core::bool* condition) → dynamic {
-  FutureOr<core::int*>* x = null;
+  has-declared-initializer FutureOr<core::int*>* x = null;
   core::num* n = 1;
   FutureOr<core::num*>* z = condition ?{FutureOr<core::num*>*} x : n;
   self::ok<FutureOr<core::num*>*>(z);
diff --git a/pkg/front_end/testcases/general/issue43721.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43721.dart.weak.modular.expect
index 4ca7943..0abf282 100644
--- a/pkg/front_end/testcases/general/issue43721.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue43721.dart.weak.modular.expect
@@ -18,7 +18,7 @@
 static method ok<T extends FutureOr<core::num*>*>(self::ok::T* t) → dynamic {}
 static method error<T extends FutureOr<core::int*>*>(self::error::T* t) → dynamic {}
 static method bar(core::bool* condition) → dynamic {
-  FutureOr<core::int*>* x = null;
+  has-declared-initializer FutureOr<core::int*>* x = null;
   core::num* n = 1;
   FutureOr<core::num*>* z = condition ?{FutureOr<core::num*>*} x : n;
   self::ok<FutureOr<core::num*>*>(z);
diff --git a/pkg/front_end/testcases/general/issue43721.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue43721.dart.weak.transformed.expect
index 4ca7943..0abf282 100644
--- a/pkg/front_end/testcases/general/issue43721.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43721.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
 static method ok<T extends FutureOr<core::num*>*>(self::ok::T* t) → dynamic {}
 static method error<T extends FutureOr<core::int*>*>(self::error::T* t) → dynamic {}
 static method bar(core::bool* condition) → dynamic {
-  FutureOr<core::int*>* x = null;
+  has-declared-initializer FutureOr<core::int*>* x = null;
   core::num* n = 1;
   FutureOr<core::num*>* z = condition ?{FutureOr<core::num*>*} x : n;
   self::ok<FutureOr<core::num*>*>(z);
diff --git a/pkg/front_end/testcases/general/issue44654.dart.weak.expect b/pkg/front_end/testcases/general/issue44654.dart.weak.expect
index 0832149..9988f08 100644
--- a/pkg/front_end/testcases/general/issue44654.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue44654.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method test2() → void {
-  core::String* string = null;
+  has-declared-initializer core::String* string = null;
   if(let final core::String* #t1 = string in #t1 == null ?{core::bool*} null : #t1.{core::String::isNotEmpty}{core::bool*})
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue44654.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44654.dart.weak.modular.expect
index 0832149..9988f08 100644
--- a/pkg/front_end/testcases/general/issue44654.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue44654.dart.weak.modular.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method test2() → void {
-  core::String* string = null;
+  has-declared-initializer core::String* string = null;
   if(let final core::String* #t1 = string in #t1 == null ?{core::bool*} null : #t1.{core::String::isNotEmpty}{core::bool*})
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue44654.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue44654.dart.weak.transformed.expect
index 4f52310..ca57940 100644
--- a/pkg/front_end/testcases/general/issue44654.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue44654.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method test2() → void {
-  core::String* string = null;
+  has-declared-initializer core::String* string = null;
   if(let final core::String* #t1 = string in #t1 == null ?{core::bool*} null : #t1.{core::String::isNotEmpty}{core::bool*})
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect
index b89a67b..1ec4a4a 100644
--- a/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47462.dart.weak.outline.expect
@@ -9,15 +9,15 @@
   ;
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length]) → core::List<self::_#MyList#new#tearOff::T>
   return core::List::•<self::_#MyList#new#tearOff::T>(length);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable}) → core::List<self::_#MyList#filled#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {has-declared-initializer core::bool growable}) → core::List<self::_#MyList#filled#tearOff::T>
   return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable}) → core::List<self::_#MyList#empty#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({has-declared-initializer core::bool growable}) → core::List<self::_#MyList#empty#tearOff::T>
   return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<self::_#MyList#from#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {has-declared-initializer core::bool growable}) → core::List<self::_#MyList#from#tearOff::T>
   return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable}) → core::List<self::_#MyList#of#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {has-declared-initializer core::bool growable}) → core::List<self::_#MyList#of#tearOff::T>
   return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable}) → core::List<self::_#MyList#generate#tearOff::T>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {has-declared-initializer core::bool growable}) → core::List<self::_#MyList#generate#tearOff::T>
   return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
   return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
diff --git a/pkg/front_end/testcases/general/magic_const.dart.weak.outline.expect b/pkg/front_end/testcases/general/magic_const.dart.weak.outline.expect
index 758656e..c7724fb 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.weak.outline.expect
@@ -11,7 +11,7 @@
   synthetic constructor •() → self::NotConstant
     ;
 }
-static method foo({dynamic a, dynamic b, dynamic c}) → dynamic
+static method foo({has-declared-initializer dynamic a, has-declared-initializer dynamic b, has-declared-initializer dynamic c}) → dynamic
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.expect
index 01b31a0..c33fb3c 100644
--- a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.expect
@@ -26,7 +26,7 @@
     #t5.{core::Map::[]=}{Invariant}(0, "foo"){(core::int*, core::String*) →* void};
     final core::Map<core::int*, core::String*>* #t6 = map;
     if(!(#t6 == null))
-      for (final core::MapEntry<core::int*, core::String*>* #t7 in #t6.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
+      for (final has-declared-initializer core::MapEntry<core::int*, core::String*>* #t7 in #t6.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
         #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{core::int*}, #t7.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
   } =>#t5;
 }
diff --git a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.modular.expect
index 01b31a0..c33fb3c 100644
--- a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.modular.expect
@@ -26,7 +26,7 @@
     #t5.{core::Map::[]=}{Invariant}(0, "foo"){(core::int*, core::String*) →* void};
     final core::Map<core::int*, core::String*>* #t6 = map;
     if(!(#t6 == null))
-      for (final core::MapEntry<core::int*, core::String*>* #t7 in #t6.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
+      for (final has-declared-initializer core::MapEntry<core::int*, core::String*>* #t7 in #t6.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
         #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{core::int*}, #t7.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
   } =>#t5;
 }
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.expect
index 0eaed6c..6cab861 100644
--- a/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.expect
@@ -26,7 +26,7 @@
     #t5.{core::Map::[]=}{Invariant}(0, "foo"){(core::int, core::String) → void};
     final core::Map<core::int, core::String>? #t6 = map;
     if(!(#t6 == null))
-      for (final core::MapEntry<core::int, core::String> #t7 in #t6{core::Map<core::int, core::String>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::String>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::String> #t7 in #t6{core::Map<core::int, core::String>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::String>>})
         #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{core::int}, #t7.{core::MapEntry::value}{core::String}){(core::int, core::String) → void};
   } =>#t5;
 }
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.modular.expect
index 0eaed6c..6cab861 100644
--- a/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.modular.expect
@@ -26,7 +26,7 @@
     #t5.{core::Map::[]=}{Invariant}(0, "foo"){(core::int, core::String) → void};
     final core::Map<core::int, core::String>? #t6 = map;
     if(!(#t6 == null))
-      for (final core::MapEntry<core::int, core::String> #t7 in #t6{core::Map<core::int, core::String>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::String>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::String> #t7 in #t6{core::Map<core::int, core::String>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::String>>})
         #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{core::int}, #t7.{core::MapEntry::value}{core::String}){(core::int, core::String) → void};
   } =>#t5;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
index cbca85f..33b4b6d 100644
--- a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
@@ -18,7 +18,7 @@
     return new self::Class::positional(a, b);
   static factory redirect5a([core::int a, core::int b]) → self::Class
     return new self::Class::positional(a, b);
-  static factory redirect6a([core::int a, core::int b]) → self::Class
+  static factory redirect6a([core::int a, has-declared-initializer core::int b]) → self::Class
     return new self::Class::positional(a, b);
   static factory redirect1b() → self::Class
     return new self::Class::named();
@@ -30,7 +30,7 @@
     return new self::Class::named(a: a, b: b);
   static factory redirect5b({core::int b, core::int a}) → self::Class
     return new self::Class::named(b: b, a: a);
-  static factory redirect6b({core::int a, core::int b}) → self::Class
+  static factory redirect6b({has-declared-initializer core::int a, core::int b}) → self::Class
     return new self::Class::named(a: a, b: b);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
index 05e4ae1..043e186 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
   constructor •([core::int field = 42]) → self::A
     ;
-  static factory redirect([core::int field]) → self::A
+  static factory redirect([has-declared-initializer core::int field]) → self::A
     return new self::A::•(field);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
index 958f9f7..2b9991b 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
@@ -24,11 +24,11 @@
   final core::Map<core::int, core::int> aMap = block {
     final core::Map<core::int, core::int> #t3 = <core::int, core::int>{};
     #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
-    for (final core::MapEntry<core::int, core::int> #t4 in <core::int, core::int>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::int, core::int> #t4 in <core::int, core::int>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
       #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int}, #t4.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t5 = self::nullableMap;
     if(!(#t5 == null))
-      for (final core::MapEntry<core::int, core::int> #t6 in #t5{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t6 in #t5{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int}, #t6.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t3;
   final core::Set<core::int> aSet = block {
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect
index 958f9f7..2b9991b 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect
@@ -24,11 +24,11 @@
   final core::Map<core::int, core::int> aMap = block {
     final core::Map<core::int, core::int> #t3 = <core::int, core::int>{};
     #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
-    for (final core::MapEntry<core::int, core::int> #t4 in <core::int, core::int>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::int, core::int> #t4 in <core::int, core::int>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
       #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int}, #t4.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t5 = self::nullableMap;
     if(!(#t5 == null))
-      for (final core::MapEntry<core::int, core::int> #t6 in #t5{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t6 in #t5{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int}, #t6.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t3;
   final core::Set<core::int> aSet = block {
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
index 57142b1..005f4e1 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
@@ -102,7 +102,7 @@
   core::List<core::int*>* spread = <core::int*>[1, 2, 3];
   core::Map<core::String*, core::int*>* mapSpread = <core::String*, core::int*>{"foo": 4, "bar": 2};
   core::int* notSpreadInt = 42;
-  () →* core::int* notSpreadFunction = null;
+  has-declared-initializer () →* core::int* notSpreadFunction = null;
   core::Map<core::int*, core::num*>* mapIntNum = <core::int*, core::num*>{42: 42};
   core::List<core::num*>* listNum = <core::num*>[42];
   core::List<dynamic>* lhs10 = block {
@@ -113,12 +113,12 @@
   } =>#t2;
   core::Map<dynamic, dynamic>* map10 = block {
     final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   } =>#t3;
   core::Map<dynamic, dynamic>* map10ambiguous = block {
     final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   } =>#t5;
   core::List<core::int*>* lhs20 = block {
@@ -130,20 +130,20 @@
   } =>#t8;
   core::Set<core::int*>* set20ambiguous = block {
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t10 in spread) {
+    for (final has-declared-initializer dynamic #t10 in spread) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
     }
   } =>#t9;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t12.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t12;
   core::Map<core::String*, core::int*>* map20ambiguous = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String*}, #t15.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t14;
   core::List<dynamic>* lhs21 = block {
@@ -155,7 +155,7 @@
   } =>#t17;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t18 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t19 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t19 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) →* void};
   } =>#t18;
@@ -172,14 +172,14 @@
   } =>#t21;
   core::Set<core::int*>* set22ambiguous = block {
     final core::Set<core::int*>* #t22 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t23 in <core::int*>[]) {
+    for (final has-declared-initializer dynamic #t23 in <core::int*>[]) {
       final core::int* #t24 = #t23 as{TypeError} core::int*;
       #t22.{core::Set::add}{Invariant}(#t24){(core::int*) →* core::bool*};
     }
   } =>#t22;
   core::Map<core::String*, core::int*>* map22 = block {
     final core::Map<core::String*, core::int*>* #t25 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t26 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t26 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}{core::String*}, #t26.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t25;
   core::List<core::List<core::int*>*>* lhs23 = block {
@@ -191,14 +191,14 @@
   } =>#t28;
   core::Set<core::List<core::int*>*>* set23ambiguous = block {
     final core::Set<core::List<core::int*>*>* #t29 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (final dynamic #t30 in <core::List<core::int*>*>[<core::int*>[]]) {
+    for (final has-declared-initializer dynamic #t30 in <core::List<core::int*>*>[<core::int*>[]]) {
       final core::List<core::int*>* #t31 = #t30 as{TypeError} core::List<core::int*>*;
       #t29.{core::Set::add}{Invariant}(#t31){(core::List<core::int*>*) →* core::bool*};
     }
   } =>#t29;
   core::Map<core::String*, core::List<core::int*>*>* map23 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
-    for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
       #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
   dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
@@ -222,7 +222,7 @@
       {...spread};
       ^" in ( block {
     final core::Set<core::int*>* #t36 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t37 in spread) {
+    for (final has-declared-initializer dynamic #t37 in spread) {
       final core::int* #t38 = #t37 as{TypeError} core::int*;
       #t36.{core::Set::add}{Invariant}(#t38){(core::int*) →* core::bool*};
     }
@@ -232,7 +232,7 @@
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
     final core::Map<core::String*, core::int*>* #t39 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String*}, #t40.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t39) as{TypeError} core::int*;
@@ -241,7 +241,7 @@
       {...mapSpread};
       ^" in ( block {
     final core::Map<core::String*, core::int*>* #t41 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String*}, #t42.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t41) as{TypeError} core::int*;
   core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
@@ -297,7 +297,7 @@
     #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) →* core::bool*};
-    for (final dynamic #t48 in <dynamic>[]) {
+    for (final has-declared-initializer dynamic #t48 in <dynamic>[]) {
       final dynamic #t49 = #t48 as{TypeError} dynamic;
       #t47.{core::Set::add}{Invariant}(#t49){(dynamic) →* core::bool*};
     }
@@ -307,51 +307,51 @@
                                             ^": null};
   core::List<core::int*>* lhs80 = block {
     final core::List<core::int*>* #t50 = <core::int*>[];
-    final core::Iterable<core::int*>* #t51 = null;
+    final has-declared-initializer core::Iterable<core::int*>* #t51 = null;
     if(!(#t51 == null))
       #t50.{core::List::addAll}{Invariant}(#t51){(core::Iterable<core::int*>*) →* void};
   } =>#t50;
   core::Set<core::int*>* set80 = block {
     final core::Set<core::int*>* #t52 = col::LinkedHashSet::•<core::int*>();
-    final core::Iterable<core::int*>* #t53 = null;
+    final has-declared-initializer core::Iterable<core::int*>* #t53 = null;
     if(!(#t53 == null))
       #t52.{core::Set::addAll}{Invariant}(#t53){(core::Iterable<core::int*>*) →* void};
   } =>#t52;
   core::Set<dynamic>* set81ambiguous = block {
     final core::Set<dynamic>* #t54 = col::LinkedHashSet::•<dynamic>();
-    final core::Iterable<dynamic>* #t55 = null;
+    final has-declared-initializer core::Iterable<dynamic>* #t55 = null;
     if(!(#t55 == null))
-      for (final dynamic #t56 in #t55) {
+      for (final has-declared-initializer dynamic #t56 in #t55) {
         final dynamic #t57 = #t56 as{TypeError} dynamic;
         #t54.{core::Set::add}{Invariant}(#t57){(dynamic) →* core::bool*};
       }
-    for (final dynamic #t58 in <dynamic>[]) {
+    for (final has-declared-initializer dynamic #t58 in <dynamic>[]) {
       final dynamic #t59 = #t58 as{TypeError} dynamic;
       #t54.{core::Set::add}{Invariant}(#t59){(dynamic) →* core::bool*};
     }
   } =>#t54;
   core::Map<core::String*, core::int*>* map80 = block {
     final core::Map<core::String*, core::int*>* #t60 = <core::String*, core::int*>{};
-    final core::Map<core::String*, core::int*>* #t61 = null;
+    final has-declared-initializer core::Map<core::String*, core::int*>* #t61 = null;
     if(!(#t61 == null))
-      for (final core::MapEntry<core::String*, core::int*>* #t62 in #t61.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t62 in #t61.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String*}, #t62.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t60;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t63 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t64 in self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t64 in self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String*}, #t64.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t63;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t65 = <core::int*>[];
-    for (final dynamic #t66 in listNum) {
+    for (final has-declared-initializer dynamic #t66 in listNum) {
       final core::int* #t67 = #t66 as{TypeError} core::int*;
       #t65.{core::List::add}{Invariant}(#t67){(core::int*) →* void};
     }
   } =>#t65;
   core::Map<core::num*, core::int*>* map100 = block {
     final core::Map<core::num*, core::int*>* #t68 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t69 in mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t69 in mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
       final core::num* #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
       final core::int* #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
       #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num*, core::int*) →* void};
@@ -359,14 +359,14 @@
   } =>#t68;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t72 = <core::int*>[];
-    for (final dynamic #t73 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t73 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t74 = #t73 as{TypeError} core::int*;
       #t72.{core::List::add}{Invariant}(#t74){(core::int*) →* void};
     }
   } =>#t72;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t75 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t76 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t76 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
       final core::num* #t77 = #t76.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
       final core::int* #t78 = #t76.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
       #t75.{core::Map::[]=}{Invariant}(#t77, #t78){(core::num*, core::int*) →* void};
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect
index 57142b1..005f4e1 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect
@@ -102,7 +102,7 @@
   core::List<core::int*>* spread = <core::int*>[1, 2, 3];
   core::Map<core::String*, core::int*>* mapSpread = <core::String*, core::int*>{"foo": 4, "bar": 2};
   core::int* notSpreadInt = 42;
-  () →* core::int* notSpreadFunction = null;
+  has-declared-initializer () →* core::int* notSpreadFunction = null;
   core::Map<core::int*, core::num*>* mapIntNum = <core::int*, core::num*>{42: 42};
   core::List<core::num*>* listNum = <core::num*>[42];
   core::List<dynamic>* lhs10 = block {
@@ -113,12 +113,12 @@
   } =>#t2;
   core::Map<dynamic, dynamic>* map10 = block {
     final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   } =>#t3;
   core::Map<dynamic, dynamic>* map10ambiguous = block {
     final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   } =>#t5;
   core::List<core::int*>* lhs20 = block {
@@ -130,20 +130,20 @@
   } =>#t8;
   core::Set<core::int*>* set20ambiguous = block {
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t10 in spread) {
+    for (final has-declared-initializer dynamic #t10 in spread) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
     }
   } =>#t9;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t12.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t12;
   core::Map<core::String*, core::int*>* map20ambiguous = block {
     final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String*}, #t15.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t14;
   core::List<dynamic>* lhs21 = block {
@@ -155,7 +155,7 @@
   } =>#t17;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t18 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t19 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t19 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) →* void};
   } =>#t18;
@@ -172,14 +172,14 @@
   } =>#t21;
   core::Set<core::int*>* set22ambiguous = block {
     final core::Set<core::int*>* #t22 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t23 in <core::int*>[]) {
+    for (final has-declared-initializer dynamic #t23 in <core::int*>[]) {
       final core::int* #t24 = #t23 as{TypeError} core::int*;
       #t22.{core::Set::add}{Invariant}(#t24){(core::int*) →* core::bool*};
     }
   } =>#t22;
   core::Map<core::String*, core::int*>* map22 = block {
     final core::Map<core::String*, core::int*>* #t25 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t26 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t26 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}{core::String*}, #t26.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t25;
   core::List<core::List<core::int*>*>* lhs23 = block {
@@ -191,14 +191,14 @@
   } =>#t28;
   core::Set<core::List<core::int*>*>* set23ambiguous = block {
     final core::Set<core::List<core::int*>*>* #t29 = col::LinkedHashSet::•<core::List<core::int*>*>();
-    for (final dynamic #t30 in <core::List<core::int*>*>[<core::int*>[]]) {
+    for (final has-declared-initializer dynamic #t30 in <core::List<core::int*>*>[<core::int*>[]]) {
       final core::List<core::int*>* #t31 = #t30 as{TypeError} core::List<core::int*>*;
       #t29.{core::Set::add}{Invariant}(#t31){(core::List<core::int*>*) →* core::bool*};
     }
   } =>#t29;
   core::Map<core::String*, core::List<core::int*>*>* map23 = block {
     final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
-    for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
       #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
   dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
@@ -222,7 +222,7 @@
       {...spread};
       ^" in ( block {
     final core::Set<core::int*>* #t36 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t37 in spread) {
+    for (final has-declared-initializer dynamic #t37 in spread) {
       final core::int* #t38 = #t37 as{TypeError} core::int*;
       #t36.{core::Set::add}{Invariant}(#t38){(core::int*) →* core::bool*};
     }
@@ -232,7 +232,7 @@
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
     final core::Map<core::String*, core::int*>* #t39 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String*}, #t40.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t39) as{TypeError} core::int*;
@@ -241,7 +241,7 @@
       {...mapSpread};
       ^" in ( block {
     final core::Map<core::String*, core::int*>* #t41 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String*}, #t42.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t41) as{TypeError} core::int*;
   core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
@@ -297,7 +297,7 @@
     #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) →* core::bool*};
-    for (final dynamic #t48 in <dynamic>[]) {
+    for (final has-declared-initializer dynamic #t48 in <dynamic>[]) {
       final dynamic #t49 = #t48 as{TypeError} dynamic;
       #t47.{core::Set::add}{Invariant}(#t49){(dynamic) →* core::bool*};
     }
@@ -307,51 +307,51 @@
                                             ^": null};
   core::List<core::int*>* lhs80 = block {
     final core::List<core::int*>* #t50 = <core::int*>[];
-    final core::Iterable<core::int*>* #t51 = null;
+    final has-declared-initializer core::Iterable<core::int*>* #t51 = null;
     if(!(#t51 == null))
       #t50.{core::List::addAll}{Invariant}(#t51){(core::Iterable<core::int*>*) →* void};
   } =>#t50;
   core::Set<core::int*>* set80 = block {
     final core::Set<core::int*>* #t52 = col::LinkedHashSet::•<core::int*>();
-    final core::Iterable<core::int*>* #t53 = null;
+    final has-declared-initializer core::Iterable<core::int*>* #t53 = null;
     if(!(#t53 == null))
       #t52.{core::Set::addAll}{Invariant}(#t53){(core::Iterable<core::int*>*) →* void};
   } =>#t52;
   core::Set<dynamic>* set81ambiguous = block {
     final core::Set<dynamic>* #t54 = col::LinkedHashSet::•<dynamic>();
-    final core::Iterable<dynamic>* #t55 = null;
+    final has-declared-initializer core::Iterable<dynamic>* #t55 = null;
     if(!(#t55 == null))
-      for (final dynamic #t56 in #t55) {
+      for (final has-declared-initializer dynamic #t56 in #t55) {
         final dynamic #t57 = #t56 as{TypeError} dynamic;
         #t54.{core::Set::add}{Invariant}(#t57){(dynamic) →* core::bool*};
       }
-    for (final dynamic #t58 in <dynamic>[]) {
+    for (final has-declared-initializer dynamic #t58 in <dynamic>[]) {
       final dynamic #t59 = #t58 as{TypeError} dynamic;
       #t54.{core::Set::add}{Invariant}(#t59){(dynamic) →* core::bool*};
     }
   } =>#t54;
   core::Map<core::String*, core::int*>* map80 = block {
     final core::Map<core::String*, core::int*>* #t60 = <core::String*, core::int*>{};
-    final core::Map<core::String*, core::int*>* #t61 = null;
+    final has-declared-initializer core::Map<core::String*, core::int*>* #t61 = null;
     if(!(#t61 == null))
-      for (final core::MapEntry<core::String*, core::int*>* #t62 in #t61.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t62 in #t61.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String*}, #t62.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t60;
   core::Map<core::String*, core::int*>* map90 = block {
     final core::Map<core::String*, core::int*>* #t63 = <core::String*, core::int*>{};
-    for (final core::MapEntry<core::String*, core::int*>* #t64 in self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+    for (final has-declared-initializer core::MapEntry<core::String*, core::int*>* #t64 in self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String*}, #t64.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t63;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t65 = <core::int*>[];
-    for (final dynamic #t66 in listNum) {
+    for (final has-declared-initializer dynamic #t66 in listNum) {
       final core::int* #t67 = #t66 as{TypeError} core::int*;
       #t65.{core::List::add}{Invariant}(#t67){(core::int*) →* void};
     }
   } =>#t65;
   core::Map<core::num*, core::int*>* map100 = block {
     final core::Map<core::num*, core::int*>* #t68 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t69 in mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t69 in mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
       final core::num* #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
       final core::int* #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
       #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num*, core::int*) →* void};
@@ -359,14 +359,14 @@
   } =>#t68;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t72 = <core::int*>[];
-    for (final dynamic #t73 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t73 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t74 = #t73 as{TypeError} core::int*;
       #t72.{core::List::add}{Invariant}(#t74){(core::int*) →* void};
     }
   } =>#t72;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t75 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t76 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t76 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
       final core::num* #t77 = #t76.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
       final core::int* #t78 = #t76.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
       #t75.{core::Map::[]=}{Invariant}(#t77, #t78){(core::num*, core::int*) →* void};
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
index fe13a59..20ff470 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
@@ -102,7 +102,7 @@
   core::List<core::int*>* spread = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
   core::Map<core::String*, core::int*>* mapSpread = <core::String*, core::int*>{"foo": 4, "bar": 2};
   core::int* notSpreadInt = 42;
-  () →* core::int* notSpreadFunction = null;
+  has-declared-initializer () →* core::int* notSpreadFunction = null;
   core::Map<core::int*, core::num*>* mapIntNum = <core::int*, core::num*>{42: 42};
   core::List<core::num*>* listNum = core::_GrowableList::_literal1<core::num*>(42);
   core::List<dynamic>* lhs10 = block {
@@ -382,19 +382,19 @@
                                             ^": null};
   core::List<core::int*>* lhs80 = block {
     final core::List<core::int*>* #t50 = core::_GrowableList::•<core::int*>(0);
-    final core::Iterable<core::int*>* #t51 = null;
+    final has-declared-initializer core::Iterable<core::int*>* #t51 = null;
     if(!(#t51 == null))
       #t50.{core::List::addAll}{Invariant}(#t51){(core::Iterable<core::int*>*) →* void};
   } =>#t50;
   core::Set<core::int*>* set80 = block {
     final core::Set<core::int*>* #t52 = new col::_CompactLinkedHashSet::•<core::int*>();
-    final core::Iterable<core::int*>* #t53 = null;
+    final has-declared-initializer core::Iterable<core::int*>* #t53 = null;
     if(!(#t53 == null))
       #t52.{core::Set::addAll}{Invariant}(#t53){(core::Iterable<core::int*>*) →* void};
   } =>#t52;
   core::Set<dynamic>* set81ambiguous = block {
     final core::Set<dynamic>* #t54 = new col::_CompactLinkedHashSet::•<dynamic>();
-    final core::Iterable<dynamic>* #t55 = null;
+    final has-declared-initializer core::Iterable<dynamic>* #t55 = null;
     if(!(#t55 == null)) {
       core::Iterator<dynamic>* :sync-for-iterator = #t55.{core::Iterable::iterator}{core::Iterator<dynamic>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -418,7 +418,7 @@
   } =>#t54;
   core::Map<core::String*, core::int*>* map80 = block {
     final core::Map<core::String*, core::int*>* #t60 = <core::String*, core::int*>{};
-    final core::Map<core::String*, core::int*>* #t61 = null;
+    final has-declared-initializer core::Map<core::String*, core::int*>* #t61 = null;
     if(!(#t61 == null)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = #t61.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String*, core::int*>>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.expect
index a27706e..bea75ee 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.expect
@@ -118,7 +118,7 @@
   core::List<core::int> spread = <core::int>[1, 2, 3];
   core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
   core::int notSpreadInt = 42;
-  () →? core::int notSpreadFunction = null;
+  has-declared-initializer () →? core::int notSpreadFunction = null;
   core::Map<core::int, core::num> mapIntNum = <core::int, core::num>{42: 42};
   core::List<core::num> listNum = <core::num>[42];
   core::List<dynamic> lhs10 = block {
@@ -129,12 +129,12 @@
   } =>#t2;
   core::Map<dynamic, dynamic> map10 = block {
     final core::Map<dynamic, dynamic> #t3 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t3;
   core::Map<dynamic, dynamic> map10ambiguous = block {
     final core::Map<dynamic, dynamic> #t5 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t5;
   core::List<core::int> lhs20 = block {
@@ -146,20 +146,20 @@
   } =>#t8;
   core::Set<core::int> set20ambiguous = block {
     final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t10 in spread) {
+    for (final has-declared-initializer dynamic #t10 in spread) {
       final core::int #t11 = #t10 as{TypeError,ForNonNullableByDefault} core::int;
       #t9.{core::Set::add}{Invariant}(#t11){(core::int) → core::bool};
     }
   } =>#t9;
   core::Map<core::String, core::int> map20 = block {
     final core::Map<core::String, core::int> #t12 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String}, #t13.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
     #t12.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
   } =>#t12;
   core::Map<core::String, core::int> map20ambiguous = block {
     final core::Map<core::String, core::int> #t14 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t14;
   core::List<dynamic> lhs21 = block {
@@ -171,7 +171,7 @@
   } =>#t17;
   core::Map<dynamic, dynamic> map21 = block {
     final core::Map<dynamic, dynamic> #t18 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t19 in ((mapSpread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t19 in ((mapSpread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) → void};
   } =>#t18;
@@ -188,14 +188,14 @@
   } =>#t21;
   core::Set<core::int> set22ambiguous = block {
     final core::Set<core::int> #t22 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t23 in <core::int>[]) {
+    for (final has-declared-initializer dynamic #t23 in <core::int>[]) {
       final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
       #t22.{core::Set::add}{Invariant}(#t24){(core::int) → core::bool};
     }
   } =>#t22;
   core::Map<core::String, core::int> map22 = block {
     final core::Map<core::String, core::int> #t25 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t26 in <core::String, core::int>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t26 in <core::String, core::int>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}{core::String}, #t26.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t25;
   core::List<core::List<core::int>> lhs23 = block {
@@ -207,14 +207,14 @@
   } =>#t28;
   core::Set<core::List<core::int>> set23ambiguous = block {
     final core::Set<core::List<core::int>> #t29 = col::LinkedHashSet::•<core::List<core::int>>();
-    for (final dynamic #t30 in <core::List<core::int>>[<core::int>[]]) {
+    for (final has-declared-initializer dynamic #t30 in <core::List<core::int>>[<core::int>[]]) {
       final core::List<core::int> #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::List<core::int>;
       #t29.{core::Set::add}{Invariant}(#t31){(core::List<core::int>) → core::bool};
     }
   } =>#t29;
   core::Map<core::String, core::List<core::int>> map23 = block {
     final core::Map<core::String, core::List<core::int>> #t32 = <core::String, core::List<core::int>>{};
-    for (final core::MapEntry<core::String, core::List<core::int>> #t33 in <core::String, core::List<core::int>>{"baz": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>> #t33 in <core::String, core::List<core::int>>{"baz": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>>>})
       #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String}, #t33.{core::MapEntry::value}{core::List<core::int>}){(core::String, core::List<core::int>) → void};
   } =>#t32;
   dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
@@ -238,7 +238,7 @@
       {...spread};
       ^" in ( block {
     final core::Set<core::int> #t36 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t37 in spread) {
+    for (final has-declared-initializer dynamic #t37 in spread) {
       final core::int #t38 = #t37 as{TypeError,ForNonNullableByDefault} core::int;
       #t36.{core::Set::add}{Invariant}(#t38){(core::int) → core::bool};
     }
@@ -248,7 +248,7 @@
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
     final core::Map<core::String, core::int> #t39 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String}, #t40.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
     #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
   } =>#t39) as{TypeError,ForNonNullableByDefault} core::int;
@@ -257,7 +257,7 @@
       {...mapSpread};
       ^" in ( block {
     final core::Map<core::String, core::int> #t41 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String}, #t42.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t41) as{TypeError,ForNonNullableByDefault} core::int;
   core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
@@ -313,7 +313,7 @@
     #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:133:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) → core::bool};
-    for (final dynamic #t48 in <dynamic>[]) {
+    for (final has-declared-initializer dynamic #t48 in <dynamic>[]) {
       final dynamic #t49 = #t48 as{TypeError,ForNonNullableByDefault} dynamic;
       #t47.{core::Set::add}{Invariant}(#t49){(dynamic) → core::bool};
     }
@@ -323,39 +323,39 @@
                                             ^": null};
   core::List<core::int> lhs80 = block {
     final core::List<core::int> #t50 = <core::int>[];
-    final core::Iterable<core::int>? #t51 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t51 = null;
     if(!(#t51 == null))
       #t50.{core::List::addAll}{Invariant}(#t51{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t50;
   core::Set<core::int> set80 = block {
     final core::Set<core::int> #t52 = col::LinkedHashSet::•<core::int>();
-    final core::Iterable<core::int>? #t53 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t53 = null;
     if(!(#t53 == null))
       #t52.{core::Set::addAll}{Invariant}(#t53{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t52;
   core::Set<dynamic> set81ambiguous = block {
     final core::Set<dynamic> #t54 = col::LinkedHashSet::•<dynamic>();
-    final core::Iterable<dynamic>? #t55 = null;
+    final has-declared-initializer core::Iterable<dynamic>? #t55 = null;
     if(!(#t55 == null))
-      for (final dynamic #t56 in #t55{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t56 in #t55{core::Iterable<dynamic>}) {
         final dynamic #t57 = #t56 as{TypeError,ForNonNullableByDefault} dynamic;
         #t54.{core::Set::add}{Invariant}(#t57){(dynamic) → core::bool};
       }
-    for (final dynamic #t58 in <dynamic>[]) {
+    for (final has-declared-initializer dynamic #t58 in <dynamic>[]) {
       final dynamic #t59 = #t58 as{TypeError,ForNonNullableByDefault} dynamic;
       #t54.{core::Set::add}{Invariant}(#t59){(dynamic) → core::bool};
     }
   } =>#t54;
   core::Map<core::String, core::int> map80 = block {
     final core::Map<core::String, core::int> #t60 = <core::String, core::int>{};
-    final core::Map<core::String, core::int>? #t61 = null;
+    final has-declared-initializer core::Map<core::String, core::int>? #t61 = null;
     if(!(#t61 == null))
-      for (final core::MapEntry<core::String, core::int> #t62 in #t61{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int> #t62 in #t61{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
         #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String}, #t62.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t60;
   core::Map<core::String, core::int> map90 = block {
     final core::Map<core::String, core::int> #t63 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t64 in self::bar<core::String, core::int>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t64 in self::bar<core::String, core::int>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String}, #t64.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t63;
   core::List<core::int> list100 = <core::int>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
@@ -366,14 +366,14 @@
                                        ^"};
   core::List<core::int> list110 = block {
     final core::List<core::int> #t65 = <core::int>[];
-    for (final dynamic #t66 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t66 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
       #t65.{core::List::add}{Invariant}(#t67){(core::int) → void};
     }
   } =>#t65;
   core::Map<core::num, core::int> map110 = block {
     final core::Map<core::num, core::int> #t68 = <core::num, core::int>{};
-    for (final core::MapEntry<dynamic, dynamic> #t69 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::num, core::int>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t69 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::num, core::int>>}) {
       final core::num #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::num;
       final core::int #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
       #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num, core::int) → void};
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.modular.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.modular.expect
index a27706e..bea75ee 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.modular.expect
@@ -118,7 +118,7 @@
   core::List<core::int> spread = <core::int>[1, 2, 3];
   core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
   core::int notSpreadInt = 42;
-  () →? core::int notSpreadFunction = null;
+  has-declared-initializer () →? core::int notSpreadFunction = null;
   core::Map<core::int, core::num> mapIntNum = <core::int, core::num>{42: 42};
   core::List<core::num> listNum = <core::num>[42];
   core::List<dynamic> lhs10 = block {
@@ -129,12 +129,12 @@
   } =>#t2;
   core::Map<dynamic, dynamic> map10 = block {
     final core::Map<dynamic, dynamic> #t3 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t3;
   core::Map<dynamic, dynamic> map10ambiguous = block {
     final core::Map<dynamic, dynamic> #t5 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t5;
   core::List<core::int> lhs20 = block {
@@ -146,20 +146,20 @@
   } =>#t8;
   core::Set<core::int> set20ambiguous = block {
     final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t10 in spread) {
+    for (final has-declared-initializer dynamic #t10 in spread) {
       final core::int #t11 = #t10 as{TypeError,ForNonNullableByDefault} core::int;
       #t9.{core::Set::add}{Invariant}(#t11){(core::int) → core::bool};
     }
   } =>#t9;
   core::Map<core::String, core::int> map20 = block {
     final core::Map<core::String, core::int> #t12 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String}, #t13.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
     #t12.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
   } =>#t12;
   core::Map<core::String, core::int> map20ambiguous = block {
     final core::Map<core::String, core::int> #t14 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t14;
   core::List<dynamic> lhs21 = block {
@@ -171,7 +171,7 @@
   } =>#t17;
   core::Map<dynamic, dynamic> map21 = block {
     final core::Map<dynamic, dynamic> #t18 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t19 in ((mapSpread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t19 in ((mapSpread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) → void};
   } =>#t18;
@@ -188,14 +188,14 @@
   } =>#t21;
   core::Set<core::int> set22ambiguous = block {
     final core::Set<core::int> #t22 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t23 in <core::int>[]) {
+    for (final has-declared-initializer dynamic #t23 in <core::int>[]) {
       final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
       #t22.{core::Set::add}{Invariant}(#t24){(core::int) → core::bool};
     }
   } =>#t22;
   core::Map<core::String, core::int> map22 = block {
     final core::Map<core::String, core::int> #t25 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t26 in <core::String, core::int>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t26 in <core::String, core::int>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}{core::String}, #t26.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t25;
   core::List<core::List<core::int>> lhs23 = block {
@@ -207,14 +207,14 @@
   } =>#t28;
   core::Set<core::List<core::int>> set23ambiguous = block {
     final core::Set<core::List<core::int>> #t29 = col::LinkedHashSet::•<core::List<core::int>>();
-    for (final dynamic #t30 in <core::List<core::int>>[<core::int>[]]) {
+    for (final has-declared-initializer dynamic #t30 in <core::List<core::int>>[<core::int>[]]) {
       final core::List<core::int> #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::List<core::int>;
       #t29.{core::Set::add}{Invariant}(#t31){(core::List<core::int>) → core::bool};
     }
   } =>#t29;
   core::Map<core::String, core::List<core::int>> map23 = block {
     final core::Map<core::String, core::List<core::int>> #t32 = <core::String, core::List<core::int>>{};
-    for (final core::MapEntry<core::String, core::List<core::int>> #t33 in <core::String, core::List<core::int>>{"baz": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::List<core::int>> #t33 in <core::String, core::List<core::int>>{"baz": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>>>})
       #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String}, #t33.{core::MapEntry::value}{core::List<core::int>}){(core::String, core::List<core::int>) → void};
   } =>#t32;
   dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
@@ -238,7 +238,7 @@
       {...spread};
       ^" in ( block {
     final core::Set<core::int> #t36 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t37 in spread) {
+    for (final has-declared-initializer dynamic #t37 in spread) {
       final core::int #t38 = #t37 as{TypeError,ForNonNullableByDefault} core::int;
       #t36.{core::Set::add}{Invariant}(#t38){(core::int) → core::bool};
     }
@@ -248,7 +248,7 @@
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
     final core::Map<core::String, core::int> #t39 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String}, #t40.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
     #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
   } =>#t39) as{TypeError,ForNonNullableByDefault} core::int;
@@ -257,7 +257,7 @@
       {...mapSpread};
       ^" in ( block {
     final core::Map<core::String, core::int> #t41 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String}, #t42.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t41) as{TypeError,ForNonNullableByDefault} core::int;
   core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
@@ -313,7 +313,7 @@
     #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:133:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) → core::bool};
-    for (final dynamic #t48 in <dynamic>[]) {
+    for (final has-declared-initializer dynamic #t48 in <dynamic>[]) {
       final dynamic #t49 = #t48 as{TypeError,ForNonNullableByDefault} dynamic;
       #t47.{core::Set::add}{Invariant}(#t49){(dynamic) → core::bool};
     }
@@ -323,39 +323,39 @@
                                             ^": null};
   core::List<core::int> lhs80 = block {
     final core::List<core::int> #t50 = <core::int>[];
-    final core::Iterable<core::int>? #t51 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t51 = null;
     if(!(#t51 == null))
       #t50.{core::List::addAll}{Invariant}(#t51{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t50;
   core::Set<core::int> set80 = block {
     final core::Set<core::int> #t52 = col::LinkedHashSet::•<core::int>();
-    final core::Iterable<core::int>? #t53 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t53 = null;
     if(!(#t53 == null))
       #t52.{core::Set::addAll}{Invariant}(#t53{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t52;
   core::Set<dynamic> set81ambiguous = block {
     final core::Set<dynamic> #t54 = col::LinkedHashSet::•<dynamic>();
-    final core::Iterable<dynamic>? #t55 = null;
+    final has-declared-initializer core::Iterable<dynamic>? #t55 = null;
     if(!(#t55 == null))
-      for (final dynamic #t56 in #t55{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t56 in #t55{core::Iterable<dynamic>}) {
         final dynamic #t57 = #t56 as{TypeError,ForNonNullableByDefault} dynamic;
         #t54.{core::Set::add}{Invariant}(#t57){(dynamic) → core::bool};
       }
-    for (final dynamic #t58 in <dynamic>[]) {
+    for (final has-declared-initializer dynamic #t58 in <dynamic>[]) {
       final dynamic #t59 = #t58 as{TypeError,ForNonNullableByDefault} dynamic;
       #t54.{core::Set::add}{Invariant}(#t59){(dynamic) → core::bool};
     }
   } =>#t54;
   core::Map<core::String, core::int> map80 = block {
     final core::Map<core::String, core::int> #t60 = <core::String, core::int>{};
-    final core::Map<core::String, core::int>? #t61 = null;
+    final has-declared-initializer core::Map<core::String, core::int>? #t61 = null;
     if(!(#t61 == null))
-      for (final core::MapEntry<core::String, core::int> #t62 in #t61{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int> #t62 in #t61{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
         #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String}, #t62.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t60;
   core::Map<core::String, core::int> map90 = block {
     final core::Map<core::String, core::int> #t63 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t64 in self::bar<core::String, core::int>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+    for (final has-declared-initializer core::MapEntry<core::String, core::int> #t64 in self::bar<core::String, core::int>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
       #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String}, #t64.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t63;
   core::List<core::int> list100 = <core::int>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
@@ -366,14 +366,14 @@
                                        ^"};
   core::List<core::int> list110 = block {
     final core::List<core::int> #t65 = <core::int>[];
-    for (final dynamic #t66 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t66 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
       #t65.{core::List::add}{Invariant}(#t67){(core::int) → void};
     }
   } =>#t65;
   core::Map<core::num, core::int> map110 = block {
     final core::Map<core::num, core::int> #t68 = <core::num, core::int>{};
-    for (final core::MapEntry<dynamic, dynamic> #t69 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::num, core::int>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t69 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::num, core::int>>}) {
       final core::num #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::num;
       final core::int #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
       #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num, core::int) → void};
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.transformed.expect
index 9bdd143..6590b5c 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.transformed.expect
@@ -118,7 +118,7 @@
   core::List<core::int> spread = core::_GrowableList::_literal3<core::int>(1, 2, 3);
   core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
   core::int notSpreadInt = 42;
-  () →? core::int notSpreadFunction = null;
+  has-declared-initializer () →? core::int notSpreadFunction = null;
   core::Map<core::int, core::num> mapIntNum = <core::int, core::num>{42: 42};
   core::List<core::num> listNum = core::_GrowableList::_literal1<core::num>(42);
   core::List<dynamic> lhs10 = block {
@@ -398,19 +398,19 @@
                                             ^": null};
   core::List<core::int> lhs80 = block {
     final core::List<core::int> #t50 = core::_GrowableList::•<core::int>(0);
-    final core::Iterable<core::int>? #t51 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t51 = null;
     if(!(#t51 == null))
       #t50.{core::List::addAll}{Invariant}(#t51{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t50;
   core::Set<core::int> set80 = block {
     final core::Set<core::int> #t52 = new col::_CompactLinkedHashSet::•<core::int>();
-    final core::Iterable<core::int>? #t53 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t53 = null;
     if(!(#t53 == null))
       #t52.{core::Set::addAll}{Invariant}(#t53{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t52;
   core::Set<dynamic> set81ambiguous = block {
     final core::Set<dynamic> #t54 = new col::_CompactLinkedHashSet::•<dynamic>();
-    final core::Iterable<dynamic>? #t55 = null;
+    final has-declared-initializer core::Iterable<dynamic>? #t55 = null;
     if(!(#t55 == null)) {
       core::Iterator<dynamic> :sync-for-iterator = #t55{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -434,7 +434,7 @@
   } =>#t54;
   core::Map<core::String, core::int> map80 = block {
     final core::Map<core::String, core::int> #t60 = <core::String, core::int>{};
-    final core::Map<core::String, core::int>? #t61 = null;
+    final has-declared-initializer core::Map<core::String, core::int>? #t61 = null;
     if(!(#t61 == null)) {
       core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t61{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.outline.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.outline.expect
index f25cc63..db0c796 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.outline.expect
@@ -85,13 +85,13 @@
   ;
 static method method3(core::int* a, core::int* b) → core::int*
   ;
-static method method4(core::int* a, [core::int* b]) → core::int*
+static method method4(core::int* a, [has-declared-initializer core::int* b]) → core::int*
   ;
-static method method5([core::int* a, core::int* b]) → core::int*
+static method method5([has-declared-initializer core::int* a, has-declared-initializer core::int* b]) → core::int*
   ;
-static method method6(core::int* a, {core::int* b}) → core::int*
+static method method6(core::int* a, {has-declared-initializer core::int* b}) → core::int*
   ;
-static method method7({core::int* a, core::int* b}) → core::int*
+static method method7({has-declared-initializer core::int* a, has-declared-initializer core::int* b}) → core::int*
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.expect
index 9396c77..55c9d7f 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method f() → dynamic {
   core::int* a = 0;
-  dynamic b = null;
+  has-declared-initializer dynamic b = null;
   dynamic c = throw "foo";
   () →* core::int* d = () → core::int* => 0;
   () →* Null e = () → Null => null;
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect
index 9396c77..55c9d7f 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 
 static method f() → dynamic {
   core::int* a = 0;
-  dynamic b = null;
+  has-declared-initializer dynamic b = null;
   dynamic c = throw "foo";
   () →* core::int* d = () → core::int* => 0;
   () →* Null e = () → Null => null;
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.transformed.expect
index 9396c77..55c9d7f 100644
--- a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f() → dynamic {
   core::int* a = 0;
-  dynamic b = null;
+  has-declared-initializer dynamic b = null;
   dynamic c = throw "foo";
   () →* core::int* d = () → core::int* => 0;
   () →* Null e = () → Null => null;
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.expect
index 7dd89fd..9364af3 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.expect
@@ -2,7 +2,7 @@
 import self as self;
 
 static method test() → dynamic {
-  dynamic x = null;
+  has-declared-initializer dynamic x = null;
   x = "hi";
   x = 3;
 }
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect
index 7dd89fd..9364af3 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 import self as self;
 
 static method test() → dynamic {
-  dynamic x = null;
+  has-declared-initializer dynamic x = null;
   x = "hi";
   x = 3;
 }
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.transformed.expect
index 7dd89fd..9364af3 100644
--- a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 
 static method test() → dynamic {
-  dynamic x = null;
+  has-declared-initializer dynamic x = null;
   x = "hi";
   x = 3;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.outline.expect
index 91466e9..a132459 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.outline.expect
@@ -21,7 +21,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static field ([core::List<core::int*>*]) →* core::String* g;
-static method f([core::List<core::int*>* l]) → void
+static method f([has-declared-initializer core::List<core::int*>* l]) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.outline.expect
index a92d585..9acdf1e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String*>* list1, core::List<core::String*>* list2]) → void
+static method foo([has-declared-initializer core::List<core::String*>* list1, has-declared-initializer core::List<core::String*>* list2]) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.outline.expect
index 2456a4af..6dbf415 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.outline.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int*, core::String*>* m1, core::Map<core::int*, core::String*>* m2]) → void
+static method foo([has-declared-initializer core::Map<core::int*, core::String*>* m1, has-declared-initializer core::Map<core::int*, core::String*>* m2]) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
index d938457..b226943 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
@@ -21,8 +21,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic async /* futureValueType= dynamic */ {
-  asy::Future<core::List<self::A*>*>* f1 = null;
-  asy::Future<core::List<self::A*>*>* f2 = null;
+  has-declared-initializer asy::Future<core::List<self::A*>*>* f1 = null;
+  has-declared-initializer asy::Future<core::List<self::A*>*>* f2 = null;
   core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(<asy::Future<core::List<self::A*>*>*>[f1, f2]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
index d938457..b226943 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
@@ -21,8 +21,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic async /* futureValueType= dynamic */ {
-  asy::Future<core::List<self::A*>*>* f1 = null;
-  asy::Future<core::List<self::A*>*>* f2 = null;
+  has-declared-initializer asy::Future<core::List<self::A*>*>* f1 = null;
+  has-declared-initializer asy::Future<core::List<self::A*>*>* f2 = null;
   core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(<asy::Future<core::List<self::A*>*>*>[f1, f2]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
index 0664c85..cb0174e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
@@ -34,8 +34,8 @@
     try {
       #L1:
       {
-        asy::Future<core::List<self::A*>*>* f1 = null;
-        asy::Future<core::List<self::A*>*>* f2 = null;
+        has-declared-initializer asy::Future<core::List<self::A*>*>* f1 = null;
+        has-declared-initializer asy::Future<core::List<self::A*>*>* f2 = null;
         [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<core::List<self::A*>*>(core::_GrowableList::_literal2<asy::Future<core::List<self::A*>*>*>(f1, f2)), :async_op_then, :async_op_error) in null;
         core::List<core::List<self::A*>*>* merged = _in::unsafeCast<core::List<core::List<self::A*>*>>(:result_or_exception);
       }
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.expect
index 220da3b..f941bdc 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.expect
@@ -6,6 +6,6 @@
 import "dart:async";
 
 static method main() → dynamic {
-  asy::Future<core::int*>* futureInt = null;
+  has-declared-initializer asy::Future<core::int*>* futureInt = null;
   asy::Future<core::int*>* x = futureInt;
 }
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect
index 220da3b..f941bdc 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect
@@ -6,6 +6,6 @@
 import "dart:async";
 
 static method main() → dynamic {
-  asy::Future<core::int*>* futureInt = null;
+  has-declared-initializer asy::Future<core::int*>* futureInt = null;
   asy::Future<core::int*>* x = futureInt;
 }
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.transformed.expect
index 220da3b..f941bdc 100644
--- a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.transformed.expect
@@ -6,6 +6,6 @@
 import "dart:async";
 
 static method main() → dynamic {
-  asy::Future<core::int*>* futureInt = null;
+  has-declared-initializer asy::Future<core::int*>* futureInt = null;
   asy::Future<core::int*>* x = futureInt;
 }
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
index f3f2fd7..4ce37be 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.expect
@@ -51,7 +51,7 @@
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  core::Pattern* p = null;
+  has-declared-initializer core::Pattern* p = null;
   x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
 }
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect
index f3f2fd7..4ce37be 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect
@@ -51,7 +51,7 @@
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  core::Pattern* p = null;
+  has-declared-initializer core::Pattern* p = null;
   x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
 }
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
index f3f2fd7..4ce37be 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
  - 'Pattern' is from 'dart:core'.
   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  core::Pattern* p = null;
+  has-declared-initializer core::Pattern* p = null;
   x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
 }
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
index cd284fd..e1e738a 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.expect
@@ -51,7 +51,7 @@
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  core::Pattern* p = null;
+  has-declared-initializer core::Pattern* p = null;
   self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
 }
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect
index cd284fd..e1e738a 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect
@@ -51,7 +51,7 @@
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  core::Pattern* p = null;
+  has-declared-initializer core::Pattern* p = null;
   self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
 }
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
index cd284fd..e1e738a 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
  - 'Pattern' is from 'dart:core'.
   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
-  core::Pattern* p = null;
+  has-declared-initializer core::Pattern* p = null;
   self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
   core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
 }
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.expect
index 4344e6b..65a52f2 100644
--- a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.expect
@@ -8,7 +8,7 @@
   (core::Object*) →* Null f = (core::Object* x) → Null => null;
   core::String* y = f(42){(core::Object*) →* Null};
   f = (core::Object* x) → Null => "hello" as{TypeError} Null;
-  dynamic g = null;
+  has-declared-initializer dynamic g = null;
   g = "hello";
   g{dynamic}.foo();
   self::h = "hello";
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.modular.expect
index 4344e6b..65a52f2 100644
--- a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.modular.expect
@@ -8,7 +8,7 @@
   (core::Object*) →* Null f = (core::Object* x) → Null => null;
   core::String* y = f(42){(core::Object*) →* Null};
   f = (core::Object* x) → Null => "hello" as{TypeError} Null;
-  dynamic g = null;
+  has-declared-initializer dynamic g = null;
   g = "hello";
   g{dynamic}.foo();
   self::h = "hello";
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.transformed.expect
index 4344e6b..65a52f2 100644
--- a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
   (core::Object*) →* Null f = (core::Object* x) → Null => null;
   core::String* y = f(42){(core::Object*) →* Null};
   f = (core::Object* x) → Null => "hello" as{TypeError} Null;
-  dynamic g = null;
+  has-declared-initializer dynamic g = null;
   g = "hello";
   g{dynamic}.foo();
   self::h = "hello";
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.outline.expect
index b1b05a2..719b6e3 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.outline.expect
@@ -2,9 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static method optional_toplevel([core::List<core::int*>* x]) → void
+static method optional_toplevel([has-declared-initializer core::List<core::int*>* x]) → void
   ;
-static method named_toplevel({core::List<core::int*>* x}) → void
+static method named_toplevel({has-declared-initializer core::List<core::int*>* x}) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.outline.expect
index 5c2d83a..1a51e70 100644
--- a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.outline.expect
@@ -18,9 +18,9 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method optional_toplevel([dynamic x]) → void
+static method optional_toplevel([has-declared-initializer dynamic x]) → void
   ;
-static method named_toplevel({dynamic x}) → void
+static method named_toplevel({has-declared-initializer dynamic x}) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.expect
index 8afbb2c..0368614 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.expect
@@ -3,5 +3,5 @@
 
 static field dynamic a = null;
 static method main() → dynamic {
-  dynamic b = null;
+  has-declared-initializer dynamic b = null;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect
index 8afbb2c..0368614 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect
@@ -3,5 +3,5 @@
 
 static field dynamic a = null;
 static method main() → dynamic {
-  dynamic b = null;
+  has-declared-initializer dynamic b = null;
 }
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.transformed.expect
index 8afbb2c..0368614 100644
--- a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.transformed.expect
@@ -3,5 +3,5 @@
 
 static field dynamic a = null;
 static method main() → dynamic {
-  dynamic b = null;
+  has-declared-initializer dynamic b = null;
 }
diff --git a/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.expect b/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.expect
index 4e2acb6..f6551dd 100644
--- a/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::int* i = n{core::int*};
   }
diff --git a/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.modular.expect
index 4e2acb6..f6551dd 100644
--- a/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.modular.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::int* i = n{core::int*};
   }
diff --git a/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.transformed.expect
index 4e2acb6..f6551dd 100644
--- a/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::int* i = n{core::int*};
   }
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.expect
index db5f0ef..4b89fee 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
     () → Null {
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.modular.expect
index db5f0ef..4b89fee 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.modular.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
     () → Null {
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.transformed.expect
index db5f0ef..4b89fee 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
     () → Null {
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.expect
index ca4ba99..6031449 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
     n = null;
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.modular.expect
index ca4ba99..6031449 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.modular.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
     n = null;
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.transformed.expect
index ca4ba99..6031449 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
     n = null;
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.expect
index d377034..370968b 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
   }
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.modular.expect
index d377034..370968b 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.modular.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
   }
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.transformed.expect
index d377034..370968b 100644
--- a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::num* n = null;
+  has-declared-initializer core::num* n = null;
   if(n is core::int*) {
     core::num* i = n;
   }
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
index 903cf4e..41f5982 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
@@ -20,7 +20,7 @@
   self::expect(0, #local1#get(){() → core::int});
   #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
   self::expect(2, #local1#get(){() → core::int});
-  lowered core::int? #local2;
+  lowered has-declared-initializer core::int? #local2;
   function #local2#get() → core::int
     return let final core::int? #t2 = #local2 in #t2 == null ?{core::int} #local2 = 1 : #t2{core::int};
   function #local2#set(core::int local2#param) → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
index 903cf4e..41f5982 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
@@ -20,7 +20,7 @@
   self::expect(0, #local1#get(){() → core::int});
   #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
   self::expect(2, #local1#get(){() → core::int});
-  lowered core::int? #local2;
+  lowered has-declared-initializer core::int? #local2;
   function #local2#get() → core::int
     return let final core::int? #t2 = #local2 in #t2 == null ?{core::int} #local2 = 1 : #t2{core::int};
   function #local2#set(core::int local2#param) → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
index 1092991..8c04867 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
@@ -23,7 +23,7 @@
   self::expect(0, #local1#get(){() → core::int});
   #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
   self::expect(2, #local1#get(){() → core::int});
-  lowered core::int? #local2;
+  lowered has-declared-initializer core::int? #local2;
   lowered core::bool #local2#isSet = false;
   function #local2#get() → core::int {
     if(!#local2#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.modular.expect
index 1092991..8c04867 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.modular.expect
@@ -23,7 +23,7 @@
   self::expect(0, #local1#get(){() → core::int});
   #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
   self::expect(2, #local1#get(){() → core::int});
-  lowered core::int? #local2;
+  lowered has-declared-initializer core::int? #local2;
   lowered core::bool #local2#isSet = false;
   function #local2#get() → core::int {
     if(!#local2#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
index 1092991..8c04867 100644
--- a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
   self::expect(0, #local1#get(){() → core::int});
   #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
   self::expect(2, #local1#get(){() → core::int});
-  lowered core::int? #local2;
+  lowered has-declared-initializer core::int? #local2;
   lowered core::bool #local2#isSet = false;
   function #local2#get() → core::int {
     if(!#local2#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
index 5701988..090c42b 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
@@ -118,7 +118,7 @@
     return let final FutureOr<core::int>? #t2 = #local6 in #t2 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t2{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>local6#param) → dynamic
     return #local6 = local6#param;
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -173,7 +173,7 @@
     return let final FutureOr<core::int>? #t4 = #local6 in #t4 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>local6#param) → dynamic
     return #local6 = local6#param;
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -245,7 +245,7 @@
     return let final FutureOr<core::int>? #t7 = #local6 in #t7 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t7{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>local6#param) → dynamic
     return #local6 = local6#param;
-  lowered self::methodDirect::T? #local7;
+  lowered has-declared-initializer self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
@@ -300,7 +300,7 @@
     return let final FutureOr<core::int>? #t9 = #local6 in #t9 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t9{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>local6#param) → dynamic
     return #local6 = local6#param;
-  lowered self::methodConditional::T? #local7;
+  lowered has-declared-initializer self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
index 5701988..090c42b 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
@@ -118,7 +118,7 @@
     return let final FutureOr<core::int>? #t2 = #local6 in #t2 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t2{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>local6#param) → dynamic
     return #local6 = local6#param;
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -173,7 +173,7 @@
     return let final FutureOr<core::int>? #t4 = #local6 in #t4 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t4{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>local6#param) → dynamic
     return #local6 = local6#param;
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -245,7 +245,7 @@
     return let final FutureOr<core::int>? #t7 = #local6 in #t7 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t7{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>local6#param) → dynamic
     return #local6 = local6#param;
-  lowered self::methodDirect::T? #local7;
+  lowered has-declared-initializer self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
@@ -300,7 +300,7 @@
     return let final FutureOr<core::int>? #t9 = #local6 in #t9 == null ?{FutureOr<core::int>} throw new _in::LateError::localNI("local6") : #t9{FutureOr<core::int>};
   function #local6#set(FutureOr<core::int>local6#param) → dynamic
     return #local6 = local6#param;
-  lowered self::methodConditional::T? #local7;
+  lowered has-declared-initializer self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
index 405aa62..1f45a12 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
@@ -124,7 +124,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -185,7 +185,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -266,7 +266,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered self::methodDirect::T? #local7;
+  lowered has-declared-initializer self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
@@ -327,7 +327,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered self::methodConditional::T? #local7;
+  lowered has-declared-initializer self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.modular.expect
index 405aa62..1f45a12 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.modular.expect
@@ -124,7 +124,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -185,7 +185,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -266,7 +266,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered self::methodDirect::T? #local7;
+  lowered has-declared-initializer self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
@@ -327,7 +327,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered self::methodConditional::T? #local7;
+  lowered has-declared-initializer self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
index 405aa62..1f45a12 100644
--- a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
@@ -124,7 +124,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -185,7 +185,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered T? #local7;
+  lowered has-declared-initializer T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → T% {
     if(!#local7#isSet) {
@@ -266,7 +266,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered self::methodDirect::T? #local7;
+  lowered has-declared-initializer self::methodDirect::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodDirect::T% {
     if(!#local7#isSet) {
@@ -327,7 +327,7 @@
     #local6#isSet = true;
     return #local6 = local6#param;
   }
-  lowered self::methodConditional::T? #local7;
+  lowered has-declared-initializer self::methodConditional::T? #local7;
   lowered core::bool #local7#isSet = false;
   function #local7#get() → self::methodConditional::T% {
     if(!#local7#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
index bc55772..c3d75c0 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.expect
@@ -9,7 +9,7 @@
     return let final () →? core::int #t1 = #recursiveInitLocal in #t1 == null ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
   function #recursiveInitLocal#set(() → core::int recursiveInitLocal#param) → dynamic
     return #recursiveInitLocal = recursiveInitLocal#param;
-  lowered final core::int? #local;
+  lowered final has-declared-initializer core::int? #local;
   function #local#get() → core::int
     return let final core::int? #t2 = #local in #t2 == null ?{core::int} let final core::int #t3 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int} in #local == null ?{core::int} #local = #t3 : throw new _in::LateError::localADI("local") : #t2{core::int};
   core::bool doRecursiveInitLocal = true;
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
index bc55772..c3d75c0 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
     return let final () →? core::int #t1 = #recursiveInitLocal in #t1 == null ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
   function #recursiveInitLocal#set(() → core::int recursiveInitLocal#param) → dynamic
     return #recursiveInitLocal = recursiveInitLocal#param;
-  lowered final core::int? #local;
+  lowered final has-declared-initializer core::int? #local;
   function #local#get() → core::int
     return let final core::int? #t2 = #local in #t2 == null ?{core::int} let final core::int #t3 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int} in #local == null ?{core::int} #local = #t3 : throw new _in::LateError::localADI("local") : #t2{core::int};
   core::bool doRecursiveInitLocal = true;
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
index 0858a5e..4a720d9 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.expect
@@ -12,7 +12,7 @@
     #recursiveInitLocal#isSet = true;
     return #recursiveInitLocal = recursiveInitLocal#param;
   }
-  lowered final core::int? #local;
+  lowered final has-declared-initializer core::int? #local;
   lowered core::bool #local#isSet = false;
   function #local#get() → core::int {
     if(!#local#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.modular.expect
index 0858a5e..4a720d9 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.modular.expect
@@ -12,7 +12,7 @@
     #recursiveInitLocal#isSet = true;
     return #recursiveInitLocal = recursiveInitLocal#param;
   }
-  lowered final core::int? #local;
+  lowered final has-declared-initializer core::int? #local;
   lowered core::bool #local#isSet = false;
   function #local#get() → core::int {
     if(!#local#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
index 0858a5e..4a720d9 100644
--- a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
     #recursiveInitLocal#isSet = true;
     return #recursiveInitLocal = recursiveInitLocal#param;
   }
-  lowered final core::int? #local;
+  lowered final has-declared-initializer core::int? #local;
   lowered core::bool #local#isSet = false;
   function #local#get() → core::int {
     if(!#local#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
index 76b2806..c78cc2e 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   function #lateLocal#get() → core::int
     return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} let final core::int #t2 = initLateLocal(123){(core::int) → core::int} in #lateLocal == null ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
   self::expect(null, lateLocalInit);
@@ -19,7 +19,7 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
index 76b2806..c78cc2e 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   function #lateLocal#get() → core::int
     return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} let final core::int #t2 = initLateLocal(123){(core::int) → core::int} in #lateLocal == null ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
   self::expect(null, lateLocalInit);
@@ -19,7 +19,7 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
index 49e5b26..8c0e8f2 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
@@ -28,7 +28,7 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.modular.expect
index 49e5b26..8c0e8f2 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.modular.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
@@ -28,7 +28,7 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
index 49e5b26..8c0e8f2 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int value) → core::int {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
@@ -28,7 +28,7 @@
     function initLateGenericLocal(T% value) → T% {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
index 9d9501d..ffa993f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -28,7 +28,7 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
index 9d9501d..ffa993f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -28,7 +28,7 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
index 9d9501d..ffa993f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -28,7 +28,7 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.modular.expect
index 9d9501d..ffa993f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.modular.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -28,7 +28,7 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
index 9d9501d..ffa993f 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
   function initLateLocal(core::int? value) → core::int? {
     return lateLocalInit = value;
   }
-  lowered final core::int? #lateLocal;
+  lowered final has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -28,7 +28,7 @@
     function initLateGenericLocal(T? value) → T? {
       return lateGenericLocalInit = value;
     }
-    lowered final T? #lateGenericLocal;
+    lowered final has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
index 5e8787e..761aa69 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   function #lateLocal#get() → core::int
     return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} #lateLocal = 123 : #t1{core::int};
   function #lateLocal#set(core::int lateLocal#param) → dynamic
@@ -12,7 +12,7 @@
   self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
index 5e8787e..761aa69 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   function #lateLocal#get() → core::int
     return let final core::int? #t1 = #lateLocal in #t1 == null ?{core::int} #lateLocal = 123 : #t1{core::int};
   function #lateLocal#set(core::int lateLocal#param) → dynamic
@@ -12,7 +12,7 @@
   self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
index 50562b0..e73b230 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
@@ -20,7 +20,7 @@
   self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.modular.expect
index 50562b0..e73b230 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.modular.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
@@ -20,7 +20,7 @@
   self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
index 50562b0..e73b230 100644
--- a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int {
     if(!#lateLocal#isSet) {
@@ -20,7 +20,7 @@
   self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int});
   function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T% {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
index fbb4ddc..bca4941 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.expect
@@ -88,7 +88,7 @@
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -101,12 +101,12 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
     return let final core::int? #t13 = #nonNullableInitializedNonFinalLocal in #t13 == null ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t13{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int nonNullableInitializedNonFinalLocal#param) → dynamic
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -118,7 +118,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
     return let final core::int? #t15 = #nonNullableInitializedFinalLocal in #t15 == null ?{core::int} let final core::int #t16 = 0 in #nonNullableInitializedFinalLocal == null ?{core::int} #nonNullableInitializedFinalLocal = #t16 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t15{core::int};
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
index a24db18..16cac48 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.strong.transformed.expect
@@ -88,7 +88,7 @@
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -101,12 +101,12 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
     return let final core::int? #t13 = #nonNullableInitializedNonFinalLocal in #t13 == null ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t13{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int nonNullableInitializedNonFinalLocal#param) → dynamic
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -118,7 +118,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
     return let final core::int? #t15 = #nonNullableInitializedFinalLocal in #t15 == null ?{core::int} let final core::int #t16 = 0 in #nonNullableInitializedFinalLocal == null ?{core::int} #nonNullableInitializedFinalLocal = #t16 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t15{core::int};
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
index c0e43bc..42bf471 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.expect
@@ -144,7 +144,7 @@
       #nonNullableUninitializedFinalLocal#isSet = true;
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     }
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -157,7 +157,7 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
@@ -170,7 +170,7 @@
     #nonNullableInitializedNonFinalLocal#isSet = true;
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
   }
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -182,7 +182,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.modular.expect
index c0e43bc..42bf471 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.modular.expect
@@ -144,7 +144,7 @@
       #nonNullableUninitializedFinalLocal#isSet = true;
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     }
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -157,7 +157,7 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
@@ -170,7 +170,7 @@
     #nonNullableInitializedNonFinalLocal#isSet = true;
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
   }
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -182,7 +182,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
index c0e43bc..42bf471 100644
--- a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.transformed.expect
@@ -144,7 +144,7 @@
       #nonNullableUninitializedFinalLocal#isSet = true;
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     }
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -157,7 +157,7 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
@@ -170,7 +170,7 @@
     #nonNullableInitializedNonFinalLocal#isSet = true;
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
   }
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -182,7 +182,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
index a6e67a5..40668de 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.expect
@@ -5,7 +5,7 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -22,7 +22,7 @@
   self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
index a6e67a5..40668de 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -22,7 +22,7 @@
   self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
index a6e67a5..40668de 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.expect
@@ -5,7 +5,7 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -22,7 +22,7 @@
   self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.modular.expect
index a6e67a5..40668de 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -22,7 +22,7 @@
   self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
index a6e67a5..40668de 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 static method lateLocalInit() → core::int?
   return 123;
 static method main() → dynamic {
-  lowered core::int? #lateLocal;
+  lowered has-declared-initializer core::int? #lateLocal;
   lowered core::bool #lateLocal#isSet = false;
   function #lateLocal#get() → core::int? {
     if(!#lateLocal#isSet) {
@@ -22,7 +22,7 @@
   self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
   self::expect(124, #lateLocal#get(){() → core::int?});
   function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
-    lowered T? #lateGenericLocal;
+    lowered has-declared-initializer T? #lateGenericLocal;
     lowered core::bool #lateGenericLocal#isSet = false;
     function #lateGenericLocal#get() → T? {
       if(!#lateGenericLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
index d3a7d53..e1590a8 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
@@ -137,21 +137,21 @@
   return "hest";
 }
 static method fisk() → dynamic async /* futureValueType= dynamic */ {
-  lowered core::String? #s1;
+  lowered has-declared-initializer core::String? #s1;
   function #s1#get() → core::String
     return let final core::String? #t6 = #s1 in #t6 == null ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^" : #t6{core::String};
   function #s1#set(core::String s1#param) → dynamic
     return #s1 = s1#param;
-  lowered core::String? #s2;
+  lowered has-declared-initializer core::String? #s2;
   function #s2#get() → core::String
     return let final core::String? #t7 = #s2 in #t7 == null ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}" : #t7{core::String};
   function #s2#set(core::String s2#param) → dynamic
     return #s2 = s2#param;
-  lowered core::Function? #f;
+  lowered has-declared-initializer core::Function? #f;
   function #f#get() → core::Function
     return let final core::Function? #t8 = #f in #t8 == null ?{core::Function} #f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest() : #t8{core::Function};
   function #f#set(core::Function f#param) → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
index e452424..774b14f 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
@@ -202,21 +202,21 @@
     try {
       #L3:
       {
-        lowered core::String? #s1;
+        lowered has-declared-initializer core::String? #s1;
         function #s1#get() → core::String
           return let final core::String? #t9 = #s1 in #t9 == null ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
                    ^^^^^" : #t9{core::String};
         function #s1#set(core::String s1#param) → dynamic
           return #s1 = s1#param;
-        lowered core::String? #s2;
+        lowered has-declared-initializer core::String? #s2;
         function #s2#get() → core::String
           return let final core::String? #t10 = #s2 in #t10 == null ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
                              ^^^^^"}${#C1}" : #t10{core::String};
         function #s2#set(core::String s2#param) → dynamic
           return #s2 = s2#param;
-        lowered core::Function? #f;
+        lowered has-declared-initializer core::Function? #f;
         function #f#get() → core::Function
           return let final core::Function? #t11 = #f in #t11 == null ?{core::Function} #f = () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
             final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
index 7d779ec..c6a1f43 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
@@ -157,7 +157,7 @@
   return "hest";
 }
 static method fisk() → dynamic async /* futureValueType= dynamic */ {
-  lowered core::String? #s1;
+  lowered has-declared-initializer core::String? #s1;
   lowered core::bool #s1#isSet = false;
   function #s1#get() → core::String {
     if(!#s1#isSet) {
@@ -172,7 +172,7 @@
     #s1#isSet = true;
     return #s1 = s1#param;
   }
-  lowered core::String? #s2;
+  lowered has-declared-initializer core::String? #s2;
   lowered core::bool #s2#isSet = false;
   function #s2#get() → core::String {
     if(!#s2#isSet) {
@@ -187,7 +187,7 @@
     #s2#isSet = true;
     return #s2 = s2#param;
   }
-  lowered core::Function? #f;
+  lowered has-declared-initializer core::Function? #f;
   lowered core::bool #f#isSet = false;
   function #f#get() → core::Function {
     if(!#f#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect
index 7d779ec..c6a1f43 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect
@@ -157,7 +157,7 @@
   return "hest";
 }
 static method fisk() → dynamic async /* futureValueType= dynamic */ {
-  lowered core::String? #s1;
+  lowered has-declared-initializer core::String? #s1;
   lowered core::bool #s1#isSet = false;
   function #s1#get() → core::String {
     if(!#s1#isSet) {
@@ -172,7 +172,7 @@
     #s1#isSet = true;
     return #s1 = s1#param;
   }
-  lowered core::String? #s2;
+  lowered has-declared-initializer core::String? #s2;
   lowered core::bool #s2#isSet = false;
   function #s2#get() → core::String {
     if(!#s2#isSet) {
@@ -187,7 +187,7 @@
     #s2#isSet = true;
     return #s2 = s2#param;
   }
-  lowered core::Function? #f;
+  lowered has-declared-initializer core::Function? #f;
   lowered core::bool #f#isSet = false;
   function #f#get() → core::Function {
     if(!#f#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index 73b9804..97b6f78 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -222,7 +222,7 @@
     try {
       #L3:
       {
-        lowered core::String? #s1;
+        lowered has-declared-initializer core::String? #s1;
         lowered core::bool #s1#isSet = false;
         function #s1#get() → core::String {
           if(!#s1#isSet) {
@@ -237,7 +237,7 @@
           #s1#isSet = true;
           return #s1 = s1#param;
         }
-        lowered core::String? #s2;
+        lowered has-declared-initializer core::String? #s2;
         lowered core::bool #s2#isSet = false;
         function #s2#get() → core::String {
           if(!#s2#isSet) {
@@ -252,7 +252,7 @@
           #s2#isSet = true;
           return #s2 = s2#param;
         }
-        lowered core::Function? #f;
+        lowered has-declared-initializer core::Function? #f;
         lowered core::bool #f#isSet = false;
         function #f#get() → core::Function {
           if(!#f#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
index 1d0cc75..c132f21 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.expect
@@ -8,7 +8,7 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    lowered self::Class::E? #result;
+    lowered has-declared-initializer self::Class::E? #result;
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
@@ -25,7 +25,7 @@
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   function #result#get() → core::int
     return let final core::int? #t1 = #result in #t1 == null ?{core::int} #result = value : #t1{core::int};
   function #result#set(core::int result#param) → dynamic
@@ -33,7 +33,7 @@
   return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
index 1d0cc75..c132f21 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    lowered self::Class::E? #result;
+    lowered has-declared-initializer self::Class::E? #result;
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
@@ -25,7 +25,7 @@
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   function #result#get() → core::int
     return let final core::int? #t1 = #result in #t1 == null ?{core::int} #result = value : #t1{core::int};
   function #result#set(core::int result#param) → dynamic
@@ -33,7 +33,7 @@
   return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
index 36c861d..d6061cb 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.expect
@@ -8,7 +8,7 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    lowered self::Class::E? #result;
+    lowered has-declared-initializer self::Class::E? #result;
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
@@ -25,7 +25,7 @@
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   lowered core::bool #result#isSet = false;
   function #result#get() → core::int {
     if(!#result#isSet) {
@@ -41,7 +41,7 @@
   return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.modular.expect
index 36c861d..d6061cb 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.modular.expect
@@ -8,7 +8,7 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    lowered self::Class::E? #result;
+    lowered has-declared-initializer self::Class::E? #result;
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
@@ -25,7 +25,7 @@
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   lowered core::bool #result#isSet = false;
   function #result#get() → core::int {
     if(!#result#isSet) {
@@ -41,7 +41,7 @@
   return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
index 36c861d..d6061cb 100644
--- a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : self::Class::field = field, super core::Object::•()
     ;
   method returnTypeVariable() → self::Class::E% {
-    lowered self::Class::E? #result;
+    lowered has-declared-initializer self::Class::E? #result;
     lowered core::bool #result#isSet = false;
     function #result#get() → self::Class::E% {
       if(!#result#isSet) {
@@ -25,7 +25,7 @@
   }
 }
 static method returnNonNullable(core::int value) → core::int {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   lowered core::bool #result#isSet = false;
   function #result#get() → core::int {
     if(!#result#isSet) {
@@ -41,7 +41,7 @@
   return #result#get(){() → core::int};
 }
 static method returnNullable(core::int? value) → core::int? {
-  lowered core::int? #result;
+  lowered has-declared-initializer core::int? #result;
   lowered core::bool #result#isSet = false;
   function #result#get() → core::int? {
     if(!#result#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
index f1fee7e..0f192ba 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.expect
@@ -84,7 +84,7 @@
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -97,12 +97,12 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
     return let final core::int? #t12 = #nonNullableInitializedNonFinalLocal in #t12 == null ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t12{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int nonNullableInitializedNonFinalLocal#param) → dynamic
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -114,7 +114,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
     return let final core::int? #t14 = #nonNullableInitializedFinalLocal in #t14 == null ?{core::int} let final core::int #t15 = 0 in #nonNullableInitializedFinalLocal == null ?{core::int} #nonNullableInitializedFinalLocal = #t15 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t14{core::int};
 }
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
index 8eac5e6..42d6904 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.strong.transformed.expect
@@ -84,7 +84,7 @@
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     else
       throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -97,12 +97,12 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   function #nonNullableInitializedNonFinalLocal#get() → core::int
     return let final core::int? #t12 = #nonNullableInitializedNonFinalLocal in #t12 == null ?{core::int} #nonNullableInitializedNonFinalLocal = 0 : #t12{core::int};
   function #nonNullableInitializedNonFinalLocal#set(core::int nonNullableInitializedNonFinalLocal#param) → dynamic
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -114,7 +114,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   function #nonNullableInitializedFinalLocal#get() → core::int
     return let final core::int? #t14 = #nonNullableInitializedFinalLocal in #t14 == null ?{core::int} let final core::int #t15 = 0 in #nonNullableInitializedFinalLocal == null ?{core::int} #nonNullableInitializedFinalLocal = #t15 : throw new _in::LateError::localADI("nonNullableInitializedFinalLocal") : #t14{core::int};
 }
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
index 35fcde8..c8d22f9 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.expect
@@ -137,7 +137,7 @@
       #nonNullableUninitializedFinalLocal#isSet = true;
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     }
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -150,7 +150,7 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
@@ -163,7 +163,7 @@
     #nonNullableInitializedNonFinalLocal#isSet = true;
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
   }
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -175,7 +175,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.modular.expect
index 35fcde8..c8d22f9 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.modular.expect
@@ -137,7 +137,7 @@
       #nonNullableUninitializedFinalLocal#isSet = true;
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     }
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -150,7 +150,7 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
@@ -163,7 +163,7 @@
     #nonNullableInitializedNonFinalLocal#isSet = true;
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
   }
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -175,7 +175,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
index 35fcde8..c8d22f9 100644
--- a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.transformed.expect
@@ -137,7 +137,7 @@
       #nonNullableUninitializedFinalLocal#isSet = true;
       return #nonNullableUninitializedFinalLocal = nonNullableUninitializedFinalLocal#param;
     }
-  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nullableInitializedNonFinalLocal;
   lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
   function #nullableInitializedNonFinalLocal#get() → core::int? {
     if(!#nullableInitializedNonFinalLocal#isSet) {
@@ -150,7 +150,7 @@
     #nullableInitializedNonFinalLocal#isSet = true;
     return #nullableInitializedNonFinalLocal = nullableInitializedNonFinalLocal#param;
   }
-  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered has-declared-initializer core::int? #nonNullableInitializedNonFinalLocal;
   lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
   function #nonNullableInitializedNonFinalLocal#get() → core::int {
     if(!#nonNullableInitializedNonFinalLocal#isSet) {
@@ -163,7 +163,7 @@
     #nonNullableInitializedNonFinalLocal#isSet = true;
     return #nonNullableInitializedNonFinalLocal = nonNullableInitializedNonFinalLocal#param;
   }
-  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nullableInitializedFinalLocal;
   lowered core::bool #nullableInitializedFinalLocal#isSet = false;
   function #nullableInitializedFinalLocal#get() → core::int? {
     if(!#nullableInitializedFinalLocal#isSet) {
@@ -175,7 +175,7 @@
     }
     return #nullableInitializedFinalLocal;
   }
-  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered final has-declared-initializer core::int? #nonNullableInitializedFinalLocal;
   lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
   function #nonNullableInitializedFinalLocal#get() → core::int {
     if(!#nonNullableInitializedFinalLocal#isSet) {
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.expect
index 894932f..95804ac 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.expect
@@ -43,7 +43,7 @@
   else
     throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
 static get nullableFinalTopLevelFieldWithInitializer() → core::int?
-  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
+  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
 static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
   return let final core::int? #t9 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t9 == null ?{core::int} let final core::int #t10 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t10 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t9{core::int};
 static get neverTopLevelField() → Never
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.transformed.expect
index 8450f92..01c3f9c 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.strong.transformed.expect
@@ -43,7 +43,7 @@
   else
     throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
 static get nullableFinalTopLevelFieldWithInitializer() → core::int?
-  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
+  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
 static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
   return let final core::int? #t9 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t9 == null ?{core::int} let final core::int #t10 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t10 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t9{core::int};
 static get neverTopLevelField() → Never
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.expect
index 7386247..a68fd5d 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.expect
@@ -43,7 +43,7 @@
   else
     throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
 static get nullableFinalTopLevelFieldWithInitializer() → core::int?
-  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
+  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
 static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
   return let final core::int #t9 = self::_#nonNullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t9) ?{core::int} let final core::int #t10 = 0 in _in::isSentinel(self::_#nonNullableFinalTopLevelFieldWithInitializer) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t10 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t9;
 static get neverTopLevelField() → Never
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.modular.expect
index 7386247..a68fd5d 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.modular.expect
@@ -43,7 +43,7 @@
   else
     throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
 static get nullableFinalTopLevelFieldWithInitializer() → core::int?
-  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
+  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
 static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
   return let final core::int #t9 = self::_#nonNullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t9) ?{core::int} let final core::int #t10 = 0 in _in::isSentinel(self::_#nonNullableFinalTopLevelFieldWithInitializer) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t10 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t9;
 static get neverTopLevelField() → Never
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.transformed.expect
index e689c28..e13fe0d 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
   else
     throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
 static get nullableFinalTopLevelFieldWithInitializer() → core::int?
-  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
+  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
 static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
   return let final core::int #t9 = self::_#nonNullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t9) ?{core::int} let final core::int #t10 = 0 in _in::isSentinel(self::_#nonNullableFinalTopLevelFieldWithInitializer) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t10 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t9;
 static get neverTopLevelField() → Never
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
index 7f9c20d..c1f1241 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.expect
@@ -19,7 +19,7 @@
     return let final core::int? #t3 = #nullableTopLevelLocalWithInitializer in _in::isSentinel(#t3) ?{core::int?} #nullableTopLevelLocalWithInitializer = null : #t3{core::int?};
   function #nullableTopLevelLocalWithInitializer#set(core::int? nullableTopLevelLocalWithInitializer#param) → dynamic
     return #nullableTopLevelLocalWithInitializer = nullableTopLevelLocalWithInitializer#param;
-  lowered core::int? #nonNullableTopLevelLocalWithInitializer;
+  lowered has-declared-initializer core::int? #nonNullableTopLevelLocalWithInitializer;
   function #nonNullableTopLevelLocalWithInitializer#get() → core::int
     return let final core::int? #t4 = #nonNullableTopLevelLocalWithInitializer in #t4 == null ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t4{core::int};
   function #nonNullableTopLevelLocalWithInitializer#set(core::int nonNullableTopLevelLocalWithInitializer#param) → dynamic
@@ -42,8 +42,8 @@
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
   lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
-  lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer;
+    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
+  lowered final has-declared-initializer core::int? #nonNullableFinalTopLevelLocalWithInitializer;
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
     return let final core::int? #t9 = #nonNullableFinalTopLevelLocalWithInitializer in #t9 == null ?{core::int} let final core::int #t10 = 0 in #nonNullableFinalTopLevelLocalWithInitializer == null ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t10 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t9{core::int};
   lowered Null #neverLocal;
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
index 79e2a5d..f4b2571 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     return let final core::int? #t3 = #nullableTopLevelLocalWithInitializer in _in::isSentinel(#t3) ?{core::int?} #nullableTopLevelLocalWithInitializer = null : #t3{core::int?};
   function #nullableTopLevelLocalWithInitializer#set(core::int? nullableTopLevelLocalWithInitializer#param) → dynamic
     return #nullableTopLevelLocalWithInitializer = nullableTopLevelLocalWithInitializer#param;
-  lowered core::int? #nonNullableTopLevelLocalWithInitializer;
+  lowered has-declared-initializer core::int? #nonNullableTopLevelLocalWithInitializer;
   function #nonNullableTopLevelLocalWithInitializer#get() → core::int
     return let final core::int? #t4 = #nonNullableTopLevelLocalWithInitializer in #t4 == null ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t4{core::int};
   function #nonNullableTopLevelLocalWithInitializer#set(core::int nonNullableTopLevelLocalWithInitializer#param) → dynamic
@@ -42,8 +42,8 @@
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
   lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
-  lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer;
+    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
+  lowered final has-declared-initializer core::int? #nonNullableFinalTopLevelLocalWithInitializer;
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
     return let final core::int? #t9 = #nonNullableFinalTopLevelLocalWithInitializer in #t9 == null ?{core::int} let final core::int #t10 = 0 in #nonNullableFinalTopLevelLocalWithInitializer == null ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t10 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t9{core::int};
   lowered Null #neverLocal;
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.expect
index 544622d..4853ae5 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.expect
@@ -42,7 +42,7 @@
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
   lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
+    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
   lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
     return let final core::int #t9 = #nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t9) ?{core::int} let final core::int #t10 = 0 in _in::isSentinel(#nonNullableFinalTopLevelLocalWithInitializer) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t10 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t9;
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.modular.expect
index 544622d..4853ae5 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.modular.expect
@@ -42,7 +42,7 @@
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
   lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
+    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
   lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
     return let final core::int #t9 = #nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t9) ?{core::int} let final core::int #t10 = 0 in _in::isSentinel(#nonNullableFinalTopLevelLocalWithInitializer) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t10 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t9;
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.transformed.expect
index c3a1322..db892cf 100644
--- a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.transformed.expect
@@ -42,7 +42,7 @@
       throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
   lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
   function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
-    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
+    return let final core::int? #t7 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t8 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t7;
   lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
   function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
     return let final core::int #t9 = #nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t9) ?{core::int} let final core::int #t10 = 0 in _in::isSentinel(#nonNullableFinalTopLevelLocalWithInitializer) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t10 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t9;
diff --git a/pkg/front_end/testcases/nnbd/const_is.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/const_is.dart.weak.outline.expect
index 7fb1ad7..bf02ffa 100644
--- a/pkg/front_end/testcases/nnbd/const_is.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/const_is.dart.weak.outline.expect
@@ -44,7 +44,7 @@
 static const field core::bool f5_is_t1 = self::f5 is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B;
 static method f({required core::int i}) → core::int
   ;
-static method g({core::int i}) → core::int
+static method g({has-declared-initializer core::int i}) → core::int
   ;
 static method f1(core::int i, self::B b, core::Map<core::int, core::num> m, dynamic x, {required dynamic extraParam, required core::bool obool, required dynamic ox, required self::D ob, required core::List<core::num>? ol}) → self::B
   ;
diff --git a/pkg/front_end/testcases/nnbd/export_main_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/export_main_declaration.dart.weak.outline.expect
index 0f3daec..b085536 100644
--- a/pkg/front_end/testcases/nnbd/export_main_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/export_main_declaration.dart.weak.outline.expect
@@ -314,7 +314,7 @@
 import self as mai7;
 import "dart:core" as core;
 
-static method main({core::List<core::String> args}) → void
+static method main({has-declared-initializer core::List<core::String> args}) → void
   ;
 
 library /*isNonNullableByDefault*/;
@@ -370,7 +370,7 @@
 import self as mai13;
 import "dart:core" as core;
 
-static method main([core::List<core::String> args, dynamic other]) → void
+static method main([has-declared-initializer core::List<core::String> args, dynamic other]) → void
   ;
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
index fe4267a..4982432 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.expect
@@ -49,7 +49,7 @@
   core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
-  core::String? s = null;
+  has-declared-initializer core::String? s = null;
   core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
index bdfc626..7b2b861 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
   core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
-  core::String? s = null;
+  has-declared-initializer core::String? s = null;
   core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
index fe4267a..4982432 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.expect
@@ -49,7 +49,7 @@
   core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
-  core::String? s = null;
+  has-declared-initializer core::String? s = null;
   core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.modular.expect
index fe4267a..4982432 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.modular.expect
@@ -49,7 +49,7 @@
   core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
-  core::String? s = null;
+  has-declared-initializer core::String? s = null;
   core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
index bdfc626..7b2b861 100644
--- a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
   core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
 }
 static method test3() → dynamic {
-  core::String? s = null;
+  has-declared-initializer core::String? s = null;
   core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
 }
 static method test4() → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.expect
index 25b0480..9d6d1b8 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.expect
@@ -15,12 +15,12 @@
 import self as self;
 
 static method test() → dynamic {
-  Null x = null;
+  has-declared-initializer Null x = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  Null y = null;
+  has-declared-initializer Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.transformed.expect
index 25b0480..9d6d1b8 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.strong.transformed.expect
@@ -15,12 +15,12 @@
 import self as self;
 
 static method test() → dynamic {
-  Null x = null;
+  has-declared-initializer Null x = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  Null y = null;
+  has-declared-initializer Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.expect
index 25b0480..9d6d1b8 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.expect
@@ -15,12 +15,12 @@
 import self as self;
 
 static method test() → dynamic {
-  Null x = null;
+  has-declared-initializer Null x = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  Null y = null;
+  has-declared-initializer Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.modular.expect
index 25b0480..9d6d1b8 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.modular.expect
@@ -15,12 +15,12 @@
 import self as self;
 
 static method test() → dynamic {
-  Null x = null;
+  has-declared-initializer Null x = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  Null y = null;
+  has-declared-initializer Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.transformed.expect
index 25b0480..9d6d1b8 100644
--- a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.transformed.expect
@@ -15,12 +15,12 @@
 import self as self;
 
 static method test() → dynamic {
-  Null x = null;
+  has-declared-initializer Null x = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  Null y = null;
+  has-declared-initializer Null y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo();
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.expect
index bf9a0db..260b486 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.expect
@@ -37,7 +37,7 @@
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  self::Null? y = null;
+  has-declared-initializer self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.transformed.expect
index 9c05cb5..1e413f4 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.strong.transformed.expect
@@ -37,7 +37,7 @@
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  self::Null? y = null;
+  has-declared-initializer self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.expect
index bf9a0db..260b486 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.expect
@@ -37,7 +37,7 @@
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  self::Null? y = null;
+  has-declared-initializer self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.modular.expect
index bf9a0db..260b486 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.modular.expect
@@ -37,7 +37,7 @@
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  self::Null? y = null;
+  has-declared-initializer self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.transformed.expect
index f6edfc2..8c79cc4 100644
--- a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   x.foo();
     ^^^" in x{<unresolved>}.foo();
-  self::Null? y = null;
+  has-declared-initializer self::Null? y = null;
   invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
diff --git a/pkg/front_end/testcases/nnbd/issue42758.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42758.dart.strong.expect
index 9064030..83818f4 100644
--- a/pkg/front_end/testcases/nnbd/issue42758.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42758.dart.strong.expect
@@ -147,7 +147,7 @@
   } =>#t15;
   core::Map<Never, Never> m1 = block {
     final core::Map<Never, Never> #t17 = <Never, Never>{};
-    for (final core::MapEntry<Never, Never> #t18 in n1.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+    for (final has-declared-initializer core::MapEntry<Never, Never> #t18 in n1.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
       #t17.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}{Never}, #t18.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t17.{core::Map::[]=}{Invariant}(n1, n1){(Never, Never) → void};
   } =>#t17;
@@ -155,7 +155,7 @@
     final core::Map<Never, Never> #t19 = <Never, Never>{};
     final core::Map<Never, Never>? #t20 = n1;
     if(!(#t20 == null))
-      for (final core::MapEntry<Never, Never> #t21 in #t20{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t21 in #t20{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t19.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{Never}, #t21.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t19.{core::Map::[]=}{Invariant}(n1, n1){(Never, Never) → void};
   } =>#t19;
@@ -166,7 +166,7 @@
     final core::Map<Never, Never> #t22 = <Never, Never>{};
     final core::Map<Never, Never>? #t23 = n2;
     if(!(#t23 == null))
-      for (final core::MapEntry<Never, Never> #t24 in #t23{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t24 in #t23{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t22.{core::Map::[]=}{Invariant}(#t24.{core::MapEntry::key}{Never}, #t24.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t22.{core::Map::[]=}{Invariant}(n1, n1){(Never, Never) → void};
   } =>#t22;
@@ -177,7 +177,7 @@
     final core::Map<Never, Never> #t25 = <Never, Never>{};
     final core::Map<Never, Never>? #t26 = n3;
     if(!(#t26 == null))
-      for (final core::MapEntry<Never, Never> #t27 in #t26{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t27 in #t26{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}{Never}, #t27.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t25.{core::Map::[]=}{Invariant}(n1, n1){(Never, Never) → void};
   } =>#t25;
@@ -251,7 +251,7 @@
   } =>#t42;
   core::Map<self::test2::N1, self::test2::N1> m1 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t44 = <self::test2::N1, self::test2::N1>{};
-    for (final core::MapEntry<self::test2::N1, self::test2::N1> #t45 in n1.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+    for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t45 in n1.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
       #t44.{core::Map::[]=}{Invariant}(#t45.{core::MapEntry::key}{self::test2::N1}, #t45.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t44.{core::Map::[]=}{Invariant}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t44;
@@ -259,7 +259,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t46 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t47 = n1;
     if(!(#t47 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t48 in #t47{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t48 in #t47{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t46.{core::Map::[]=}{Invariant}(#t48.{core::MapEntry::key}{self::test2::N1}, #t48.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t46.{core::Map::[]=}{Invariant}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t46;
@@ -270,7 +270,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t49 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t50 = n2;
     if(!(#t50 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t51 in #t50{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t51 in #t50{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t49.{core::Map::[]=}{Invariant}(#t51.{core::MapEntry::key}{self::test2::N1}, #t51.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t49.{core::Map::[]=}{Invariant}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t49;
@@ -281,7 +281,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t52 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t53 = n3;
     if(!(#t53 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t54 in #t53{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t54 in #t53{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t52.{core::Map::[]=}{Invariant}(#t54.{core::MapEntry::key}{self::test2::N1}, #t54.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t52.{core::Map::[]=}{Invariant}(n1, n1){(self::test2::N1, self::test2::N1) → void};
   } =>#t52;
diff --git a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.expect
index 7478ccc..e4f6638 100644
--- a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.expect
@@ -148,7 +148,7 @@
   } =>#t24;
   core::Map<Never, Never> m1 = block {
     final core::Map<Never, Never> #t27 = <Never, Never>{};
-    for (final core::MapEntry<Never, Never> #t28 in (let final Never #t29 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+    for (final has-declared-initializer core::MapEntry<Never, Never> #t28 in (let final Never #t29 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
       #t27.{core::Map::[]=}{Invariant}(#t28.{core::MapEntry::key}{Never}, #t28.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t27.{core::Map::[]=}{Invariant}(let final Never #t30 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t31 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t27;
@@ -156,7 +156,7 @@
     final core::Map<Never, Never> #t32 = <Never, Never>{};
     final core::Map<Never, Never>? #t33 = let final Never #t34 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     if(!(#t33 == null))
-      for (final core::MapEntry<Never, Never> #t35 in #t33{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t35 in #t33{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t32.{core::Map::[]=}{Invariant}(#t35.{core::MapEntry::key}{Never}, #t35.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t32.{core::Map::[]=}{Invariant}(let final Never #t36 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t37 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t32;
@@ -167,7 +167,7 @@
     final core::Map<Never, Never> #t40 = <Never, Never>{};
     final core::Map<Never, Never>? #t41 = n2;
     if(!(#t41 == null))
-      for (final core::MapEntry<Never, Never> #t42 in #t41{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t42 in #t41{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t40.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{Never}, #t42.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t40.{core::Map::[]=}{Invariant}(let final Never #t43 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t44 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t40;
@@ -178,7 +178,7 @@
     final core::Map<Never, Never> #t47 = <Never, Never>{};
     final core::Map<Never, Never>? #t48 = n3;
     if(!(#t48 == null))
-      for (final core::MapEntry<Never, Never> #t49 in #t48{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t49 in #t48{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t47.{core::Map::[]=}{Invariant}(#t49.{core::MapEntry::key}{Never}, #t49.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t47.{core::Map::[]=}{Invariant}(let final Never #t50 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t51 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t47;
@@ -252,7 +252,7 @@
   } =>#t75;
   core::Map<self::test2::N1, self::test2::N1> m1 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t78 = <self::test2::N1, self::test2::N1>{};
-    for (final core::MapEntry<self::test2::N1, self::test2::N1> #t79 in (let final self::test2::N1 #t80 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+    for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t79 in (let final self::test2::N1 #t80 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
       #t78.{core::Map::[]=}{Invariant}(#t79.{core::MapEntry::key}{self::test2::N1}, #t79.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t78.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t81 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t82 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t78;
@@ -260,7 +260,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t83 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t84 = let final self::test2::N1 #t85 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     if(!(#t84 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t86 in #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t86 in #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t83.{core::Map::[]=}{Invariant}(#t86.{core::MapEntry::key}{self::test2::N1}, #t86.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t83.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t87 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t88 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t83;
@@ -271,7 +271,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t91 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t92 = n2;
     if(!(#t92 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t93 in #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t93 in #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t91.{core::Map::[]=}{Invariant}(#t93.{core::MapEntry::key}{self::test2::N1}, #t93.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t91.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t94 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t95 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t91;
@@ -282,7 +282,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t98 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t99 = n3;
     if(!(#t99 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t100 in #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t100 in #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}{self::test2::N1}, #t100.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t98.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t101 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t102 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t98;
diff --git a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.modular.expect
index 7478ccc..e4f6638 100644
--- a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.modular.expect
@@ -148,7 +148,7 @@
   } =>#t24;
   core::Map<Never, Never> m1 = block {
     final core::Map<Never, Never> #t27 = <Never, Never>{};
-    for (final core::MapEntry<Never, Never> #t28 in (let final Never #t29 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+    for (final has-declared-initializer core::MapEntry<Never, Never> #t28 in (let final Never #t29 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
       #t27.{core::Map::[]=}{Invariant}(#t28.{core::MapEntry::key}{Never}, #t28.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t27.{core::Map::[]=}{Invariant}(let final Never #t30 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t31 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t27;
@@ -156,7 +156,7 @@
     final core::Map<Never, Never> #t32 = <Never, Never>{};
     final core::Map<Never, Never>? #t33 = let final Never #t34 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     if(!(#t33 == null))
-      for (final core::MapEntry<Never, Never> #t35 in #t33{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t35 in #t33{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t32.{core::Map::[]=}{Invariant}(#t35.{core::MapEntry::key}{Never}, #t35.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t32.{core::Map::[]=}{Invariant}(let final Never #t36 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t37 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t32;
@@ -167,7 +167,7 @@
     final core::Map<Never, Never> #t40 = <Never, Never>{};
     final core::Map<Never, Never>? #t41 = n2;
     if(!(#t41 == null))
-      for (final core::MapEntry<Never, Never> #t42 in #t41{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t42 in #t41{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t40.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{Never}, #t42.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t40.{core::Map::[]=}{Invariant}(let final Never #t43 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t44 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t40;
@@ -178,7 +178,7 @@
     final core::Map<Never, Never> #t47 = <Never, Never>{};
     final core::Map<Never, Never>? #t48 = n3;
     if(!(#t48 == null))
-      for (final core::MapEntry<Never, Never> #t49 in #t48{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      for (final has-declared-initializer core::MapEntry<Never, Never> #t49 in #t48{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
         #t47.{core::Map::[]=}{Invariant}(#t49.{core::MapEntry::key}{Never}, #t49.{core::MapEntry::value}{Never}){(Never, Never) → void};
     #t47.{core::Map::[]=}{Invariant}(let final Never #t50 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t51 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
   } =>#t47;
@@ -252,7 +252,7 @@
   } =>#t75;
   core::Map<self::test2::N1, self::test2::N1> m1 = block {
     final core::Map<self::test2::N1, self::test2::N1> #t78 = <self::test2::N1, self::test2::N1>{};
-    for (final core::MapEntry<self::test2::N1, self::test2::N1> #t79 in (let final self::test2::N1 #t80 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+    for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t79 in (let final self::test2::N1 #t80 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
       #t78.{core::Map::[]=}{Invariant}(#t79.{core::MapEntry::key}{self::test2::N1}, #t79.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t78.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t81 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t82 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t78;
@@ -260,7 +260,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t83 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t84 = let final self::test2::N1 #t85 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     if(!(#t84 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t86 in #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t86 in #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t83.{core::Map::[]=}{Invariant}(#t86.{core::MapEntry::key}{self::test2::N1}, #t86.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t83.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t87 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t88 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t83;
@@ -271,7 +271,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t91 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t92 = n2;
     if(!(#t92 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t93 in #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t93 in #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t91.{core::Map::[]=}{Invariant}(#t93.{core::MapEntry::key}{self::test2::N1}, #t93.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t91.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t94 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t95 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t91;
@@ -282,7 +282,7 @@
     final core::Map<self::test2::N1, self::test2::N1> #t98 = <self::test2::N1, self::test2::N1>{};
     final core::Map<self::test2::N1, self::test2::N1>? #t99 = n3;
     if(!(#t99 == null))
-      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t100 in #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t100 in #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
         #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}{self::test2::N1}, #t100.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
     #t98.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t101 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t102 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
   } =>#t98;
diff --git a/pkg/front_end/testcases/nnbd/issue43256.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43256.dart.strong.expect
index 097a586..903090e 100644
--- a/pkg/front_end/testcases/nnbd/issue43256.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43256.dart.strong.expect
@@ -62,10 +62,10 @@
   if (i > 0) ...nullableMap, // error
                 ^", null){(dynamic, dynamic) → void};
   if(self::i.{core::num::>}(0){(core::num) → core::bool})
-    for (final core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   if(self::i.{core::num::>}(0){(core::num) → core::bool})
-    for (final core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t1.{core::Map::[]=}{Invariant}(#t3.{core::MapEntry::key}{dynamic}, #t3.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t1;
 static field core::Set<dynamic> set1 = block {
@@ -103,10 +103,10 @@
     if (i > 0) ...y, // error
                   ^", null){(dynamic, dynamic) → void};
     if(self::i.{core::num::>}(0){(core::num) → core::bool})
-      for (final core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
         #t6.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     if(self::i.{core::num::>}(0){(core::num) → core::bool})
-      for (final core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
         #t6.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}{dynamic}, #t8.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t6;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.expect
index 097a586..903090e 100644
--- a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.expect
@@ -62,10 +62,10 @@
   if (i > 0) ...nullableMap, // error
                 ^", null){(dynamic, dynamic) → void};
   if(self::i.{core::num::>}(0){(core::num) → core::bool})
-    for (final core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   if(self::i.{core::num::>}(0){(core::num) → core::bool})
-    for (final core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t1.{core::Map::[]=}{Invariant}(#t3.{core::MapEntry::key}{dynamic}, #t3.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t1;
 static field core::Set<dynamic> set1 = block {
@@ -103,10 +103,10 @@
     if (i > 0) ...y, // error
                   ^", null){(dynamic, dynamic) → void};
     if(self::i.{core::num::>}(0){(core::num) → core::bool})
-      for (final core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
         #t6.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     if(self::i.{core::num::>}(0){(core::num) → core::bool})
-      for (final core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
         #t6.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}{dynamic}, #t8.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t6;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.modular.expect
index 097a586..903090e 100644
--- a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.modular.expect
@@ -62,10 +62,10 @@
   if (i > 0) ...nullableMap, // error
                 ^", null){(dynamic, dynamic) → void};
   if(self::i.{core::num::>}(0){(core::num) → core::bool})
-    for (final core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   if(self::i.{core::num::>}(0){(core::num) → core::bool})
-    for (final core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t1.{core::Map::[]=}{Invariant}(#t3.{core::MapEntry::key}{dynamic}, #t3.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
 } =>#t1;
 static field core::Set<dynamic> set1 = block {
@@ -103,10 +103,10 @@
     if (i > 0) ...y, // error
                   ^", null){(dynamic, dynamic) → void};
     if(self::i.{core::num::>}(0){(core::num) → core::bool})
-      for (final core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
         #t6.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
     if(self::i.{core::num::>}(0){(core::num) → core::bool})
-      for (final core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
         #t6.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}{dynamic}, #t8.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
   } =>#t6;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.strong.expect
index e415041..6f1a9c7 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.strong.expect
@@ -171,7 +171,7 @@
 static method foo(core::bool condition, core::Iterable<dynamic> iterable, core::List<core::int>? a, core::Set<core::int>? b, core::Iterable<core::int>? c, core::Map<core::int, core::int>? d) → dynamic {
   return <core::Object>[ block {
     final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...a}, // Error.
         ^") {
       final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
@@ -179,7 +179,7 @@
     }
   } =>#t1, block {
     final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...b}, // Error.
         ^") {
       final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
@@ -187,7 +187,7 @@
     }
   } =>#t4, block {
     final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...c}, // Error.
         ^") {
       final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
@@ -207,7 +207,7 @@
   } =>#t10, block {
     final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...a}, // Error.
                        ^") {
         final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
@@ -216,7 +216,7 @@
   } =>#t11, block {
     final core::Set<core::int> #t14 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...b}, // Error.
                        ^") {
         final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
@@ -225,7 +225,7 @@
   } =>#t14, block {
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...c}, // Error.
                        ^") {
         final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
@@ -240,7 +240,7 @@
   } =>#t20, block {
     final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...a}, // Error.
                                     ^") {
         final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
@@ -249,7 +249,7 @@
   } =>#t21, block {
     final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...b}, // Error.
                                     ^") {
         final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
@@ -258,7 +258,7 @@
   } =>#t24, block {
     final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...c}, // Error.
                                     ^") {
         final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
@@ -273,7 +273,7 @@
   } =>#t30, block {
     final core::Set<core::int> #t31 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...a}, // Error.
                                      ^") {
         final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
@@ -282,7 +282,7 @@
   } =>#t31, block {
     final core::Set<core::int> #t34 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...b}, // Error.
                                      ^") {
         final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
@@ -291,7 +291,7 @@
   } =>#t34, block {
     final core::Set<core::int> #t37 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...c}, // Error.
                                      ^") {
         final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
@@ -307,7 +307,7 @@
     final core::Set<core::int> #t41 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t42 = a;
     if(!(#t42 == null))
-      for (final dynamic #t43 in #t42{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t43 in #t42{core::Iterable<dynamic>}) {
         final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
         #t41.{core::Set::add}{Invariant}(#t44){(core::int) → core::bool};
       }
@@ -315,7 +315,7 @@
     final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t46 = b;
     if(!(#t46 == null))
-      for (final dynamic #t47 in #t46{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t47 in #t46{core::Iterable<dynamic>}) {
         final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
         #t45.{core::Set::add}{Invariant}(#t48){(core::int) → core::bool};
       }
@@ -323,7 +323,7 @@
     final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t50 = c;
     if(!(#t50 == null))
-      for (final dynamic #t51 in #t50{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t51 in #t50{core::Iterable<dynamic>}) {
         final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
         #t49.{core::Set::add}{Invariant}(#t52){(core::int) → core::bool};
       }
@@ -331,14 +331,14 @@
     final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t54 = d;
     if(!(#t54 == null))
-      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t53, block {
     final core::Set<core::int> #t56 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t57 = a;
       if(!(#t57 == null))
-        for (final dynamic #t58 in #t57{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t58 in #t57{core::Iterable<dynamic>}) {
           final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
           #t56.{core::Set::add}{Invariant}(#t59){(core::int) → core::bool};
         }
@@ -348,7 +348,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t61 = b;
       if(!(#t61 == null))
-        for (final dynamic #t62 in #t61{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t62 in #t61{core::Iterable<dynamic>}) {
           final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
           #t60.{core::Set::add}{Invariant}(#t63){(core::int) → core::bool};
         }
@@ -358,7 +358,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t65 = c;
       if(!(#t65 == null))
-        for (final dynamic #t66 in #t65{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t66 in #t65{core::Iterable<dynamic>}) {
           final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
           #t64.{core::Set::add}{Invariant}(#t67){(core::int) → core::bool};
         }
@@ -368,7 +368,7 @@
     if(condition) {
       final core::Map<core::int, core::int>? #t69 = d;
       if(!(#t69 == null))
-        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t68, block {
@@ -376,7 +376,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t72 = a;
       if(!(#t72 == null))
-        for (final dynamic #t73 in #t72{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t73 in #t72{core::Iterable<dynamic>}) {
           final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
           #t71.{core::Set::add}{Invariant}(#t74){(core::int) → core::bool};
         }
@@ -386,7 +386,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t76 = b;
       if(!(#t76 == null))
-        for (final dynamic #t77 in #t76{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t77 in #t76{core::Iterable<dynamic>}) {
           final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
           #t75.{core::Set::add}{Invariant}(#t78){(core::int) → core::bool};
         }
@@ -396,7 +396,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t80 = c;
       if(!(#t80 == null))
-        for (final dynamic #t81 in #t80{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t81 in #t80{core::Iterable<dynamic>}) {
           final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
           #t79.{core::Set::add}{Invariant}(#t82){(core::int) → core::bool};
         }
@@ -406,7 +406,7 @@
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t84 = d;
       if(!(#t84 == null))
-        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t83, block {
@@ -414,7 +414,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t87 = a;
       if(!(#t87 == null))
-        for (final dynamic #t88 in #t87{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t88 in #t87{core::Iterable<dynamic>}) {
           final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
           #t86.{core::Set::add}{Invariant}(#t89){(core::int) → core::bool};
         }
@@ -424,7 +424,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t91 = b;
       if(!(#t91 == null))
-        for (final dynamic #t92 in #t91{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t92 in #t91{core::Iterable<dynamic>}) {
           final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
           #t90.{core::Set::add}{Invariant}(#t93){(core::int) → core::bool};
         }
@@ -434,7 +434,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t95 = c;
       if(!(#t95 == null))
-        for (final dynamic #t96 in #t95{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t96 in #t95{core::Iterable<dynamic>}) {
           final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
           #t94.{core::Set::add}{Invariant}(#t97){(core::int) → core::bool};
         }
@@ -444,7 +444,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t99 = d;
       if(!(#t99 == null))
-        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t98];
@@ -452,7 +452,7 @@
 static method bar<X extends core::List<core::int>?, Y extends core::Set<core::int>?, Z extends core::Iterable<core::int>?, W extends core::Map<core::int, core::int>?>(core::bool condition, core::Iterable<dynamic> iterable, self::bar::X% x, self::bar::Y% y, self::bar::Z% z, self::bar::W% w) → dynamic {
   return <core::Object>[ block {
     final core::Set<core::int> #t101 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...x}, // Error.
         ^") {
       final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
@@ -460,7 +460,7 @@
     }
   } =>#t101, block {
     final core::Set<core::int> #t104 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...y}, // Error.
         ^") {
       final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
@@ -468,7 +468,7 @@
     }
   } =>#t104, block {
     final core::Set<core::int> #t107 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...z}, // Error.
         ^") {
       final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
@@ -486,7 +486,7 @@
   } =>#t110, block {
     final core::Set<core::int> #t111 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...x}, // Error.
                        ^") {
         final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
@@ -495,7 +495,7 @@
   } =>#t111, block {
     final core::Set<core::int> #t114 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...y}, // Error.
                        ^") {
         final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
@@ -504,7 +504,7 @@
   } =>#t114, block {
     final core::Set<core::int> #t117 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...z}, // Error.
                        ^") {
         final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
@@ -519,7 +519,7 @@
   } =>#t120, block {
     final core::Set<core::int> #t121 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...x}, // Error.
                                     ^") {
         final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
@@ -528,7 +528,7 @@
   } =>#t121, block {
     final core::Set<core::int> #t124 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...y}, // Error.
                                     ^") {
         final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
@@ -537,7 +537,7 @@
   } =>#t124, block {
     final core::Set<core::int> #t127 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...z}, // Error.
                                     ^") {
         final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
@@ -552,7 +552,7 @@
   } =>#t130, block {
     final core::Set<core::int> #t131 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...x}, // Error.
                                      ^") {
         final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
@@ -561,7 +561,7 @@
   } =>#t131, block {
     final core::Set<core::int> #t134 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...y}, // Error.
                                      ^") {
         final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
@@ -570,7 +570,7 @@
   } =>#t134, block {
     final core::Set<core::int> #t137 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...z}, // Error.
                                      ^") {
         final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
@@ -586,7 +586,7 @@
     final core::Set<core::int> #t141 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t142 = x;
     if(!(#t142 == null))
-      for (final dynamic #t143 in #t142{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t143 in #t142{core::Iterable<dynamic>}) {
         final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
         #t141.{core::Set::add}{Invariant}(#t144){(core::int) → core::bool};
       }
@@ -594,7 +594,7 @@
     final core::Set<core::int> #t145 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t146 = y;
     if(!(#t146 == null))
-      for (final dynamic #t147 in #t146{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t147 in #t146{core::Iterable<dynamic>}) {
         final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
         #t145.{core::Set::add}{Invariant}(#t148){(core::int) → core::bool};
       }
@@ -602,7 +602,7 @@
     final core::Set<core::int> #t149 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t150 = z;
     if(!(#t150 == null))
-      for (final dynamic #t151 in #t150{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t151 in #t150{core::Iterable<dynamic>}) {
         final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
         #t149.{core::Set::add}{Invariant}(#t152){(core::int) → core::bool};
       }
@@ -610,14 +610,14 @@
     final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t154 = w;
     if(!(#t154 == null))
-      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t153, block {
     final core::Set<core::int> #t156 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t157 = x;
       if(!(#t157 == null))
-        for (final dynamic #t158 in #t157{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t158 in #t157{core::Iterable<dynamic>}) {
           final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
           #t156.{core::Set::add}{Invariant}(#t159){(core::int) → core::bool};
         }
@@ -627,7 +627,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t161 = y;
       if(!(#t161 == null))
-        for (final dynamic #t162 in #t161{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t162 in #t161{core::Iterable<dynamic>}) {
           final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
           #t160.{core::Set::add}{Invariant}(#t163){(core::int) → core::bool};
         }
@@ -637,7 +637,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t165 = z;
       if(!(#t165 == null))
-        for (final dynamic #t166 in #t165{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t166 in #t165{core::Iterable<dynamic>}) {
           final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
           #t164.{core::Set::add}{Invariant}(#t167){(core::int) → core::bool};
         }
@@ -647,7 +647,7 @@
     if(condition) {
       final core::Map<core::int, core::int>? #t169 = w;
       if(!(#t169 == null))
-        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t168, block {
@@ -655,7 +655,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t172 = x;
       if(!(#t172 == null))
-        for (final dynamic #t173 in #t172{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t173 in #t172{core::Iterable<dynamic>}) {
           final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
           #t171.{core::Set::add}{Invariant}(#t174){(core::int) → core::bool};
         }
@@ -665,7 +665,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t176 = y;
       if(!(#t176 == null))
-        for (final dynamic #t177 in #t176{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t177 in #t176{core::Iterable<dynamic>}) {
           final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
           #t175.{core::Set::add}{Invariant}(#t178){(core::int) → core::bool};
         }
@@ -675,7 +675,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t180 = z;
       if(!(#t180 == null))
-        for (final dynamic #t181 in #t180{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t181 in #t180{core::Iterable<dynamic>}) {
           final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
           #t179.{core::Set::add}{Invariant}(#t182){(core::int) → core::bool};
         }
@@ -685,7 +685,7 @@
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t184 = w;
       if(!(#t184 == null))
-        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t183, block {
@@ -693,7 +693,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t187 = x;
       if(!(#t187 == null))
-        for (final dynamic #t188 in #t187{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t188 in #t187{core::Iterable<dynamic>}) {
           final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
           #t186.{core::Set::add}{Invariant}(#t189){(core::int) → core::bool};
         }
@@ -703,7 +703,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t191 = y;
       if(!(#t191 == null))
-        for (final dynamic #t192 in #t191{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t192 in #t191{core::Iterable<dynamic>}) {
           final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
           #t190.{core::Set::add}{Invariant}(#t193){(core::int) → core::bool};
         }
@@ -713,7 +713,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t195 = z;
       if(!(#t195 == null))
-        for (final dynamic #t196 in #t195{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t196 in #t195{core::Iterable<dynamic>}) {
           final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
           #t194.{core::Set::add}{Invariant}(#t197){(core::int) → core::bool};
         }
@@ -723,7 +723,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t199 = w;
       if(!(#t199 == null))
-        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t198];
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.expect
index e415041..6f1a9c7 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.expect
@@ -171,7 +171,7 @@
 static method foo(core::bool condition, core::Iterable<dynamic> iterable, core::List<core::int>? a, core::Set<core::int>? b, core::Iterable<core::int>? c, core::Map<core::int, core::int>? d) → dynamic {
   return <core::Object>[ block {
     final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...a}, // Error.
         ^") {
       final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
@@ -179,7 +179,7 @@
     }
   } =>#t1, block {
     final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...b}, // Error.
         ^") {
       final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
@@ -187,7 +187,7 @@
     }
   } =>#t4, block {
     final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...c}, // Error.
         ^") {
       final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
@@ -207,7 +207,7 @@
   } =>#t10, block {
     final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...a}, // Error.
                        ^") {
         final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
@@ -216,7 +216,7 @@
   } =>#t11, block {
     final core::Set<core::int> #t14 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...b}, // Error.
                        ^") {
         final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
@@ -225,7 +225,7 @@
   } =>#t14, block {
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...c}, // Error.
                        ^") {
         final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
@@ -240,7 +240,7 @@
   } =>#t20, block {
     final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...a}, // Error.
                                     ^") {
         final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
@@ -249,7 +249,7 @@
   } =>#t21, block {
     final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...b}, // Error.
                                     ^") {
         final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
@@ -258,7 +258,7 @@
   } =>#t24, block {
     final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...c}, // Error.
                                     ^") {
         final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
@@ -273,7 +273,7 @@
   } =>#t30, block {
     final core::Set<core::int> #t31 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...a}, // Error.
                                      ^") {
         final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
@@ -282,7 +282,7 @@
   } =>#t31, block {
     final core::Set<core::int> #t34 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...b}, // Error.
                                      ^") {
         final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
@@ -291,7 +291,7 @@
   } =>#t34, block {
     final core::Set<core::int> #t37 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...c}, // Error.
                                      ^") {
         final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
@@ -307,7 +307,7 @@
     final core::Set<core::int> #t41 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t42 = a;
     if(!(#t42 == null))
-      for (final dynamic #t43 in #t42{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t43 in #t42{core::Iterable<dynamic>}) {
         final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
         #t41.{core::Set::add}{Invariant}(#t44){(core::int) → core::bool};
       }
@@ -315,7 +315,7 @@
     final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t46 = b;
     if(!(#t46 == null))
-      for (final dynamic #t47 in #t46{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t47 in #t46{core::Iterable<dynamic>}) {
         final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
         #t45.{core::Set::add}{Invariant}(#t48){(core::int) → core::bool};
       }
@@ -323,7 +323,7 @@
     final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t50 = c;
     if(!(#t50 == null))
-      for (final dynamic #t51 in #t50{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t51 in #t50{core::Iterable<dynamic>}) {
         final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
         #t49.{core::Set::add}{Invariant}(#t52){(core::int) → core::bool};
       }
@@ -331,14 +331,14 @@
     final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t54 = d;
     if(!(#t54 == null))
-      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t53, block {
     final core::Set<core::int> #t56 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t57 = a;
       if(!(#t57 == null))
-        for (final dynamic #t58 in #t57{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t58 in #t57{core::Iterable<dynamic>}) {
           final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
           #t56.{core::Set::add}{Invariant}(#t59){(core::int) → core::bool};
         }
@@ -348,7 +348,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t61 = b;
       if(!(#t61 == null))
-        for (final dynamic #t62 in #t61{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t62 in #t61{core::Iterable<dynamic>}) {
           final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
           #t60.{core::Set::add}{Invariant}(#t63){(core::int) → core::bool};
         }
@@ -358,7 +358,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t65 = c;
       if(!(#t65 == null))
-        for (final dynamic #t66 in #t65{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t66 in #t65{core::Iterable<dynamic>}) {
           final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
           #t64.{core::Set::add}{Invariant}(#t67){(core::int) → core::bool};
         }
@@ -368,7 +368,7 @@
     if(condition) {
       final core::Map<core::int, core::int>? #t69 = d;
       if(!(#t69 == null))
-        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t68, block {
@@ -376,7 +376,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t72 = a;
       if(!(#t72 == null))
-        for (final dynamic #t73 in #t72{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t73 in #t72{core::Iterable<dynamic>}) {
           final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
           #t71.{core::Set::add}{Invariant}(#t74){(core::int) → core::bool};
         }
@@ -386,7 +386,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t76 = b;
       if(!(#t76 == null))
-        for (final dynamic #t77 in #t76{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t77 in #t76{core::Iterable<dynamic>}) {
           final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
           #t75.{core::Set::add}{Invariant}(#t78){(core::int) → core::bool};
         }
@@ -396,7 +396,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t80 = c;
       if(!(#t80 == null))
-        for (final dynamic #t81 in #t80{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t81 in #t80{core::Iterable<dynamic>}) {
           final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
           #t79.{core::Set::add}{Invariant}(#t82){(core::int) → core::bool};
         }
@@ -406,7 +406,7 @@
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t84 = d;
       if(!(#t84 == null))
-        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t83, block {
@@ -414,7 +414,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t87 = a;
       if(!(#t87 == null))
-        for (final dynamic #t88 in #t87{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t88 in #t87{core::Iterable<dynamic>}) {
           final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
           #t86.{core::Set::add}{Invariant}(#t89){(core::int) → core::bool};
         }
@@ -424,7 +424,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t91 = b;
       if(!(#t91 == null))
-        for (final dynamic #t92 in #t91{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t92 in #t91{core::Iterable<dynamic>}) {
           final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
           #t90.{core::Set::add}{Invariant}(#t93){(core::int) → core::bool};
         }
@@ -434,7 +434,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t95 = c;
       if(!(#t95 == null))
-        for (final dynamic #t96 in #t95{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t96 in #t95{core::Iterable<dynamic>}) {
           final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
           #t94.{core::Set::add}{Invariant}(#t97){(core::int) → core::bool};
         }
@@ -444,7 +444,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t99 = d;
       if(!(#t99 == null))
-        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t98];
@@ -452,7 +452,7 @@
 static method bar<X extends core::List<core::int>?, Y extends core::Set<core::int>?, Z extends core::Iterable<core::int>?, W extends core::Map<core::int, core::int>?>(core::bool condition, core::Iterable<dynamic> iterable, self::bar::X% x, self::bar::Y% y, self::bar::Z% z, self::bar::W% w) → dynamic {
   return <core::Object>[ block {
     final core::Set<core::int> #t101 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...x}, // Error.
         ^") {
       final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
@@ -460,7 +460,7 @@
     }
   } =>#t101, block {
     final core::Set<core::int> #t104 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...y}, // Error.
         ^") {
       final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
@@ -468,7 +468,7 @@
     }
   } =>#t104, block {
     final core::Set<core::int> #t107 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...z}, // Error.
         ^") {
       final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
@@ -486,7 +486,7 @@
   } =>#t110, block {
     final core::Set<core::int> #t111 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...x}, // Error.
                        ^") {
         final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
@@ -495,7 +495,7 @@
   } =>#t111, block {
     final core::Set<core::int> #t114 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...y}, // Error.
                        ^") {
         final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
@@ -504,7 +504,7 @@
   } =>#t114, block {
     final core::Set<core::int> #t117 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...z}, // Error.
                        ^") {
         final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
@@ -519,7 +519,7 @@
   } =>#t120, block {
     final core::Set<core::int> #t121 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...x}, // Error.
                                     ^") {
         final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
@@ -528,7 +528,7 @@
   } =>#t121, block {
     final core::Set<core::int> #t124 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...y}, // Error.
                                     ^") {
         final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
@@ -537,7 +537,7 @@
   } =>#t124, block {
     final core::Set<core::int> #t127 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...z}, // Error.
                                     ^") {
         final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
@@ -552,7 +552,7 @@
   } =>#t130, block {
     final core::Set<core::int> #t131 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...x}, // Error.
                                      ^") {
         final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
@@ -561,7 +561,7 @@
   } =>#t131, block {
     final core::Set<core::int> #t134 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...y}, // Error.
                                      ^") {
         final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
@@ -570,7 +570,7 @@
   } =>#t134, block {
     final core::Set<core::int> #t137 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...z}, // Error.
                                      ^") {
         final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
@@ -586,7 +586,7 @@
     final core::Set<core::int> #t141 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t142 = x;
     if(!(#t142 == null))
-      for (final dynamic #t143 in #t142{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t143 in #t142{core::Iterable<dynamic>}) {
         final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
         #t141.{core::Set::add}{Invariant}(#t144){(core::int) → core::bool};
       }
@@ -594,7 +594,7 @@
     final core::Set<core::int> #t145 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t146 = y;
     if(!(#t146 == null))
-      for (final dynamic #t147 in #t146{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t147 in #t146{core::Iterable<dynamic>}) {
         final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
         #t145.{core::Set::add}{Invariant}(#t148){(core::int) → core::bool};
       }
@@ -602,7 +602,7 @@
     final core::Set<core::int> #t149 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t150 = z;
     if(!(#t150 == null))
-      for (final dynamic #t151 in #t150{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t151 in #t150{core::Iterable<dynamic>}) {
         final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
         #t149.{core::Set::add}{Invariant}(#t152){(core::int) → core::bool};
       }
@@ -610,14 +610,14 @@
     final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t154 = w;
     if(!(#t154 == null))
-      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t153, block {
     final core::Set<core::int> #t156 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t157 = x;
       if(!(#t157 == null))
-        for (final dynamic #t158 in #t157{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t158 in #t157{core::Iterable<dynamic>}) {
           final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
           #t156.{core::Set::add}{Invariant}(#t159){(core::int) → core::bool};
         }
@@ -627,7 +627,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t161 = y;
       if(!(#t161 == null))
-        for (final dynamic #t162 in #t161{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t162 in #t161{core::Iterable<dynamic>}) {
           final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
           #t160.{core::Set::add}{Invariant}(#t163){(core::int) → core::bool};
         }
@@ -637,7 +637,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t165 = z;
       if(!(#t165 == null))
-        for (final dynamic #t166 in #t165{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t166 in #t165{core::Iterable<dynamic>}) {
           final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
           #t164.{core::Set::add}{Invariant}(#t167){(core::int) → core::bool};
         }
@@ -647,7 +647,7 @@
     if(condition) {
       final core::Map<core::int, core::int>? #t169 = w;
       if(!(#t169 == null))
-        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t168, block {
@@ -655,7 +655,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t172 = x;
       if(!(#t172 == null))
-        for (final dynamic #t173 in #t172{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t173 in #t172{core::Iterable<dynamic>}) {
           final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
           #t171.{core::Set::add}{Invariant}(#t174){(core::int) → core::bool};
         }
@@ -665,7 +665,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t176 = y;
       if(!(#t176 == null))
-        for (final dynamic #t177 in #t176{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t177 in #t176{core::Iterable<dynamic>}) {
           final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
           #t175.{core::Set::add}{Invariant}(#t178){(core::int) → core::bool};
         }
@@ -675,7 +675,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t180 = z;
       if(!(#t180 == null))
-        for (final dynamic #t181 in #t180{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t181 in #t180{core::Iterable<dynamic>}) {
           final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
           #t179.{core::Set::add}{Invariant}(#t182){(core::int) → core::bool};
         }
@@ -685,7 +685,7 @@
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t184 = w;
       if(!(#t184 == null))
-        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t183, block {
@@ -693,7 +693,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t187 = x;
       if(!(#t187 == null))
-        for (final dynamic #t188 in #t187{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t188 in #t187{core::Iterable<dynamic>}) {
           final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
           #t186.{core::Set::add}{Invariant}(#t189){(core::int) → core::bool};
         }
@@ -703,7 +703,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t191 = y;
       if(!(#t191 == null))
-        for (final dynamic #t192 in #t191{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t192 in #t191{core::Iterable<dynamic>}) {
           final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
           #t190.{core::Set::add}{Invariant}(#t193){(core::int) → core::bool};
         }
@@ -713,7 +713,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t195 = z;
       if(!(#t195 == null))
-        for (final dynamic #t196 in #t195{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t196 in #t195{core::Iterable<dynamic>}) {
           final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
           #t194.{core::Set::add}{Invariant}(#t197){(core::int) → core::bool};
         }
@@ -723,7 +723,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t199 = w;
       if(!(#t199 == null))
-        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t198];
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.modular.expect
index e415041..6f1a9c7 100644
--- a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.modular.expect
@@ -171,7 +171,7 @@
 static method foo(core::bool condition, core::Iterable<dynamic> iterable, core::List<core::int>? a, core::Set<core::int>? b, core::Iterable<core::int>? c, core::Map<core::int, core::int>? d) → dynamic {
   return <core::Object>[ block {
     final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...a}, // Error.
         ^") {
       final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
@@ -179,7 +179,7 @@
     }
   } =>#t1, block {
     final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...b}, // Error.
         ^") {
       final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
@@ -187,7 +187,7 @@
     }
   } =>#t4, block {
     final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...c}, // Error.
         ^") {
       final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
@@ -207,7 +207,7 @@
   } =>#t10, block {
     final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...a}, // Error.
                        ^") {
         final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
@@ -216,7 +216,7 @@
   } =>#t11, block {
     final core::Set<core::int> #t14 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...b}, // Error.
                        ^") {
         final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
@@ -225,7 +225,7 @@
   } =>#t14, block {
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...c}, // Error.
                        ^") {
         final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
@@ -240,7 +240,7 @@
   } =>#t20, block {
     final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...a}, // Error.
                                     ^") {
         final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
@@ -249,7 +249,7 @@
   } =>#t21, block {
     final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...b}, // Error.
                                     ^") {
         final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
@@ -258,7 +258,7 @@
   } =>#t24, block {
     final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...c}, // Error.
                                     ^") {
         final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
@@ -273,7 +273,7 @@
   } =>#t30, block {
     final core::Set<core::int> #t31 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...a}, // Error.
                                      ^") {
         final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
@@ -282,7 +282,7 @@
   } =>#t31, block {
     final core::Set<core::int> #t34 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...b}, // Error.
                                      ^") {
         final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
@@ -291,7 +291,7 @@
   } =>#t34, block {
     final core::Set<core::int> #t37 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...c}, // Error.
                                      ^") {
         final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
@@ -307,7 +307,7 @@
     final core::Set<core::int> #t41 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t42 = a;
     if(!(#t42 == null))
-      for (final dynamic #t43 in #t42{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t43 in #t42{core::Iterable<dynamic>}) {
         final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
         #t41.{core::Set::add}{Invariant}(#t44){(core::int) → core::bool};
       }
@@ -315,7 +315,7 @@
     final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t46 = b;
     if(!(#t46 == null))
-      for (final dynamic #t47 in #t46{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t47 in #t46{core::Iterable<dynamic>}) {
         final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
         #t45.{core::Set::add}{Invariant}(#t48){(core::int) → core::bool};
       }
@@ -323,7 +323,7 @@
     final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t50 = c;
     if(!(#t50 == null))
-      for (final dynamic #t51 in #t50{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t51 in #t50{core::Iterable<dynamic>}) {
         final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
         #t49.{core::Set::add}{Invariant}(#t52){(core::int) → core::bool};
       }
@@ -331,14 +331,14 @@
     final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t54 = d;
     if(!(#t54 == null))
-      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t53, block {
     final core::Set<core::int> #t56 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t57 = a;
       if(!(#t57 == null))
-        for (final dynamic #t58 in #t57{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t58 in #t57{core::Iterable<dynamic>}) {
           final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
           #t56.{core::Set::add}{Invariant}(#t59){(core::int) → core::bool};
         }
@@ -348,7 +348,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t61 = b;
       if(!(#t61 == null))
-        for (final dynamic #t62 in #t61{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t62 in #t61{core::Iterable<dynamic>}) {
           final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
           #t60.{core::Set::add}{Invariant}(#t63){(core::int) → core::bool};
         }
@@ -358,7 +358,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t65 = c;
       if(!(#t65 == null))
-        for (final dynamic #t66 in #t65{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t66 in #t65{core::Iterable<dynamic>}) {
           final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
           #t64.{core::Set::add}{Invariant}(#t67){(core::int) → core::bool};
         }
@@ -368,7 +368,7 @@
     if(condition) {
       final core::Map<core::int, core::int>? #t69 = d;
       if(!(#t69 == null))
-        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t68, block {
@@ -376,7 +376,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t72 = a;
       if(!(#t72 == null))
-        for (final dynamic #t73 in #t72{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t73 in #t72{core::Iterable<dynamic>}) {
           final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
           #t71.{core::Set::add}{Invariant}(#t74){(core::int) → core::bool};
         }
@@ -386,7 +386,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t76 = b;
       if(!(#t76 == null))
-        for (final dynamic #t77 in #t76{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t77 in #t76{core::Iterable<dynamic>}) {
           final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
           #t75.{core::Set::add}{Invariant}(#t78){(core::int) → core::bool};
         }
@@ -396,7 +396,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t80 = c;
       if(!(#t80 == null))
-        for (final dynamic #t81 in #t80{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t81 in #t80{core::Iterable<dynamic>}) {
           final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
           #t79.{core::Set::add}{Invariant}(#t82){(core::int) → core::bool};
         }
@@ -406,7 +406,7 @@
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t84 = d;
       if(!(#t84 == null))
-        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t83, block {
@@ -414,7 +414,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t87 = a;
       if(!(#t87 == null))
-        for (final dynamic #t88 in #t87{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t88 in #t87{core::Iterable<dynamic>}) {
           final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
           #t86.{core::Set::add}{Invariant}(#t89){(core::int) → core::bool};
         }
@@ -424,7 +424,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t91 = b;
       if(!(#t91 == null))
-        for (final dynamic #t92 in #t91{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t92 in #t91{core::Iterable<dynamic>}) {
           final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
           #t90.{core::Set::add}{Invariant}(#t93){(core::int) → core::bool};
         }
@@ -434,7 +434,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t95 = c;
       if(!(#t95 == null))
-        for (final dynamic #t96 in #t95{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t96 in #t95{core::Iterable<dynamic>}) {
           final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
           #t94.{core::Set::add}{Invariant}(#t97){(core::int) → core::bool};
         }
@@ -444,7 +444,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t99 = d;
       if(!(#t99 == null))
-        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t98];
@@ -452,7 +452,7 @@
 static method bar<X extends core::List<core::int>?, Y extends core::Set<core::int>?, Z extends core::Iterable<core::int>?, W extends core::Map<core::int, core::int>?>(core::bool condition, core::Iterable<dynamic> iterable, self::bar::X% x, self::bar::Y% y, self::bar::Z% z, self::bar::W% w) → dynamic {
   return <core::Object>[ block {
     final core::Set<core::int> #t101 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...x}, // Error.
         ^") {
       final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
@@ -460,7 +460,7 @@
     }
   } =>#t101, block {
     final core::Set<core::int> #t104 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...y}, // Error.
         ^") {
       final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
@@ -468,7 +468,7 @@
     }
   } =>#t104, block {
     final core::Set<core::int> #t107 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    for (final has-declared-initializer dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {...z}, // Error.
         ^") {
       final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
@@ -486,7 +486,7 @@
   } =>#t110, block {
     final core::Set<core::int> #t111 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...x}, // Error.
                        ^") {
         final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
@@ -495,7 +495,7 @@
   } =>#t111, block {
     final core::Set<core::int> #t114 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...y}, // Error.
                        ^") {
         final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
@@ -504,7 +504,7 @@
   } =>#t114, block {
     final core::Set<core::int> #t117 = col::LinkedHashSet::•<core::int>();
     if(condition)
-      for (final dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {if (condition) ...z}, // Error.
                        ^") {
         final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
@@ -519,7 +519,7 @@
   } =>#t120, block {
     final core::Set<core::int> #t121 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...x}, // Error.
                                     ^") {
         final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
@@ -528,7 +528,7 @@
   } =>#t121, block {
     final core::Set<core::int> #t124 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...y}, // Error.
                                     ^") {
         final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
@@ -537,7 +537,7 @@
   } =>#t124, block {
     final core::Set<core::int> #t127 = col::LinkedHashSet::•<core::int>();
     for (dynamic e in iterable)
-      for (final dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (dynamic e in iterable) ...z}, // Error.
                                     ^") {
         final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
@@ -552,7 +552,7 @@
   } =>#t130, block {
     final core::Set<core::int> #t131 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...x}, // Error.
                                      ^") {
         final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
@@ -561,7 +561,7 @@
   } =>#t131, block {
     final core::Set<core::int> #t134 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...y}, // Error.
                                      ^") {
         final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
@@ -570,7 +570,7 @@
   } =>#t134, block {
     final core::Set<core::int> #t137 = col::LinkedHashSet::•<core::int>();
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
-      for (final dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+      for (final has-declared-initializer dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
     {for (int i = 0; i < 42; ++i) ...z}, // Error.
                                      ^") {
         final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
@@ -586,7 +586,7 @@
     final core::Set<core::int> #t141 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t142 = x;
     if(!(#t142 == null))
-      for (final dynamic #t143 in #t142{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t143 in #t142{core::Iterable<dynamic>}) {
         final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
         #t141.{core::Set::add}{Invariant}(#t144){(core::int) → core::bool};
       }
@@ -594,7 +594,7 @@
     final core::Set<core::int> #t145 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t146 = y;
     if(!(#t146 == null))
-      for (final dynamic #t147 in #t146{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t147 in #t146{core::Iterable<dynamic>}) {
         final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
         #t145.{core::Set::add}{Invariant}(#t148){(core::int) → core::bool};
       }
@@ -602,7 +602,7 @@
     final core::Set<core::int> #t149 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t150 = z;
     if(!(#t150 == null))
-      for (final dynamic #t151 in #t150{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t151 in #t150{core::Iterable<dynamic>}) {
         final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
         #t149.{core::Set::add}{Invariant}(#t152){(core::int) → core::bool};
       }
@@ -610,14 +610,14 @@
     final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t154 = w;
     if(!(#t154 == null))
-      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t153, block {
     final core::Set<core::int> #t156 = col::LinkedHashSet::•<core::int>();
     if(condition) {
       final core::Iterable<dynamic>? #t157 = x;
       if(!(#t157 == null))
-        for (final dynamic #t158 in #t157{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t158 in #t157{core::Iterable<dynamic>}) {
           final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
           #t156.{core::Set::add}{Invariant}(#t159){(core::int) → core::bool};
         }
@@ -627,7 +627,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t161 = y;
       if(!(#t161 == null))
-        for (final dynamic #t162 in #t161{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t162 in #t161{core::Iterable<dynamic>}) {
           final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
           #t160.{core::Set::add}{Invariant}(#t163){(core::int) → core::bool};
         }
@@ -637,7 +637,7 @@
     if(condition) {
       final core::Iterable<dynamic>? #t165 = z;
       if(!(#t165 == null))
-        for (final dynamic #t166 in #t165{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t166 in #t165{core::Iterable<dynamic>}) {
           final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
           #t164.{core::Set::add}{Invariant}(#t167){(core::int) → core::bool};
         }
@@ -647,7 +647,7 @@
     if(condition) {
       final core::Map<core::int, core::int>? #t169 = w;
       if(!(#t169 == null))
-        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t168, block {
@@ -655,7 +655,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t172 = x;
       if(!(#t172 == null))
-        for (final dynamic #t173 in #t172{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t173 in #t172{core::Iterable<dynamic>}) {
           final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
           #t171.{core::Set::add}{Invariant}(#t174){(core::int) → core::bool};
         }
@@ -665,7 +665,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t176 = y;
       if(!(#t176 == null))
-        for (final dynamic #t177 in #t176{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t177 in #t176{core::Iterable<dynamic>}) {
           final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
           #t175.{core::Set::add}{Invariant}(#t178){(core::int) → core::bool};
         }
@@ -675,7 +675,7 @@
     for (dynamic e in iterable) {
       final core::Iterable<dynamic>? #t180 = z;
       if(!(#t180 == null))
-        for (final dynamic #t181 in #t180{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t181 in #t180{core::Iterable<dynamic>}) {
           final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
           #t179.{core::Set::add}{Invariant}(#t182){(core::int) → core::bool};
         }
@@ -685,7 +685,7 @@
     for (dynamic e in iterable) {
       final core::Map<core::int, core::int>? #t184 = w;
       if(!(#t184 == null))
-        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t183, block {
@@ -693,7 +693,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t187 = x;
       if(!(#t187 == null))
-        for (final dynamic #t188 in #t187{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t188 in #t187{core::Iterable<dynamic>}) {
           final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
           #t186.{core::Set::add}{Invariant}(#t189){(core::int) → core::bool};
         }
@@ -703,7 +703,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t191 = y;
       if(!(#t191 == null))
-        for (final dynamic #t192 in #t191{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t192 in #t191{core::Iterable<dynamic>}) {
           final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
           #t190.{core::Set::add}{Invariant}(#t193){(core::int) → core::bool};
         }
@@ -713,7 +713,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Iterable<dynamic>? #t195 = z;
       if(!(#t195 == null))
-        for (final dynamic #t196 in #t195{core::Iterable<dynamic>}) {
+        for (final has-declared-initializer dynamic #t196 in #t195{core::Iterable<dynamic>}) {
           final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
           #t194.{core::Set::add}{Invariant}(#t197){(core::int) → core::bool};
         }
@@ -723,7 +723,7 @@
     for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
       final core::Map<core::int, core::int>? #t199 = w;
       if(!(#t199 == null))
-        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
           #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     }
   } =>#t198];
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.strong.expect
index da9759d..f1379f4 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.strong.expect
@@ -14,7 +14,7 @@
 
 static method foo(core::Object x) → dynamic {}
 static method bar(core::bool condition) → dynamic {
-  FutureOr<core::int?>x = null;
+  has-declared-initializer FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
   self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.strong.transformed.expect
index 125399b..149a539 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.strong.transformed.expect
@@ -14,7 +14,7 @@
 
 static method foo(core::Object x) → dynamic {}
 static method bar(core::bool condition) → dynamic {
-  FutureOr<core::int?>x = null;
+  has-declared-initializer FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
   self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.expect
index da9759d..f1379f4 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.expect
@@ -14,7 +14,7 @@
 
 static method foo(core::Object x) → dynamic {}
 static method bar(core::bool condition) → dynamic {
-  FutureOr<core::int?>x = null;
+  has-declared-initializer FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
   self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.modular.expect
index da9759d..f1379f4 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.modular.expect
@@ -14,7 +14,7 @@
 
 static method foo(core::Object x) → dynamic {}
 static method bar(core::bool condition) → dynamic {
-  FutureOr<core::int?>x = null;
+  has-declared-initializer FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
   self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.transformed.expect
index e256d75..7361376 100644
--- a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
 
 static method foo(core::Object x) → dynamic {}
 static method bar(core::bool condition) → dynamic {
-  FutureOr<core::int?>x = null;
+  has-declared-initializer FutureOr<core::int?>x = null;
   core::num n = 1;
   FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
   self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
diff --git a/pkg/front_end/testcases/nnbd/main_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/main_declaration.dart.weak.outline.expect
index 60101d4..849cfc1 100644
--- a/pkg/front_end/testcases/nnbd/main_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/main_declaration.dart.weak.outline.expect
@@ -87,7 +87,7 @@
 import self as self7;
 import "dart:core" as core;
 
-static method main({core::List<core::String> args}) → void
+static method main({has-declared-initializer core::List<core::String> args}) → void
   ;
 
 library /*isNonNullableByDefault*/;
@@ -143,7 +143,7 @@
 import self as self13;
 import "dart:core" as core;
 
-static method main([core::List<core::String> args, dynamic other]) → void
+static method main([has-declared-initializer core::List<core::String> args, dynamic other]) → void
   ;
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
index 62d3a21..a2ff9df 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.expect
@@ -14,7 +14,7 @@
 static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
-  self::A? a = null;
+  has-declared-initializer self::A? a = null;
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
index 62d3a21..a2ff9df 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.strong.transformed.expect
@@ -14,7 +14,7 @@
 static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
-  self::A? a = null;
+  has-declared-initializer self::A? a = null;
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
index 62d3a21..a2ff9df 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.expect
@@ -14,7 +14,7 @@
 static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
-  self::A? a = null;
+  has-declared-initializer self::A? a = null;
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.modular.expect
index 62d3a21..a2ff9df 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.modular.expect
@@ -14,7 +14,7 @@
 static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
-  self::A? a = null;
+  has-declared-initializer self::A? a = null;
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
index 62d3a21..a2ff9df 100644
--- a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
 static method _extension#0|get#text(lowered final self::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
-  self::A? a = null;
+  has-declared-initializer self::A? a = null;
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.expect
index 1d7f270..410a22e 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.expect
@@ -15,7 +15,7 @@
   foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
-static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
+static method test_nullable_function_type_formal_param({has-declared-initializer () →? core::int f = #C1}) → core::int {
   return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.transformed.expect
index 492b1de..65dbc41 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
-static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
+static method test_nullable_function_type_formal_param({has-declared-initializer () →? core::int f = #C1}) → core::int {
   return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.expect
index 1d7f270..410a22e 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.expect
@@ -15,7 +15,7 @@
   foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
-static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
+static method test_nullable_function_type_formal_param({has-declared-initializer () →? core::int f = #C1}) → core::int {
   return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.modular.expect
index 1d7f270..410a22e 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.modular.expect
@@ -15,7 +15,7 @@
   foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
-static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
+static method test_nullable_function_type_formal_param({has-declared-initializer () →? core::int f = #C1}) → core::int {
   return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.outline.expect
index 24ecf42f..16bc26f 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.outline.expect
@@ -11,5 +11,5 @@
 }
 static method main() → dynamic
   ;
-static method test_nullable_function_type_formal_param({() →? core::int f}) → core::int
+static method test_nullable_function_type_formal_param({has-declared-initializer () →? core::int f}) → core::int
   ;
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.transformed.expect
index 492b1de..65dbc41 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   foo.{self::Foo::bar}(6){(core::int?) → core::int?};
   self::test_nullable_function_type_formal_param(f: () → core::int => 2);
 }
-static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
+static method test_nullable_function_type_formal_param({has-declared-initializer () →? core::int f = #C1}) → core::int {
   return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
 }
 
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 c961e36..91153eb 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
@@ -36,7 +36,7 @@
     ;
 }
 static field ({a: core::int, required b: core::int}) → dynamic field;
-static method method({core::int a, required core::int b, required final core::int c}) → dynamic
+static method method({has-declared-initializer core::int a, required core::int b, required final core::int c}) → dynamic
   ;
 static method ok() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.outline.expect
index 4e786d8..09d1a97 100644
--- a/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.outline.expect
@@ -19,7 +19,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo({required core::int parameter}) → dynamic
+static method foo({required has-declared-initializer core::int parameter}) → dynamic
   ;
 static method foo2({core::int parameter}) → dynamic
   ;
@@ -27,9 +27,9 @@
   ;
 static method bar({required core::int parameter}) → dynamic
   ;
-static method bar2({core::int parameter}) → dynamic
+static method bar2({has-declared-initializer core::int parameter}) → dynamic
   ;
-static method bar3([core::int parameter]) → dynamic
+static method bar3([has-declared-initializer core::int parameter]) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.expect
index 14bef22c5..1f35633 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.expect
@@ -4,7 +4,7 @@
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  core::List<core::int>? list = null;
+  has-declared-initializer core::List<core::int>? list = null;
   core::print( block {
     final core::List<core::int> #t1 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t2 = list;
@@ -14,7 +14,7 @@
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = <core::int>[1, 2];
-    final core::Iterable<core::int>? #t4 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t4 = null;
     if(!(#t4 == null))
       #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t3.{core::List::add}{Invariant}(3){(core::int) → void};
@@ -27,7 +27,7 @@
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = <Never>[];
-    final core::Iterable<Never>? #t8 = null;
+    final has-declared-initializer core::Iterable<Never>? #t8 = null;
     if(!(#t8 == null))
       #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
@@ -40,12 +40,12 @@
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = <core::int>[1, 2];
-    final core::Iterable<core::int>? #t12 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t12 = null;
     if(!(#t12 == null))
       #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t11.{core::List::add}{Invariant}(3){(core::int) → void};
   } =>#t11;
-  core::Set<core::int>? set = null;
+  has-declared-initializer core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
     #t13.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
@@ -59,7 +59,7 @@
     final core::Set<core::int> #t15 = col::LinkedHashSet::•<core::int>();
     #t15.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t15.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t16 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t16 = null;
     if(!(#t16 == null))
       #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t15.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
@@ -68,7 +68,7 @@
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t18 = set;
     if(!(#t18 == null))
-      for (final dynamic #t19 in #t18{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t19 in #t18{core::Iterable<dynamic>}) {
         final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
         #t17.{core::Set::add}{Invariant}(#t20){(core::int) → core::bool};
       }
@@ -86,19 +86,19 @@
     final core::Set<core::int> #t23 = col::LinkedHashSet::•<core::int>();
     #t23.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t23.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t24 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t24 = null;
     if(!(#t24 == null))
       #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t23.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
   } =>#t23;
-  core::Map<core::int, core::int>? map = null;
+  has-declared-initializer core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
     #t25.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t25.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t26 = map;
     if(!(#t26 == null))
-      for (final core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t25.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t25);
@@ -106,9 +106,9 @@
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
     #t28.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t28.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t29 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t29 = null;
     if(!(#t29 == null))
-      for (final core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t28.{core::Map::[]=}{Invariant}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t28.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t28);
@@ -116,7 +116,7 @@
     final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t32 = map;
     if(!(#t32 == null))
-      for (final core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t31.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t31;
   core::Map<core::int, core::int> map3 = block {
@@ -125,7 +125,7 @@
     #t34.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t35 = map;
     if(!(#t35 == null))
-      for (final core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t34.{core::Map::[]=}{Invariant}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t34.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t34;
@@ -133,9 +133,9 @@
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
     #t37.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t37.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t38 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t38 = null;
     if(!(#t38 == null))
-      for (final core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t37.{core::Map::[]=}{Invariant}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t37.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t37;
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.transformed.expect
index 2cc24c5..5717697 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  core::List<core::int>? list = null;
+  has-declared-initializer core::List<core::int>? list = null;
   core::print( block {
     final core::List<core::int> #t1 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t2 = list;
@@ -14,7 +14,7 @@
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = core::_GrowableList::_literal2<core::int>(1, 2);
-    final core::Iterable<core::int>? #t4 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t4 = null;
     if(!(#t4 == null))
       #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t3.{core::List::add}{Invariant}(3){(core::int) → void};
@@ -27,7 +27,7 @@
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = core::_GrowableList::•<Never>(0);
-    final core::Iterable<Never>? #t8 = null;
+    final has-declared-initializer core::Iterable<Never>? #t8 = null;
     if(!(#t8 == null))
       #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
@@ -40,12 +40,12 @@
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = core::_GrowableList::_literal2<core::int>(1, 2);
-    final core::Iterable<core::int>? #t12 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t12 = null;
     if(!(#t12 == null))
       #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t11.{core::List::add}{Invariant}(3){(core::int) → void};
   } =>#t11;
-  core::Set<core::int>? set = null;
+  has-declared-initializer core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = new col::_CompactLinkedHashSet::•<core::int>();
     #t13.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
@@ -59,7 +59,7 @@
     final core::Set<core::int> #t15 = new col::_CompactLinkedHashSet::•<core::int>();
     #t15.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t15.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t16 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t16 = null;
     if(!(#t16 == null))
       #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t15.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
@@ -91,12 +91,12 @@
     final core::Set<core::int> #t23 = new col::_CompactLinkedHashSet::•<core::int>();
     #t23.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t23.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t24 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t24 = null;
     if(!(#t24 == null))
       #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t23.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
   } =>#t23;
-  core::Map<core::int, core::int>? map = null;
+  has-declared-initializer core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
     #t25.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
@@ -115,7 +115,7 @@
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
     #t28.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t28.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t29 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t29 = null;
     if(!(#t29 == null)) {
       core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -154,7 +154,7 @@
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
     #t37.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t37.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t38 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t38 = null;
     if(!(#t38 == null)) {
       core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.expect
index 14bef22c5..1f35633 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.expect
@@ -4,7 +4,7 @@
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  core::List<core::int>? list = null;
+  has-declared-initializer core::List<core::int>? list = null;
   core::print( block {
     final core::List<core::int> #t1 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t2 = list;
@@ -14,7 +14,7 @@
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = <core::int>[1, 2];
-    final core::Iterable<core::int>? #t4 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t4 = null;
     if(!(#t4 == null))
       #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t3.{core::List::add}{Invariant}(3){(core::int) → void};
@@ -27,7 +27,7 @@
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = <Never>[];
-    final core::Iterable<Never>? #t8 = null;
+    final has-declared-initializer core::Iterable<Never>? #t8 = null;
     if(!(#t8 == null))
       #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
@@ -40,12 +40,12 @@
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = <core::int>[1, 2];
-    final core::Iterable<core::int>? #t12 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t12 = null;
     if(!(#t12 == null))
       #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t11.{core::List::add}{Invariant}(3){(core::int) → void};
   } =>#t11;
-  core::Set<core::int>? set = null;
+  has-declared-initializer core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
     #t13.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
@@ -59,7 +59,7 @@
     final core::Set<core::int> #t15 = col::LinkedHashSet::•<core::int>();
     #t15.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t15.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t16 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t16 = null;
     if(!(#t16 == null))
       #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t15.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
@@ -68,7 +68,7 @@
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t18 = set;
     if(!(#t18 == null))
-      for (final dynamic #t19 in #t18{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t19 in #t18{core::Iterable<dynamic>}) {
         final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
         #t17.{core::Set::add}{Invariant}(#t20){(core::int) → core::bool};
       }
@@ -86,19 +86,19 @@
     final core::Set<core::int> #t23 = col::LinkedHashSet::•<core::int>();
     #t23.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t23.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t24 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t24 = null;
     if(!(#t24 == null))
       #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t23.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
   } =>#t23;
-  core::Map<core::int, core::int>? map = null;
+  has-declared-initializer core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
     #t25.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t25.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t26 = map;
     if(!(#t26 == null))
-      for (final core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t25.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t25);
@@ -106,9 +106,9 @@
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
     #t28.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t28.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t29 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t29 = null;
     if(!(#t29 == null))
-      for (final core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t28.{core::Map::[]=}{Invariant}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t28.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t28);
@@ -116,7 +116,7 @@
     final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t32 = map;
     if(!(#t32 == null))
-      for (final core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t31.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t31;
   core::Map<core::int, core::int> map3 = block {
@@ -125,7 +125,7 @@
     #t34.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t35 = map;
     if(!(#t35 == null))
-      for (final core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t34.{core::Map::[]=}{Invariant}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t34.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t34;
@@ -133,9 +133,9 @@
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
     #t37.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t37.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t38 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t38 = null;
     if(!(#t38 == null))
-      for (final core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t37.{core::Map::[]=}{Invariant}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t37.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t37;
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.modular.expect
index 14bef22c5..1f35633 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  core::List<core::int>? list = null;
+  has-declared-initializer core::List<core::int>? list = null;
   core::print( block {
     final core::List<core::int> #t1 = <core::int>[1, 2];
     final core::Iterable<core::int>? #t2 = list;
@@ -14,7 +14,7 @@
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = <core::int>[1, 2];
-    final core::Iterable<core::int>? #t4 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t4 = null;
     if(!(#t4 == null))
       #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t3.{core::List::add}{Invariant}(3){(core::int) → void};
@@ -27,7 +27,7 @@
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = <Never>[];
-    final core::Iterable<Never>? #t8 = null;
+    final has-declared-initializer core::Iterable<Never>? #t8 = null;
     if(!(#t8 == null))
       #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
@@ -40,12 +40,12 @@
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = <core::int>[1, 2];
-    final core::Iterable<core::int>? #t12 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t12 = null;
     if(!(#t12 == null))
       #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t11.{core::List::add}{Invariant}(3){(core::int) → void};
   } =>#t11;
-  core::Set<core::int>? set = null;
+  has-declared-initializer core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
     #t13.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
@@ -59,7 +59,7 @@
     final core::Set<core::int> #t15 = col::LinkedHashSet::•<core::int>();
     #t15.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t15.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t16 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t16 = null;
     if(!(#t16 == null))
       #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t15.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
@@ -68,7 +68,7 @@
     final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t18 = set;
     if(!(#t18 == null))
-      for (final dynamic #t19 in #t18{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t19 in #t18{core::Iterable<dynamic>}) {
         final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
         #t17.{core::Set::add}{Invariant}(#t20){(core::int) → core::bool};
       }
@@ -86,19 +86,19 @@
     final core::Set<core::int> #t23 = col::LinkedHashSet::•<core::int>();
     #t23.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t23.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t24 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t24 = null;
     if(!(#t24 == null))
       #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t23.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
   } =>#t23;
-  core::Map<core::int, core::int>? map = null;
+  has-declared-initializer core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
     #t25.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t25.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t26 = map;
     if(!(#t26 == null))
-      for (final core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t25.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t25);
@@ -106,9 +106,9 @@
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
     #t28.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t28.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t29 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t29 = null;
     if(!(#t29 == null))
-      for (final core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t28.{core::Map::[]=}{Invariant}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t28.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t28);
@@ -116,7 +116,7 @@
     final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
     final core::Map<core::int, core::int>? #t32 = map;
     if(!(#t32 == null))
-      for (final core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t31.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t31;
   core::Map<core::int, core::int> map3 = block {
@@ -125,7 +125,7 @@
     #t34.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
     final core::Map<core::int, core::int>? #t35 = map;
     if(!(#t35 == null))
-      for (final core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t34.{core::Map::[]=}{Invariant}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t34.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t34;
@@ -133,9 +133,9 @@
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
     #t37.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t37.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t38 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t38 = null;
     if(!(#t38 == null))
-      for (final core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
         #t37.{core::Map::[]=}{Invariant}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
     #t37.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
   } =>#t37;
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.transformed.expect
index 2cc24c5..5717697 100644
--- a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  core::List<core::int>? list = null;
+  has-declared-initializer core::List<core::int>? list = null;
   core::print( block {
     final core::List<core::int> #t1 = core::_GrowableList::_literal2<core::int>(1, 2);
     final core::Iterable<core::int>? #t2 = list;
@@ -14,7 +14,7 @@
   } =>#t1);
   core::print( block {
     final core::List<core::int> #t3 = core::_GrowableList::_literal2<core::int>(1, 2);
-    final core::Iterable<core::int>? #t4 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t4 = null;
     if(!(#t4 == null))
       #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t3.{core::List::add}{Invariant}(3){(core::int) → void};
@@ -27,7 +27,7 @@
   } =>#t5;
   core::List<Never> list2 = block {
     final core::List<Never> #t7 = core::_GrowableList::•<Never>(0);
-    final core::Iterable<Never>? #t8 = null;
+    final has-declared-initializer core::Iterable<Never>? #t8 = null;
     if(!(#t8 == null))
       #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
   } =>#t7;
@@ -40,12 +40,12 @@
   } =>#t9;
   core::List<core::int> list4 = block {
     final core::List<core::int> #t11 = core::_GrowableList::_literal2<core::int>(1, 2);
-    final core::Iterable<core::int>? #t12 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t12 = null;
     if(!(#t12 == null))
       #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t11.{core::List::add}{Invariant}(3){(core::int) → void};
   } =>#t11;
-  core::Set<core::int>? set = null;
+  has-declared-initializer core::Set<core::int>? set = null;
   core::print( block {
     final core::Set<core::int> #t13 = new col::_CompactLinkedHashSet::•<core::int>();
     #t13.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
@@ -59,7 +59,7 @@
     final core::Set<core::int> #t15 = new col::_CompactLinkedHashSet::•<core::int>();
     #t15.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t15.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t16 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t16 = null;
     if(!(#t16 == null))
       #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t15.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
@@ -91,12 +91,12 @@
     final core::Set<core::int> #t23 = new col::_CompactLinkedHashSet::•<core::int>();
     #t23.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
     #t23.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
-    final core::Iterable<core::int>? #t24 = null;
+    final has-declared-initializer core::Iterable<core::int>? #t24 = null;
     if(!(#t24 == null))
       #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
     #t23.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
   } =>#t23;
-  core::Map<core::int, core::int>? map = null;
+  has-declared-initializer core::Map<core::int, core::int>? map = null;
   core::print( block {
     final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
     #t25.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
@@ -115,7 +115,7 @@
     final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
     #t28.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t28.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t29 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t29 = null;
     if(!(#t29 == null)) {
       core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -154,7 +154,7 @@
     final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
     #t37.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     #t37.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
-    final core::Map<core::int, core::int>? #t38 = null;
+    final has-declared-initializer core::Map<core::int, core::int>? #t38 = null;
     if(!(#t38 == null)) {
       core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
index c211559..4218a6a 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.strong.expect
@@ -147,7 +147,7 @@
     final core::Set<core::String> #t7 = col::LinkedHashSet::•<core::String>();
     final core::Iterable<dynamic>? #t8 = l;
     if(!(#t8 == null))
-      for (final dynamic #t9 in #t8{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t9 in #t8{core::Iterable<dynamic>}) {
         final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
         #t7.{core::Set::add}{Invariant}(#t10){(core::String) → core::bool};
       }
@@ -162,14 +162,14 @@
     final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t14 = m;
     if(!(#t14 == null))
-      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
         #t13.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t13;
   block {
     final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t17 = m;
     if(!(#t17 == null))
-      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
         #t16.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t16;
   s!;
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
index c211559..4218a6a 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.expect
@@ -147,7 +147,7 @@
     final core::Set<core::String> #t7 = col::LinkedHashSet::•<core::String>();
     final core::Iterable<dynamic>? #t8 = l;
     if(!(#t8 == null))
-      for (final dynamic #t9 in #t8{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t9 in #t8{core::Iterable<dynamic>}) {
         final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
         #t7.{core::Set::add}{Invariant}(#t10){(core::String) → core::bool};
       }
@@ -162,14 +162,14 @@
     final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t14 = m;
     if(!(#t14 == null))
-      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
         #t13.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t13;
   block {
     final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t17 = m;
     if(!(#t17 == null))
-      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
         #t16.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t16;
   s!;
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.modular.expect
index c211559..4218a6a 100644
--- a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.modular.expect
@@ -147,7 +147,7 @@
     final core::Set<core::String> #t7 = col::LinkedHashSet::•<core::String>();
     final core::Iterable<dynamic>? #t8 = l;
     if(!(#t8 == null))
-      for (final dynamic #t9 in #t8{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t9 in #t8{core::Iterable<dynamic>}) {
         final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
         #t7.{core::Set::add}{Invariant}(#t10){(core::String) → core::bool};
       }
@@ -162,14 +162,14 @@
     final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t14 = m;
     if(!(#t14 == null))
-      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
         #t13.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t13;
   block {
     final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
     final core::Map<core::String, core::int>? #t17 = m;
     if(!(#t17 == null))
-      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      for (final has-declared-initializer core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
         #t16.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
   } =>#t16;
   s!;
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
index 3a15eee..e73b967 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.expect
@@ -82,8 +82,8 @@
   core::Type* typeNever = #C1;
   self::genericMethod<Never*>();
   new self::GenericClass::•<Never*>();
-  Never* localNever = null;
-  Null localNull = null;
+  has-declared-initializer Never* localNever = null;
+  has-declared-initializer Null localNull = null;
   dynamic inferredLocalNever = nev::optInNever;
   localNever = localNever;
   self::optOutNever = localNever;
@@ -132,7 +132,7 @@
     dynamic boundedGenericMethodResult1 = nev::boundedGenericMethod1<Null>();
   });
   core::List<Null>* boundedGenericMethodResult2 = nev::boundedGenericMethod2<Null>();
-  dynamic dyn = null;
+  has-declared-initializer dynamic dyn = null;
   nev::optInNever = dyn as{TypeError,ForDynamic} Never;
 }
 static method throws(() →* void f) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.modular.expect
index 3a15eee..e73b967 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.modular.expect
@@ -82,8 +82,8 @@
   core::Type* typeNever = #C1;
   self::genericMethod<Never*>();
   new self::GenericClass::•<Never*>();
-  Never* localNever = null;
-  Null localNull = null;
+  has-declared-initializer Never* localNever = null;
+  has-declared-initializer Null localNull = null;
   dynamic inferredLocalNever = nev::optInNever;
   localNever = localNever;
   self::optOutNever = localNever;
@@ -132,7 +132,7 @@
     dynamic boundedGenericMethodResult1 = nev::boundedGenericMethod1<Null>();
   });
   core::List<Null>* boundedGenericMethodResult2 = nev::boundedGenericMethod2<Null>();
-  dynamic dyn = null;
+  has-declared-initializer dynamic dyn = null;
   nev::optInNever = dyn as{TypeError,ForDynamic} Never;
 }
 static method throws(() →* void f) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
index bf7f391..963cab4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.transformed.expect
@@ -82,8 +82,8 @@
   core::Type* typeNever = #C1;
   self::genericMethod<Never*>();
   new self::GenericClass::•<Never*>();
-  Never* localNever = null;
-  Null localNull = null;
+  has-declared-initializer Never* localNever = null;
+  has-declared-initializer Null localNull = null;
   dynamic inferredLocalNever = nev::optInNever;
   localNever = localNever;
   self::optOutNever = localNever;
@@ -132,7 +132,7 @@
     dynamic boundedGenericMethodResult1 = nev::boundedGenericMethod1<Null>();
   });
   core::List<Null>* boundedGenericMethodResult2 = nev::boundedGenericMethod2<Null>();
-  dynamic dyn = null;
+  has-declared-initializer dynamic dyn = null;
   nev::optInNever = dyn as{TypeError,ForDynamic} Never;
 }
 static method throws(() →* void f) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
index f4ebaa4..b0dc0b4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.expect
@@ -11,7 +11,7 @@
 static method _extension#0|get#text(lowered final nul::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
-  nul::A? a = null;
+  has-declared-initializer nul::A? a = null;
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.modular.expect
index f4ebaa4..b0dc0b4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.modular.expect
@@ -11,7 +11,7 @@
 static method _extension#0|get#text(lowered final nul::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
-  nul::A? a = null;
+  has-declared-initializer nul::A? a = null;
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
index f4ebaa4..b0dc0b4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 static method _extension#0|get#text(lowered final nul::A? #this) → core::String
   return "Lily was here";
 static method main() → void {
-  nul::A? a = null;
+  has-declared-initializer nul::A? a = null;
   self::expect("Lily was here", self::_extension#0|get#text(a));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
index 6e0d3ce..f0e3bf9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.expect
@@ -31,7 +31,7 @@
 static method main() → dynamic {}
 static method noErrors() → dynamic {
   late core::int local = 42;
-  core::String? s = null;
+  has-declared-initializer core::String? s = null;
   dynamic c;
   let final dynamic #t1 = c in #t1 == null ?{dynamic} null : block {
     #t1{dynamic}.f;
@@ -165,8 +165,8 @@
 static method method(() →* void f, {core::int* a = #C1}) → void {}
 static method errors() → dynamic {
   core::int* local = 42;
-  core::List<core::String?>* l = null;
-  core::String? s = null;
+  has-declared-initializer core::List<core::String?>* l = null;
+  has-declared-initializer core::String? s = null;
   core::String* t = s!;
   dynamic c;
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
diff --git a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.modular.expect
index 6e0d3ce..f0e3bf9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.modular.expect
@@ -31,7 +31,7 @@
 static method main() → dynamic {}
 static method noErrors() → dynamic {
   late core::int local = 42;
-  core::String? s = null;
+  has-declared-initializer core::String? s = null;
   dynamic c;
   let final dynamic #t1 = c in #t1 == null ?{dynamic} null : block {
     #t1{dynamic}.f;
@@ -165,8 +165,8 @@
 static method method(() →* void f, {core::int* a = #C1}) → void {}
 static method errors() → dynamic {
   core::int* local = 42;
-  core::List<core::String?>* l = null;
-  core::String? s = null;
+  has-declared-initializer core::List<core::String?>* l = null;
+  has-declared-initializer core::String? s = null;
   core::String* t = s!;
   dynamic c;
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
diff --git a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
index 37d3838..bcdf3bd 100644
--- a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
 static method main() → dynamic {}
 static method noErrors() → dynamic {
   late core::int local = 42;
-  core::String? s = null;
+  has-declared-initializer core::String? s = null;
   dynamic c;
   let final dynamic #t1 = c in #t1 == null ?{dynamic} null : block {
     #t1{dynamic}.f;
@@ -165,8 +165,8 @@
 static method method(() →* void f, {core::int* a = #C1}) → void {}
 static method errors() → dynamic {
   core::int* local = 42;
-  core::List<core::String?>* l = null;
-  core::String? s = null;
+  has-declared-initializer core::List<core::String?>* l = null;
+  has-declared-initializer core::String? s = null;
   core::String* t = s!;
   dynamic c;
   invalid-expression "pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
index 782f6eb..a99d670 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
@@ -28,15 +28,15 @@
   ;
 static method main() → dynamic
   ;
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start, core::int? end]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [has-declared-initializer core::int start, core::int? end]) → core::String
   return core::String::fromCharCodes(charCodes, start, end);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
   return core::String::fromCharCode(charCode);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {has-declared-initializer core::String defaultValue}) → core::String
   return core::String::fromEnvironment(name, defaultValue: defaultValue);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start, core::int? end]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [has-declared-initializer core::int start, core::int? end]) → core::String
   return core::String::fromCharCodes(charCodes, start, end);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
   return core::String::fromCharCode(charCode);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {has-declared-initializer core::String defaultValue}) → core::String
   return core::String::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.expect
index 7169aca..6fb74dd 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.expect
@@ -25,14 +25,14 @@
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
                                          ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*>;
-  FutureOr<() →? opt::A*>foLegacyNullable = null;
+  has-declared-initializer FutureOr<() →? opt::A*>foLegacyNullable = null;
   FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
                                               ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<opt::A>;
-  FutureOr<opt::A?>foNullable = null;
-  FutureOr<opt::A?>foNonNullableNullable = null;
-  FutureOr<opt::A?>foNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNonNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullableNullable = null;
 }
 static method main() → dynamic {}
 
@@ -67,7 +67,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  FutureOr<() →* opt::A*>* foLegacy = null;
-  FutureOr<opt::A*>* foNonNullable = null;
-  FutureOr<opt::A*>* foNullable = null;
+  has-declared-initializer FutureOr<() →* opt::A*>* foLegacy = null;
+  has-declared-initializer FutureOr<opt::A*>* foNonNullable = null;
+  has-declared-initializer FutureOr<opt::A*>* foNullable = null;
 }
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.transformed.expect
index 33d8eb0..77e5124 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.strong.transformed.expect
@@ -25,14 +25,14 @@
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
                                          ^" in let Null #t1 = null in #t1 == null ?{FutureOr<() → opt::A*>} #t1 as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*> : #t1{FutureOr<() → opt::A*>};
-  FutureOr<() →? opt::A*>foLegacyNullable = null;
+  has-declared-initializer FutureOr<() →? opt::A*>foLegacyNullable = null;
   FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
                                               ^" in let Null #t2 = null in #t2 == null ?{FutureOr<opt::A>} #t2 as{TypeError,ForNonNullableByDefault} FutureOr<opt::A> : #t2{FutureOr<opt::A>};
-  FutureOr<opt::A?>foNullable = null;
-  FutureOr<opt::A?>foNonNullableNullable = null;
-  FutureOr<opt::A?>foNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNonNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullableNullable = null;
 }
 static method main() → dynamic {}
 
@@ -67,7 +67,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  FutureOr<() →* opt::A*>* foLegacy = null;
-  FutureOr<opt::A*>* foNonNullable = null;
-  FutureOr<opt::A*>* foNullable = null;
+  has-declared-initializer FutureOr<() →* opt::A*>* foLegacy = null;
+  has-declared-initializer FutureOr<opt::A*>* foNonNullable = null;
+  has-declared-initializer FutureOr<opt::A*>* foNullable = null;
 }
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.expect
index 1527b5e..9e3622b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.expect
@@ -25,14 +25,14 @@
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
                                          ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*>;
-  FutureOr<() →? opt::A*>foLegacyNullable = null;
+  has-declared-initializer FutureOr<() →? opt::A*>foLegacyNullable = null;
   FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
                                               ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<opt::A>;
-  FutureOr<opt::A?>foNullable = null;
-  FutureOr<opt::A?>foNonNullableNullable = null;
-  FutureOr<opt::A?>foNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNonNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullableNullable = null;
 }
 static method main() → dynamic {}
 
@@ -60,7 +60,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  FutureOr<() →* opt::A*>* foLegacy = null;
-  FutureOr<opt::A*>* foNonNullable = null;
-  FutureOr<opt::A*>* foNullable = null;
+  has-declared-initializer FutureOr<() →* opt::A*>* foLegacy = null;
+  has-declared-initializer FutureOr<opt::A*>* foNonNullable = null;
+  has-declared-initializer FutureOr<opt::A*>* foNullable = null;
 }
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.modular.expect
index 1527b5e..9e3622b 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.modular.expect
@@ -25,14 +25,14 @@
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
                                          ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*>;
-  FutureOr<() →? opt::A*>foLegacyNullable = null;
+  has-declared-initializer FutureOr<() →? opt::A*>foLegacyNullable = null;
   FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
                                               ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<opt::A>;
-  FutureOr<opt::A?>foNullable = null;
-  FutureOr<opt::A?>foNonNullableNullable = null;
-  FutureOr<opt::A?>foNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNonNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullableNullable = null;
 }
 static method main() → dynamic {}
 
@@ -60,7 +60,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  FutureOr<() →* opt::A*>* foLegacy = null;
-  FutureOr<opt::A*>* foNonNullable = null;
-  FutureOr<opt::A*>* foNullable = null;
+  has-declared-initializer FutureOr<() →* opt::A*>* foLegacy = null;
+  has-declared-initializer FutureOr<opt::A*>* foNonNullable = null;
+  has-declared-initializer FutureOr<opt::A*>* foNullable = null;
 }
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.transformed.expect
index 09de8be..2e7c73c 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.transformed.expect
@@ -25,14 +25,14 @@
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAlias> foLegacyNonNullable = null; // error
                                          ^" in null;
-  FutureOr<() →? opt::A*>foLegacyNullable = null;
+  has-declared-initializer FutureOr<() →? opt::A*>foLegacyNullable = null;
   FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
   FutureOr<AAliasNonNullable> foNonNullable = null; // error
                                               ^" in null;
-  FutureOr<opt::A?>foNullable = null;
-  FutureOr<opt::A?>foNonNullableNullable = null;
-  FutureOr<opt::A?>foNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNonNullableNullable = null;
+  has-declared-initializer FutureOr<opt::A?>foNullableNullable = null;
 }
 static method main() → dynamic {}
 
@@ -60,7 +60,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  FutureOr<() →* opt::A*>* foLegacy = null;
-  FutureOr<opt::A*>* foNonNullable = null;
-  FutureOr<opt::A*>* foNullable = null;
+  has-declared-initializer FutureOr<() →* opt::A*>* foLegacy = null;
+  has-declared-initializer FutureOr<opt::A*>* foNonNullable = null;
+  has-declared-initializer FutureOr<opt::A*>* foNullable = null;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
index b0dbf3f..90f96dd 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.expect
@@ -97,7 +97,7 @@
 a b(c) = d;
          ^";
 static method main() → dynamic {
-  self::C* c = null;
+  has-declared-initializer self::C* c = null;
   core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect
index b0dbf3f..90f96dd 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect
@@ -97,7 +97,7 @@
 a b(c) = d;
          ^";
 static method main() → dynamic {
-  self::C* c = null;
+  has-declared-initializer self::C* c = null;
   core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
index b406cc3..b9617cd 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.transformed.expect
@@ -97,7 +97,7 @@
 a b(c) = d;
          ^";
 static method main() → dynamic {
-  self::C* c = null;
+  has-declared-initializer self::C* c = null;
   core::print(#C2);
   core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.outline.expect
index bf1b2a6..347001a 100644
--- a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.outline.expect
@@ -9,5 +9,5 @@
 //
 import self as self;
 
-static method main(dynamic arguments) → dynamic
+static method main(has-declared-initializer dynamic arguments) → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29940.dart.weak.expect
index eee3efe..9a448c5 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.weak.expect
@@ -11,5 +11,5 @@
 
 static method main() → dynamic {
   core::String* a = "";
-  invalid-type c = null;
+  has-declared-initializer invalid-type c = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect
index eee3efe..9a448c5 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect
@@ -11,5 +11,5 @@
 
 static method main() → dynamic {
   core::String* a = "";
-  invalid-type c = null;
+  has-declared-initializer invalid-type c = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29940.dart.weak.transformed.expect
index eee3efe..9a448c5 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.weak.transformed.expect
@@ -11,5 +11,5 @@
 
 static method main() → dynamic {
   core::String* a = "";
-  invalid-type c = null;
+  has-declared-initializer invalid-type c = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29945.dart.weak.expect
index 038a3a7..d77ee07 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.weak.expect
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect
index 038a3a7..d77ee07 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29945.dart.weak.transformed.expect
index 038a3a7..d77ee07 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.weak.transformed.expect
@@ -9,5 +9,5 @@
 import self as self;
 
 static method main() → dynamic {
-  invalid-type x = null;
+  has-declared-initializer invalid-type x = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
index 3412492..821c285 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.weak.expect
@@ -13,6 +13,6 @@
 import self as self;
 
 static method bad() → dynamic {
-  return let final dynamic #t1 = null in #t1 == null ?{dynamic} null : #t1{dynamic}.[](1);
+  return let final has-declared-initializer dynamic #t1 = null in #t1 == null ?{dynamic} null : #t1{dynamic}.[](1);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect
index 3412492..821c285 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect
@@ -13,6 +13,6 @@
 import self as self;
 
 static method bad() → dynamic {
-  return let final dynamic #t1 = null in #t1 == null ?{dynamic} null : #t1{dynamic}.[](1);
+  return let final has-declared-initializer dynamic #t1 = null in #t1 == null ?{dynamic} null : #t1{dynamic}.[](1);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
index ed0856a..f4dba33 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.expect
@@ -11,7 +11,7 @@
     final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
     final core::Iterable<dynamic>* #t2 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t2 == null))
-      for (final dynamic #t3 in #t2) {
+      for (final has-declared-initializer dynamic #t3 in #t2) {
         final core::int* #t4 = #t3 as{TypeError} core::int*;
         #t1.{core::Set::add}{Invariant}(#t4){(core::int*) →* core::bool*};
       }
@@ -22,7 +22,7 @@
     final core::List<core::int*>* #t5 = <core::int*>[];
     final core::Iterable<dynamic>* #t6 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t6 == null))
-      for (final dynamic #t7 in #t6) {
+      for (final has-declared-initializer dynamic #t7 in #t6) {
         final core::int* #t8 = #t7 as{TypeError} core::int*;
         #t5.{core::List::add}{Invariant}(#t8){(core::int*) →* void};
       }
@@ -33,7 +33,7 @@
     final core::Map<core::int*, core::int*>* #t9 = <core::int*, core::int*>{};
     final core::Map<dynamic, dynamic>* #t10 = stringMap as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*;
     if(!(#t10 == null))
-      for (final core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}) {
         final core::int* #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
         final core::int* #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
         #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int*, core::int*) →* void};
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect
index ed0856a..f4dba33 100644
--- a/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect
@@ -11,7 +11,7 @@
     final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
     final core::Iterable<dynamic>* #t2 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t2 == null))
-      for (final dynamic #t3 in #t2) {
+      for (final has-declared-initializer dynamic #t3 in #t2) {
         final core::int* #t4 = #t3 as{TypeError} core::int*;
         #t1.{core::Set::add}{Invariant}(#t4){(core::int*) →* core::bool*};
       }
@@ -22,7 +22,7 @@
     final core::List<core::int*>* #t5 = <core::int*>[];
     final core::Iterable<dynamic>* #t6 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t6 == null))
-      for (final dynamic #t7 in #t6) {
+      for (final has-declared-initializer dynamic #t7 in #t6) {
         final core::int* #t8 = #t7 as{TypeError} core::int*;
         #t5.{core::List::add}{Invariant}(#t8){(core::int*) →* void};
       }
@@ -33,7 +33,7 @@
     final core::Map<core::int*, core::int*>* #t9 = <core::int*, core::int*>{};
     final core::Map<dynamic, dynamic>* #t10 = stringMap as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*;
     if(!(#t10 == null))
-      for (final core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}) {
+      for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}) {
         final core::int* #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
         final core::int* #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
         #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int*, core::int*) →* void};
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart b/pkg/front_end/testcases/super_parameters/default_values.dart
index f62c550..5d88eb3 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart
@@ -61,6 +61,10 @@
   C6([int? super.x]); // Ok.
 }
 
+class D6 extends C6 {
+  D6([int super.x]); // Error
+}
+
 class S7 {
   int s;
   S7([int x = 0]) : s = x - 1;
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect
index 53f4848..c327af8 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect
@@ -6,11 +6,15 @@
 //   C5([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:65:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+//   D6([int super.x]); // Error
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:118:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bp([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:127:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bn({int super.x}); // Error.
 //                 ^
 //
@@ -88,6 +92,11 @@
     : super self::S6::•(x)
     ;
 }
+class D6 extends self::C6 {
+  constructor •([core::int x = #C4]) → self::D6
+    : super self::C6::•(x)
+    ;
+}
 class S7 extends core::Object {
   field core::int s;
   constructor •([core::int x = #C1]) → self::S7
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect
index 53f4848..c327af8 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect
@@ -6,11 +6,15 @@
 //   C5([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:65:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+//   D6([int super.x]); // Error
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:118:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bp([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:127:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bn({int super.x}); // Error.
 //                 ^
 //
@@ -88,6 +92,11 @@
     : super self::S6::•(x)
     ;
 }
+class D6 extends self::C6 {
+  constructor •([core::int x = #C4]) → self::D6
+    : super self::C6::•(x)
+    ;
+}
 class S7 extends core::Object {
   field core::int s;
   constructor •([core::int x = #C1]) → self::S7
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
index 9766c4d..eeca54d 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
@@ -57,6 +57,10 @@
   C6([int? super.x]);
 }
 
+class D6 extends C6 {
+  D6([int super.x]);
+}
+
 class S7 {
   int s;
   S7([int x = 0]) : s = x - 1;
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect
index 6b17d46..78c95ba 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect
@@ -75,6 +75,10 @@
   int cc;
 }
 
+class D6 extends C6 {
+  D6([int super.x]);
+}
+
 class S1 {
   S1([int x = 0]) : s = x - 1;
   int s;
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect
index 53f4848..c327af8 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect
@@ -6,11 +6,15 @@
 //   C5([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:65:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+//   D6([int super.x]); // Error
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:118:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bp([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:127:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bn({int super.x}); // Error.
 //                 ^
 //
@@ -88,6 +92,11 @@
     : super self::S6::•(x)
     ;
 }
+class D6 extends self::C6 {
+  constructor •([core::int x = #C4]) → self::D6
+    : super self::C6::•(x)
+    ;
+}
 class S7 extends core::Object {
   field core::int s;
   constructor •([core::int x = #C1]) → self::S7
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect
index 53f4848..c327af8 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect
@@ -6,11 +6,15 @@
 //   C5([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:65:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+//   D6([int super.x]); // Error
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:118:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bp([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:127:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bn({int super.x}); // Error.
 //                 ^
 //
@@ -88,6 +92,11 @@
     : super self::S6::•(x)
     ;
 }
+class D6 extends self::C6 {
+  constructor •([core::int x = #C4]) → self::D6
+    : super self::C6::•(x)
+    ;
+}
 class S7 extends core::Object {
   field core::int s;
   constructor •([core::int x = #C1]) → self::S7
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 e843595..fd3f672 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
@@ -6,11 +6,15 @@
 //   C5([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:65:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+//   D6([int super.x]); // Error
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:118:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bp([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:127:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bn({int super.x}); // Error.
 //                 ^
 //
@@ -76,6 +80,10 @@
   constructor •([core::int? x]) → self::C6
     ;
 }
+class D6 extends self::C6 {
+  constructor •([core::int x]) → self::D6
+    ;
+}
 class S7 extends core::Object {
   field core::int s;
   constructor •([core::int x = 0]) → self::S7
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect
index 53f4848..c327af8 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect
@@ -6,11 +6,15 @@
 //   C5([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:65:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+//   D6([int super.x]); // Error
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:118:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bp([int super.x]); // Error.
 //                 ^
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
+// pkg/front_end/testcases/super_parameters/default_values.dart:127:17: Error: Type 'int' of the optional super-initializer parameter 'x' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor.
 //   Bn({int super.x}); // Error.
 //                 ^
 //
@@ -88,6 +92,11 @@
     : super self::S6::•(x)
     ;
 }
+class D6 extends self::C6 {
+  constructor •([core::int x = #C4]) → self::D6
+    : super self::C6::•(x)
+    ;
+}
 class S7 extends core::Object {
   field core::int s;
   constructor •([core::int x = #C1]) → self::S7
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart
index 71e4e70..29915d6 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'synthesized_super_constructor_with_parameters_lib.dart';
+
 // 1. The base case.
 
 class A1 {
@@ -92,4 +94,38 @@
   AA5([this.foo = 42]);
 }
 
+// 6. The base class + mixin application from dill.
+
+class D6 extends C6 {
+  D6({super.a});
+}
+
+// 7. The base class from dill.
+
+class B7 {}
+
+// C7 has a synthesized constructor that takes a positional parameter.
+class C7 = A7 with B7;
+
+class D7 extends C7 {
+  D7([super.a]);
+}
+
+// 8. The base class + mixin application from dill.
+
+class D8 extends C8 {
+  D8({super.a});
+}
+
+// 9. The base class with nullable field from dill.
+
+class B9 {}
+
+// C9 has a synthesized constructor that takes a positional parameter.
+class C9 = A9 with B9;
+
+class D9 extends C9 {
+  D9([super.a]);
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.strong.expect
index 0a867e6..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
@@ -1,6 +1,9 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "synthesized_super_constructor_with_parameters_lib.dart" as syn;
+
+import "org-dartlang-testcase:///synthesized_super_constructor_with_parameters_lib.dart";
 
 class A1 extends core::Object {
   final field core::int a;
@@ -127,9 +130,99 @@
     : self::AA5::foo = foo, super core::Object::•()
     ;
 }
+class D6 extends syn::C6 {
+  constructor •({core::int a = #C1}) → self::D6
+    : super syn::C6::•(a: a)
+    ;
+}
+class B7 extends core::Object {
+  synthetic constructor •() → self::B7
+    : super core::Object::•()
+    ;
+}
+class C7 = syn::A7 with self::B7 {
+  synthetic constructor •([core::int a = #C1]) → self::C7
+    : super syn::A7::•(a)
+    ;
+}
+class D7 extends self::C7 {
+  constructor •([core::int a = #C1]) → self::D7
+    : super self::C7::•(a)
+    ;
+}
+class D8 extends syn::C8 {
+  constructor •({core::int? a = #C3}) → self::D8
+    : super syn::C8::•(a: a)
+    ;
+}
+class B9 extends core::Object {
+  synthetic constructor •() → self::B9
+    : super core::Object::•()
+    ;
+}
+class C9 = syn::A9 with self::B9 {
+  synthetic constructor •([core::int? a = #C3]) → self::C9
+    : super syn::A9::•(a)
+    ;
+}
+class D9 extends self::C9 {
+  constructor •([core::int? a = #C3]) → self::D9
+    : super self::C9::•(a)
+    ;
+}
 static method main() → dynamic {}
 
+library /*isNonNullableByDefault*/;
+import self as syn;
+import "dart:core" as core;
+
+class A6 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → syn::A6
+    : syn::A6::a = a, super core::Object::•()
+    ;
+}
+class B6 extends core::Object {
+  synthetic constructor •() → syn::B6
+    : super core::Object::•()
+    ;
+}
+class C6 = syn::A6 with syn::B6 {
+  synthetic constructor •({core::int a = #C1}) → syn::C6
+    : super syn::A6::•(a: a)
+    ;
+}
+class A7 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → syn::A7
+    : syn::A7::a = a, super core::Object::•()
+    ;
+}
+class A8 extends core::Object {
+  final field core::int? a;
+  constructor •({core::int? a = #C3}) → syn::A8
+    : syn::A8::a = a, super core::Object::•()
+    ;
+}
+class B8 extends core::Object {
+  synthetic constructor •() → syn::B8
+    : super core::Object::•()
+    ;
+}
+class C8 = syn::A8 with syn::B8 {
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
+    : super syn::A8::•(a: a)
+    ;
+}
+class A9 extends core::Object {
+  final field core::int? a;
+  constructor •([core::int? a = #C3]) → syn::A9
+    : syn::A9::a = a, super core::Object::•()
+    ;
+}
+
 constants  {
   #C1 = 0
   #C2 = 42
+  #C3 = null
 }
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 cf81c26..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
@@ -1,6 +1,9 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "synthesized_super_constructor_with_parameters_lib.dart" as syn;
+
+import "org-dartlang-testcase:///synthesized_super_constructor_with_parameters_lib.dart";
 
 class A1 extends core::Object {
   final field core::int a;
@@ -127,9 +130,99 @@
     : self::AA5::foo = foo, super core::Object::•()
     ;
 }
+class D6 extends syn::C6 {
+  constructor •({core::int a = #C1}) → self::D6
+    : super syn::C6::•(a: a)
+    ;
+}
+class B7 extends core::Object {
+  synthetic constructor •() → self::B7
+    : super core::Object::•()
+    ;
+}
+class C7 extends syn::A7 implements self::B7 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int a = #C1]) → self::C7
+    : super syn::A7::•(a)
+    ;
+}
+class D7 extends self::C7 {
+  constructor •([core::int a = #C1]) → self::D7
+    : super self::C7::•(a)
+    ;
+}
+class D8 extends syn::C8 {
+  constructor •({core::int? a = #C3}) → self::D8
+    : super syn::C8::•(a: a)
+    ;
+}
+class B9 extends core::Object {
+  synthetic constructor •() → self::B9
+    : super core::Object::•()
+    ;
+}
+class C9 extends syn::A9 implements self::B9 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int? a = #C3]) → self::C9
+    : super syn::A9::•(a)
+    ;
+}
+class D9 extends self::C9 {
+  constructor •([core::int? a = #C3]) → self::D9
+    : super self::C9::•(a)
+    ;
+}
 static method main() → dynamic {}
 
+library /*isNonNullableByDefault*/;
+import self as syn;
+import "dart:core" as core;
+
+class A6 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → syn::A6
+    : syn::A6::a = a, super core::Object::•()
+    ;
+}
+class B6 extends core::Object {
+  synthetic constructor •() → syn::B6
+    : super core::Object::•()
+    ;
+}
+class C6 extends syn::A6 implements syn::B6 /*isEliminatedMixin*/  {
+  synthetic constructor •({core::int a = #C1}) → syn::C6
+    : super syn::A6::•(a: a)
+    ;
+}
+class A7 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → syn::A7
+    : syn::A7::a = a, super core::Object::•()
+    ;
+}
+class A8 extends core::Object {
+  final field core::int? a;
+  constructor •({core::int? a = #C3}) → syn::A8
+    : syn::A8::a = a, super core::Object::•()
+    ;
+}
+class B8 extends core::Object {
+  synthetic constructor •() → syn::B8
+    : super core::Object::•()
+    ;
+}
+class C8 extends syn::A8 implements syn::B8 /*isEliminatedMixin*/  {
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
+    : super syn::A8::•(a: a)
+    ;
+}
+class A9 extends core::Object {
+  final field core::int? a;
+  constructor •([core::int? a = #C3]) → syn::A9
+    : syn::A9::a = a, super core::Object::•()
+    ;
+}
+
 constants  {
   #C1 = 0
   #C2 = 42
+  #C3 = null
 }
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
index 570dcce..576eaec 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
@@ -1,3 +1,5 @@
+import 'synthesized_super_constructor_with_parameters_lib.dart';
+
 class A1 {
   final int a;
   A1(this.a);
@@ -73,4 +75,28 @@
   AA5([this.foo = 42]);
 }
 
+class D6 extends C6 {
+  D6({super.a});
+}
+
+class B7 {}
+
+class C7 = A7 with B7;
+
+class D7 extends C7 {
+  D7([super.a]);
+}
+
+class D8 extends C8 {
+  D8({super.a});
+}
+
+class B9 {}
+
+class C9 = A9 with B9;
+
+class D9 extends C9 {
+  D9([super.a]);
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect
index a0dfff2..12b80fc 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect
@@ -1,3 +1,5 @@
+import 'synthesized_super_constructor_with_parameters_lib.dart';
+
 class A1 {
   A1(this.a);
   final int a;
@@ -41,6 +43,10 @@
 
 class B5 {}
 
+class B7 {}
+
+class B9 {}
+
 class C1 = A1 with B1;
 class C2 = A2 with B2;
 class C3 = A3 with B3;
@@ -48,6 +54,8 @@
 class C5a = A5 with B5;
 class C5b = C5a with B5;
 class C5c = C5b with B5;
+class C7 = A7 with B7;
+class C9 = A9 with B9;
 
 class D1 extends C1 {
   D1(super.a);
@@ -69,4 +77,20 @@
   D5([super.foo]);
 }
 
+class D6 extends C6 {
+  D6({super.a});
+}
+
+class D7 extends C7 {
+  D7([super.a]);
+}
+
+class D8 extends C8 {
+  D8({super.a});
+}
+
+class D9 extends C9 {
+  D9([super.a]);
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.weak.expect
index 0a867e6..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
@@ -1,6 +1,9 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "synthesized_super_constructor_with_parameters_lib.dart" as syn;
+
+import "org-dartlang-testcase:///synthesized_super_constructor_with_parameters_lib.dart";
 
 class A1 extends core::Object {
   final field core::int a;
@@ -127,9 +130,99 @@
     : self::AA5::foo = foo, super core::Object::•()
     ;
 }
+class D6 extends syn::C6 {
+  constructor •({core::int a = #C1}) → self::D6
+    : super syn::C6::•(a: a)
+    ;
+}
+class B7 extends core::Object {
+  synthetic constructor •() → self::B7
+    : super core::Object::•()
+    ;
+}
+class C7 = syn::A7 with self::B7 {
+  synthetic constructor •([core::int a = #C1]) → self::C7
+    : super syn::A7::•(a)
+    ;
+}
+class D7 extends self::C7 {
+  constructor •([core::int a = #C1]) → self::D7
+    : super self::C7::•(a)
+    ;
+}
+class D8 extends syn::C8 {
+  constructor •({core::int? a = #C3}) → self::D8
+    : super syn::C8::•(a: a)
+    ;
+}
+class B9 extends core::Object {
+  synthetic constructor •() → self::B9
+    : super core::Object::•()
+    ;
+}
+class C9 = syn::A9 with self::B9 {
+  synthetic constructor •([core::int? a = #C3]) → self::C9
+    : super syn::A9::•(a)
+    ;
+}
+class D9 extends self::C9 {
+  constructor •([core::int? a = #C3]) → self::D9
+    : super self::C9::•(a)
+    ;
+}
 static method main() → dynamic {}
 
+library /*isNonNullableByDefault*/;
+import self as syn;
+import "dart:core" as core;
+
+class A6 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → syn::A6
+    : syn::A6::a = a, super core::Object::•()
+    ;
+}
+class B6 extends core::Object {
+  synthetic constructor •() → syn::B6
+    : super core::Object::•()
+    ;
+}
+class C6 = syn::A6 with syn::B6 {
+  synthetic constructor •({core::int a = #C1}) → syn::C6
+    : super syn::A6::•(a: a)
+    ;
+}
+class A7 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → syn::A7
+    : syn::A7::a = a, super core::Object::•()
+    ;
+}
+class A8 extends core::Object {
+  final field core::int? a;
+  constructor •({core::int? a = #C3}) → syn::A8
+    : syn::A8::a = a, super core::Object::•()
+    ;
+}
+class B8 extends core::Object {
+  synthetic constructor •() → syn::B8
+    : super core::Object::•()
+    ;
+}
+class C8 = syn::A8 with syn::B8 {
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
+    : super syn::A8::•(a: a)
+    ;
+}
+class A9 extends core::Object {
+  final field core::int? a;
+  constructor •([core::int? a = #C3]) → syn::A9
+    : syn::A9::a = a, super core::Object::•()
+    ;
+}
+
 constants  {
   #C1 = 0
   #C2 = 42
+  #C3 = null
 }
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 0a867e6..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
@@ -1,6 +1,9 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "synthesized_super_constructor_with_parameters_lib.dart" as syn;
+
+import "org-dartlang-testcase:///synthesized_super_constructor_with_parameters_lib.dart";
 
 class A1 extends core::Object {
   final field core::int a;
@@ -127,9 +130,99 @@
     : self::AA5::foo = foo, super core::Object::•()
     ;
 }
+class D6 extends syn::C6 {
+  constructor •({core::int a = #C1}) → self::D6
+    : super syn::C6::•(a: a)
+    ;
+}
+class B7 extends core::Object {
+  synthetic constructor •() → self::B7
+    : super core::Object::•()
+    ;
+}
+class C7 = syn::A7 with self::B7 {
+  synthetic constructor •([core::int a = #C1]) → self::C7
+    : super syn::A7::•(a)
+    ;
+}
+class D7 extends self::C7 {
+  constructor •([core::int a = #C1]) → self::D7
+    : super self::C7::•(a)
+    ;
+}
+class D8 extends syn::C8 {
+  constructor •({core::int? a = #C3}) → self::D8
+    : super syn::C8::•(a: a)
+    ;
+}
+class B9 extends core::Object {
+  synthetic constructor •() → self::B9
+    : super core::Object::•()
+    ;
+}
+class C9 = syn::A9 with self::B9 {
+  synthetic constructor •([core::int? a = #C3]) → self::C9
+    : super syn::A9::•(a)
+    ;
+}
+class D9 extends self::C9 {
+  constructor •([core::int? a = #C3]) → self::D9
+    : super self::C9::•(a)
+    ;
+}
 static method main() → dynamic {}
 
+library /*isNonNullableByDefault*/;
+import self as syn;
+import "dart:core" as core;
+
+class A6 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → syn::A6
+    : syn::A6::a = a, super core::Object::•()
+    ;
+}
+class B6 extends core::Object {
+  synthetic constructor •() → syn::B6
+    : super core::Object::•()
+    ;
+}
+class C6 = syn::A6 with syn::B6 {
+  synthetic constructor •({core::int a = #C1}) → syn::C6
+    : super syn::A6::•(a: a)
+    ;
+}
+class A7 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → syn::A7
+    : syn::A7::a = a, super core::Object::•()
+    ;
+}
+class A8 extends core::Object {
+  final field core::int? a;
+  constructor •({core::int? a = #C3}) → syn::A8
+    : syn::A8::a = a, super core::Object::•()
+    ;
+}
+class B8 extends core::Object {
+  synthetic constructor •() → syn::B8
+    : super core::Object::•()
+    ;
+}
+class C8 = syn::A8 with syn::B8 {
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
+    : super syn::A8::•(a: a)
+    ;
+}
+class A9 extends core::Object {
+  final field core::int? a;
+  constructor •([core::int? a = #C3]) → syn::A9
+    : syn::A9::a = a, super core::Object::•()
+    ;
+}
+
 constants  {
   #C1 = 0
   #C2 = 42
+  #C3 = null
 }
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 ee7f775..8e802f7 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
@@ -1,6 +1,9 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "synthesized_super_constructor_with_parameters_lib.dart" as syn;
+
+import "org-dartlang-testcase:///synthesized_super_constructor_with_parameters_lib.dart";
 
 class A1 extends core::Object {
   final field core::int a;
@@ -110,5 +113,82 @@
   constructor •([core::int foo = 42]) → self::AA5
     ;
 }
+class D6 extends syn::C6 {
+  constructor •({core::int a = 0}) → self::D6
+    ;
+}
+class B7 extends core::Object {
+  synthetic constructor •() → self::B7
+    ;
+}
+class C7 = syn::A7 with self::B7 {
+  synthetic constructor •([core::int a = 0]) → self::C7
+    : super syn::A7::•(a)
+    ;
+}
+class D7 extends self::C7 {
+  constructor •([core::int a = 0]) → self::D7
+    ;
+}
+class D8 extends syn::C8 {
+  constructor •({core::int? a}) → self::D8
+    ;
+}
+class B9 extends core::Object {
+  synthetic constructor •() → self::B9
+    ;
+}
+class C9 = syn::A9 with self::B9 {
+  synthetic constructor •([core::int? a]) → self::C9
+    : super syn::A9::•(a)
+    ;
+}
+class D9 extends self::C9 {
+  constructor •([core::int? a]) → self::D9
+    ;
+}
 static method main() → dynamic
   ;
+
+library /*isNonNullableByDefault*/;
+import self as syn;
+import "dart:core" as core;
+
+class A6 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = 0}) → syn::A6
+    ;
+}
+class B6 extends core::Object {
+  synthetic constructor •() → syn::B6
+    ;
+}
+class C6 = syn::A6 with syn::B6 {
+  synthetic constructor •({core::int a = 0}) → syn::C6
+    : super syn::A6::•(a: a)
+    ;
+}
+class A7 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = 0]) → syn::A7
+    ;
+}
+class A8 extends core::Object {
+  final field core::int? a;
+  constructor •({core::int? a}) → syn::A8
+    ;
+}
+class B8 extends core::Object {
+  synthetic constructor •() → syn::B8
+    ;
+}
+class C8 = syn::A8 with syn::B8 {
+  synthetic constructor •({core::int? a}) → syn::C8
+    : super syn::A8::•(a: a)
+    ;
+}
+class A9 extends core::Object {
+  final field core::int? a;
+  constructor •([core::int? a]) → 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 cf81c26..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
@@ -1,6 +1,9 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
+import "synthesized_super_constructor_with_parameters_lib.dart" as syn;
+
+import "org-dartlang-testcase:///synthesized_super_constructor_with_parameters_lib.dart";
 
 class A1 extends core::Object {
   final field core::int a;
@@ -127,9 +130,99 @@
     : self::AA5::foo = foo, super core::Object::•()
     ;
 }
+class D6 extends syn::C6 {
+  constructor •({core::int a = #C1}) → self::D6
+    : super syn::C6::•(a: a)
+    ;
+}
+class B7 extends core::Object {
+  synthetic constructor •() → self::B7
+    : super core::Object::•()
+    ;
+}
+class C7 extends syn::A7 implements self::B7 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int a = #C1]) → self::C7
+    : super syn::A7::•(a)
+    ;
+}
+class D7 extends self::C7 {
+  constructor •([core::int a = #C1]) → self::D7
+    : super self::C7::•(a)
+    ;
+}
+class D8 extends syn::C8 {
+  constructor •({core::int? a = #C3}) → self::D8
+    : super syn::C8::•(a: a)
+    ;
+}
+class B9 extends core::Object {
+  synthetic constructor •() → self::B9
+    : super core::Object::•()
+    ;
+}
+class C9 extends syn::A9 implements self::B9 /*isEliminatedMixin*/  {
+  synthetic constructor •([core::int? a = #C3]) → self::C9
+    : super syn::A9::•(a)
+    ;
+}
+class D9 extends self::C9 {
+  constructor •([core::int? a = #C3]) → self::D9
+    : super self::C9::•(a)
+    ;
+}
 static method main() → dynamic {}
 
+library /*isNonNullableByDefault*/;
+import self as syn;
+import "dart:core" as core;
+
+class A6 extends core::Object {
+  final field core::int a;
+  constructor •({core::int a = #C1}) → syn::A6
+    : syn::A6::a = a, super core::Object::•()
+    ;
+}
+class B6 extends core::Object {
+  synthetic constructor •() → syn::B6
+    : super core::Object::•()
+    ;
+}
+class C6 extends syn::A6 implements syn::B6 /*isEliminatedMixin*/  {
+  synthetic constructor •({core::int a = #C1}) → syn::C6
+    : super syn::A6::•(a: a)
+    ;
+}
+class A7 extends core::Object {
+  final field core::int a;
+  constructor •([core::int a = #C1]) → syn::A7
+    : syn::A7::a = a, super core::Object::•()
+    ;
+}
+class A8 extends core::Object {
+  final field core::int? a;
+  constructor •({core::int? a = #C3}) → syn::A8
+    : syn::A8::a = a, super core::Object::•()
+    ;
+}
+class B8 extends core::Object {
+  synthetic constructor •() → syn::B8
+    : super core::Object::•()
+    ;
+}
+class C8 extends syn::A8 implements syn::B8 /*isEliminatedMixin*/  {
+  synthetic constructor •({core::int? a = #C3}) → syn::C8
+    : super syn::A8::•(a: a)
+    ;
+}
+class A9 extends core::Object {
+  final field core::int? a;
+  constructor •([core::int? a = #C3]) → syn::A9
+    : syn::A9::a = a, super core::Object::•()
+    ;
+}
+
 constants  {
   #C1 = 0
   #C2 = 42
+  #C3 = null
 }
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters_lib.dart b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters_lib.dart
new file mode 100644
index 0000000..99b56d6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters_lib.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A6 {
+  final int a;
+  A6({this.a = 0});
+}
+
+class B6 {}
+
+// C6 has a synthesized constructor that takes a named parameter.
+class C6 = A6 with B6;
+
+class A7 {
+  final int a;
+  A7([this.a = 0]);
+}
+
+class A8 {
+  final int? a;
+  A8({this.a});
+}
+
+class B8 {}
+
+// C8 has a synthesized constructor that takes a named parameter.
+class C8 = A8 with B8;
+
+class A9 {
+  final int? a;
+  A9([this.a]);
+}
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.expect b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.expect
index 9474a72..eb1def1 100644
--- a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.expect
@@ -33,7 +33,7 @@
   dynamic initial = <core::int*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t3 = <core::int*>[];
-    for (final dynamic #t4 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t4 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
       #t3.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
     }
@@ -46,7 +46,7 @@
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t7 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t7 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t8 = #t7 as{TypeError} core::int*;
       #t6.{core::Set::add}{Invariant}(#t8){(core::int*) →* core::bool*};
     }
@@ -62,7 +62,7 @@
   core::Iterable<core::num*>* initial = <core::num*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t9 = <core::int*>[];
-    for (final dynamic #t10 in initial) {
+    for (final has-declared-initializer dynamic #t10 in initial) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t9.{core::List::add}{Invariant}(#t11){(core::int*) →* void};
     }
@@ -75,7 +75,7 @@
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t13 in initial) {
+    for (final has-declared-initializer dynamic #t13 in initial) {
       final core::int* #t14 = #t13 as{TypeError} core::int*;
       #t12.{core::Set::add}{Invariant}(#t14){(core::int*) →* core::bool*};
     }
@@ -91,7 +91,7 @@
   core::List<core::num*>* initial = <core::num*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t15 = <core::int*>[];
-    for (final dynamic #t16 in initial) {
+    for (final has-declared-initializer dynamic #t16 in initial) {
       final core::int* #t17 = #t16 as{TypeError} core::int*;
       #t15.{core::List::add}{Invariant}(#t17){(core::int*) →* void};
     }
@@ -104,7 +104,7 @@
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t18 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t19 in initial) {
+    for (final has-declared-initializer dynamic #t19 in initial) {
       final core::int* #t20 = #t19 as{TypeError} core::int*;
       #t18.{core::Set::add}{Invariant}(#t20){(core::int*) →* core::bool*};
     }
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.modular.expect
index 9474a72..eb1def1 100644
--- a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.modular.expect
@@ -33,7 +33,7 @@
   dynamic initial = <core::int*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t3 = <core::int*>[];
-    for (final dynamic #t4 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t4 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
       #t3.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
     }
@@ -46,7 +46,7 @@
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t7 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t7 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t8 = #t7 as{TypeError} core::int*;
       #t6.{core::Set::add}{Invariant}(#t8){(core::int*) →* core::bool*};
     }
@@ -62,7 +62,7 @@
   core::Iterable<core::num*>* initial = <core::num*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t9 = <core::int*>[];
-    for (final dynamic #t10 in initial) {
+    for (final has-declared-initializer dynamic #t10 in initial) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t9.{core::List::add}{Invariant}(#t11){(core::int*) →* void};
     }
@@ -75,7 +75,7 @@
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t13 in initial) {
+    for (final has-declared-initializer dynamic #t13 in initial) {
       final core::int* #t14 = #t13 as{TypeError} core::int*;
       #t12.{core::Set::add}{Invariant}(#t14){(core::int*) →* core::bool*};
     }
@@ -91,7 +91,7 @@
   core::List<core::num*>* initial = <core::num*>[0, 1, 2];
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t15 = <core::int*>[];
-    for (final dynamic #t16 in initial) {
+    for (final has-declared-initializer dynamic #t16 in initial) {
       final core::int* #t17 = #t16 as{TypeError} core::int*;
       #t15.{core::List::add}{Invariant}(#t17){(core::int*) →* void};
     }
@@ -104,7 +104,7 @@
   self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
   core::Set<core::int*>* set = block {
     final core::Set<core::int*>* #t18 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t19 in initial) {
+    for (final has-declared-initializer dynamic #t19 in initial) {
       final core::int* #t20 = #t19 as{TypeError} core::int*;
       #t18.{core::Set::add}{Invariant}(#t20){(core::int*) →* core::bool*};
     }
diff --git a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.expect b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.expect
index 78bb3e0..84fd04c 100644
--- a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.expect
@@ -10,11 +10,11 @@
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t1 = <core::int*>[0];
     #t1.{core::List::addAll}{Invariant}(list1){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t2 in list2) {
+    for (final has-declared-initializer dynamic #t2 in list2) {
       final core::int* #t3 = #t2 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t3){(core::int*) →* void};
     }
-    for (final dynamic #t4 in list3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t4 in list3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
     }
@@ -37,11 +37,11 @@
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
     #t9.{core::Set::add}{Invariant}(0){(core::int*) →* core::bool*};
     #t9.{core::Set::addAll}{Invariant}(set1){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t10 in set2) {
+    for (final has-declared-initializer dynamic #t10 in set2) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
     }
-    for (final dynamic #t12 in set3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t12 in set3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t13){(core::int*) →* core::bool*};
     }
@@ -54,14 +54,14 @@
   core::Map<core::int*, core::String*>* map = block {
     final core::Map<core::int*, core::String*>* #t14 = <core::int*, core::String*>{};
     #t14.{core::Map::[]=}{Invariant}(0, "foo"){(core::int*, core::String*) →* void};
-    for (final core::MapEntry<core::int*, core::String*>* #t15 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
+    for (final has-declared-initializer core::MapEntry<core::int*, core::String*>* #t15 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
       #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::int*}, #t15.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
-    for (final core::MapEntry<dynamic, dynamic>* #t16 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t16 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
       final core::int* #t17 = #t16.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
       final core::String* #t18 = #t16.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
       #t14.{core::Map::[]=}{Invariant}(#t17, #t18){(core::int*, core::String*) →* void};
     }
-    for (final core::MapEntry<dynamic, dynamic>* #t19 in (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t19 in (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
       final core::int* #t20 = #t19.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
       final core::String* #t21 = #t19.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
       #t14.{core::Map::[]=}{Invariant}(#t20, #t21){(core::int*, core::String*) →* void};
diff --git a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.modular.expect
index 78bb3e0..84fd04c 100644
--- a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.modular.expect
@@ -10,11 +10,11 @@
   core::List<core::int*>* list = block {
     final core::List<core::int*>* #t1 = <core::int*>[0];
     #t1.{core::List::addAll}{Invariant}(list1){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t2 in list2) {
+    for (final has-declared-initializer dynamic #t2 in list2) {
       final core::int* #t3 = #t2 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t3){(core::int*) →* void};
     }
-    for (final dynamic #t4 in list3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t4 in list3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
     }
@@ -37,11 +37,11 @@
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
     #t9.{core::Set::add}{Invariant}(0){(core::int*) →* core::bool*};
     #t9.{core::Set::addAll}{Invariant}(set1){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t10 in set2) {
+    for (final has-declared-initializer dynamic #t10 in set2) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
     }
-    for (final dynamic #t12 in set3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t12 in set3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t13){(core::int*) →* core::bool*};
     }
@@ -54,14 +54,14 @@
   core::Map<core::int*, core::String*>* map = block {
     final core::Map<core::int*, core::String*>* #t14 = <core::int*, core::String*>{};
     #t14.{core::Map::[]=}{Invariant}(0, "foo"){(core::int*, core::String*) →* void};
-    for (final core::MapEntry<core::int*, core::String*>* #t15 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
+    for (final has-declared-initializer core::MapEntry<core::int*, core::String*>* #t15 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
       #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::int*}, #t15.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
-    for (final core::MapEntry<dynamic, dynamic>* #t16 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t16 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
       final core::int* #t17 = #t16.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
       final core::String* #t18 = #t16.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
       #t14.{core::Map::[]=}{Invariant}(#t17, #t18){(core::int*, core::String*) →* void};
     }
-    for (final core::MapEntry<dynamic, dynamic>* #t19 in (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t19 in (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
       final core::int* #t20 = #t19.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
       final core::String* #t21 = #t19.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
       #t14.{core::Map::[]=}{Invariant}(#t20, #t21){(core::int*, core::String*) →* void};
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.expect b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.expect
index 253e487..62f06f8 100644
--- a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.expect
@@ -13,29 +13,29 @@
   core::List<core::num*>* numList2 = <core::num*>[21, 22, 23];
   core::List<core::int*>* list1 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
-    for (final dynamic #t2 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t2 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t3 = #t2 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t3){(core::int*) →* void};
     }
-    for (final dynamic #t4 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t4 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
     }
     #t1.{core::List::addAll}{Invariant}(iterableIntList){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t6 in iterableNumList1) {
+    for (final has-declared-initializer dynamic #t6 in iterableNumList1) {
       final core::int* #t7 = #t6 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t7){(core::int*) →* void};
     }
-    for (final dynamic #t8 in iterableNumList2) {
+    for (final has-declared-initializer dynamic #t8 in iterableNumList2) {
       final core::int* #t9 = #t8 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t9){(core::int*) →* void};
     }
     #t1.{core::List::addAll}{Invariant}(intList){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t10 in numList1) {
+    for (final has-declared-initializer dynamic #t10 in numList1) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t11){(core::int*) →* void};
     }
-    for (final dynamic #t12 in numList2) {
+    for (final has-declared-initializer dynamic #t12 in numList2) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t13){(core::int*) →* void};
     }
@@ -43,11 +43,11 @@
   self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i), list1);
   core::List<core::num*>* list2 = block {
     final core::List<core::num*>* #t14 = <core::num*>[];
-    for (final dynamic #t15 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t15 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t16 = #t15 as{TypeError} core::num*;
       #t14.{core::List::add}{Invariant}(#t16){(core::num*) →* void};
     }
-    for (final dynamic #t17 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t17 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t18 = #t17 as{TypeError} core::num*;
       #t14.{core::List::add}{Invariant}(#t18){(core::num*) →* void};
     }
@@ -63,13 +63,13 @@
     final core::List<core::int*>* #t19 = <core::int*>[];
     final core::Iterable<dynamic>* #t20 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t20 == null))
-      for (final dynamic #t21 in #t20) {
+      for (final has-declared-initializer dynamic #t21 in #t20) {
         final core::int* #t22 = #t21 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t22){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t23 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t23 == null))
-      for (final dynamic #t24 in #t23) {
+      for (final has-declared-initializer dynamic #t24 in #t23) {
         final core::int* #t25 = #t24 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t25){(core::int*) →* void};
       }
@@ -78,13 +78,13 @@
       #t19.{core::List::addAll}{Invariant}(#t26){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t27 = iterableNumList1;
     if(!(#t27 == null))
-      for (final dynamic #t28 in #t27) {
+      for (final has-declared-initializer dynamic #t28 in #t27) {
         final core::int* #t29 = #t28 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t29){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t30 = iterableNumList2;
     if(!(#t30 == null))
-      for (final dynamic #t31 in #t30) {
+      for (final has-declared-initializer dynamic #t31 in #t30) {
         final core::int* #t32 = #t31 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t32){(core::int*) →* void};
       }
@@ -93,13 +93,13 @@
       #t19.{core::List::addAll}{Invariant}(#t33){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t34 = numList1;
     if(!(#t34 == null))
-      for (final dynamic #t35 in #t34) {
+      for (final has-declared-initializer dynamic #t35 in #t34) {
         final core::int* #t36 = #t35 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t36){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t37 = numList2;
     if(!(#t37 == null))
-      for (final dynamic #t38 in #t37) {
+      for (final has-declared-initializer dynamic #t38 in #t37) {
         final core::int* #t39 = #t38 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t39){(core::int*) →* void};
       }
@@ -109,13 +109,13 @@
     final core::List<core::num*>* #t40 = <core::num*>[];
     final core::Iterable<dynamic>* #t41 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t41 == null))
-      for (final dynamic #t42 in #t41) {
+      for (final has-declared-initializer dynamic #t42 in #t41) {
         final core::num* #t43 = #t42 as{TypeError} core::num*;
         #t40.{core::List::add}{Invariant}(#t43){(core::num*) →* void};
       }
     final core::Iterable<dynamic>* #t44 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t44 == null))
-      for (final dynamic #t45 in #t44) {
+      for (final has-declared-initializer dynamic #t45 in #t44) {
         final core::num* #t46 = #t45 as{TypeError} core::num*;
         #t40.{core::List::add}{Invariant}(#t46){(core::num*) →* void};
       }
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.modular.expect
index 253e487..62f06f8 100644
--- a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.modular.expect
@@ -13,29 +13,29 @@
   core::List<core::num*>* numList2 = <core::num*>[21, 22, 23];
   core::List<core::int*>* list1 = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
-    for (final dynamic #t2 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t2 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t3 = #t2 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t3){(core::int*) →* void};
     }
-    for (final dynamic #t4 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t4 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t5 = #t4 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
     }
     #t1.{core::List::addAll}{Invariant}(iterableIntList){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t6 in iterableNumList1) {
+    for (final has-declared-initializer dynamic #t6 in iterableNumList1) {
       final core::int* #t7 = #t6 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t7){(core::int*) →* void};
     }
-    for (final dynamic #t8 in iterableNumList2) {
+    for (final has-declared-initializer dynamic #t8 in iterableNumList2) {
       final core::int* #t9 = #t8 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t9){(core::int*) →* void};
     }
     #t1.{core::List::addAll}{Invariant}(intList){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t10 in numList1) {
+    for (final has-declared-initializer dynamic #t10 in numList1) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t11){(core::int*) →* void};
     }
-    for (final dynamic #t12 in numList2) {
+    for (final has-declared-initializer dynamic #t12 in numList2) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
       #t1.{core::List::add}{Invariant}(#t13){(core::int*) →* void};
     }
@@ -43,11 +43,11 @@
   self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i), list1);
   core::List<core::num*>* list2 = block {
     final core::List<core::num*>* #t14 = <core::num*>[];
-    for (final dynamic #t15 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t15 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t16 = #t15 as{TypeError} core::num*;
       #t14.{core::List::add}{Invariant}(#t16){(core::num*) →* void};
     }
-    for (final dynamic #t17 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t17 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t18 = #t17 as{TypeError} core::num*;
       #t14.{core::List::add}{Invariant}(#t18){(core::num*) →* void};
     }
@@ -63,13 +63,13 @@
     final core::List<core::int*>* #t19 = <core::int*>[];
     final core::Iterable<dynamic>* #t20 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t20 == null))
-      for (final dynamic #t21 in #t20) {
+      for (final has-declared-initializer dynamic #t21 in #t20) {
         final core::int* #t22 = #t21 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t22){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t23 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t23 == null))
-      for (final dynamic #t24 in #t23) {
+      for (final has-declared-initializer dynamic #t24 in #t23) {
         final core::int* #t25 = #t24 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t25){(core::int*) →* void};
       }
@@ -78,13 +78,13 @@
       #t19.{core::List::addAll}{Invariant}(#t26){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t27 = iterableNumList1;
     if(!(#t27 == null))
-      for (final dynamic #t28 in #t27) {
+      for (final has-declared-initializer dynamic #t28 in #t27) {
         final core::int* #t29 = #t28 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t29){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t30 = iterableNumList2;
     if(!(#t30 == null))
-      for (final dynamic #t31 in #t30) {
+      for (final has-declared-initializer dynamic #t31 in #t30) {
         final core::int* #t32 = #t31 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t32){(core::int*) →* void};
       }
@@ -93,13 +93,13 @@
       #t19.{core::List::addAll}{Invariant}(#t33){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t34 = numList1;
     if(!(#t34 == null))
-      for (final dynamic #t35 in #t34) {
+      for (final has-declared-initializer dynamic #t35 in #t34) {
         final core::int* #t36 = #t35 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t36){(core::int*) →* void};
       }
     final core::Iterable<dynamic>* #t37 = numList2;
     if(!(#t37 == null))
-      for (final dynamic #t38 in #t37) {
+      for (final has-declared-initializer dynamic #t38 in #t37) {
         final core::int* #t39 = #t38 as{TypeError} core::int*;
         #t19.{core::List::add}{Invariant}(#t39){(core::int*) →* void};
       }
@@ -109,13 +109,13 @@
     final core::List<core::num*>* #t40 = <core::num*>[];
     final core::Iterable<dynamic>* #t41 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t41 == null))
-      for (final dynamic #t42 in #t41) {
+      for (final has-declared-initializer dynamic #t42 in #t41) {
         final core::num* #t43 = #t42 as{TypeError} core::num*;
         #t40.{core::List::add}{Invariant}(#t43){(core::num*) →* void};
       }
     final core::Iterable<dynamic>* #t44 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t44 == null))
-      for (final dynamic #t45 in #t44) {
+      for (final has-declared-initializer dynamic #t45 in #t44) {
         final core::num* #t46 = #t45 as{TypeError} core::num*;
         #t40.{core::List::add}{Invariant}(#t46){(core::num*) →* void};
       }
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.expect b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.expect
index c6f63bf..bbb52b5 100644
--- a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.expect
@@ -10,15 +10,15 @@
   core::List<core::int> intList = <core::int>[12, 13, 14];
   core::List<core::int> list1 = block {
     final core::List<core::int> #t1 = <core::int>[];
-    for (final dynamic #t2 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t2 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
       #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
     }
-    for (final dynamic #t4 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t4 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t5 = #t4 as{TypeError,ForNonNullableByDefault} core::int;
       #t1.{core::List::add}{Invariant}(#t5){(core::int) → void};
     }
-    for (final dynamic #t6 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t6 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t7 = #t6 as{TypeError,ForNonNullableByDefault} core::int;
       #t1.{core::List::add}{Invariant}(#t7){(core::int) → void};
     }
@@ -28,15 +28,15 @@
   self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i), list1);
   core::List<core::num> list2 = block {
     final core::List<core::num> #t8 = <core::num>[];
-    for (final dynamic #t9 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t9 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::num;
       #t8.{core::List::add}{Invariant}(#t10){(core::num) → void};
     }
-    for (final dynamic #t11 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t11 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::num;
       #t8.{core::List::add}{Invariant}(#t12){(core::num) → void};
     }
-    for (final dynamic #t13 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t13 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t14 = #t13 as{TypeError,ForNonNullableByDefault} core::num;
       #t8.{core::List::add}{Invariant}(#t14){(core::num) → void};
     }
@@ -55,19 +55,19 @@
     final core::List<core::int> #t15 = <core::int>[];
     final core::Iterable<dynamic>? #t16 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t16 == null))
-      for (final dynamic #t17 in #t16{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t17 in #t16{core::Iterable<dynamic>}) {
         final core::int #t18 = #t17 as{TypeError,ForNonNullableByDefault} core::int;
         #t15.{core::List::add}{Invariant}(#t18){(core::int) → void};
       }
     final core::Iterable<dynamic>? #t19 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t19 == null))
-      for (final dynamic #t20 in #t19{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t20 in #t19{core::Iterable<dynamic>}) {
         final core::int #t21 = #t20 as{TypeError,ForNonNullableByDefault} core::int;
         #t15.{core::List::add}{Invariant}(#t21){(core::int) → void};
       }
     final core::Iterable<dynamic>? #t22 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t22 == null))
-      for (final dynamic #t23 in #t22{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t23 in #t22{core::Iterable<dynamic>}) {
         final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
         #t15.{core::List::add}{Invariant}(#t24){(core::int) → void};
       }
@@ -83,19 +83,19 @@
     final core::List<core::num> #t27 = <core::num>[];
     final core::Iterable<dynamic>? #t28 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t28 == null))
-      for (final dynamic #t29 in #t28{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t29 in #t28{core::Iterable<dynamic>}) {
         final core::num #t30 = #t29 as{TypeError,ForNonNullableByDefault} core::num;
         #t27.{core::List::add}{Invariant}(#t30){(core::num) → void};
       }
     final core::Iterable<dynamic>? #t31 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t31 == null))
-      for (final dynamic #t32 in #t31{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t32 in #t31{core::Iterable<dynamic>}) {
         final core::num #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::num;
         #t27.{core::List::add}{Invariant}(#t33){(core::num) → void};
       }
     final core::Iterable<dynamic>? #t34 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t34 == null))
-      for (final dynamic #t35 in #t34{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t35 in #t34{core::Iterable<dynamic>}) {
         final core::num #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::num;
         #t27.{core::List::add}{Invariant}(#t36){(core::num) → void};
       }
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.modular.expect
index c6f63bf..bbb52b5 100644
--- a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.modular.expect
@@ -10,15 +10,15 @@
   core::List<core::int> intList = <core::int>[12, 13, 14];
   core::List<core::int> list1 = block {
     final core::List<core::int> #t1 = <core::int>[];
-    for (final dynamic #t2 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t2 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
       #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
     }
-    for (final dynamic #t4 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t4 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t5 = #t4 as{TypeError,ForNonNullableByDefault} core::int;
       #t1.{core::List::add}{Invariant}(#t5){(core::int) → void};
     }
-    for (final dynamic #t6 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t6 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t7 = #t6 as{TypeError,ForNonNullableByDefault} core::int;
       #t1.{core::List::add}{Invariant}(#t7){(core::int) → void};
     }
@@ -28,15 +28,15 @@
   self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i), list1);
   core::List<core::num> list2 = block {
     final core::List<core::num> #t8 = <core::num>[];
-    for (final dynamic #t9 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t9 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::num;
       #t8.{core::List::add}{Invariant}(#t10){(core::num) → void};
     }
-    for (final dynamic #t11 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t11 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::num;
       #t8.{core::List::add}{Invariant}(#t12){(core::num) → void};
     }
-    for (final dynamic #t13 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t13 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t14 = #t13 as{TypeError,ForNonNullableByDefault} core::num;
       #t8.{core::List::add}{Invariant}(#t14){(core::num) → void};
     }
@@ -55,19 +55,19 @@
     final core::List<core::int> #t15 = <core::int>[];
     final core::Iterable<dynamic>? #t16 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t16 == null))
-      for (final dynamic #t17 in #t16{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t17 in #t16{core::Iterable<dynamic>}) {
         final core::int #t18 = #t17 as{TypeError,ForNonNullableByDefault} core::int;
         #t15.{core::List::add}{Invariant}(#t18){(core::int) → void};
       }
     final core::Iterable<dynamic>? #t19 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t19 == null))
-      for (final dynamic #t20 in #t19{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t20 in #t19{core::Iterable<dynamic>}) {
         final core::int #t21 = #t20 as{TypeError,ForNonNullableByDefault} core::int;
         #t15.{core::List::add}{Invariant}(#t21){(core::int) → void};
       }
     final core::Iterable<dynamic>? #t22 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t22 == null))
-      for (final dynamic #t23 in #t22{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t23 in #t22{core::Iterable<dynamic>}) {
         final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
         #t15.{core::List::add}{Invariant}(#t24){(core::int) → void};
       }
@@ -83,19 +83,19 @@
     final core::List<core::num> #t27 = <core::num>[];
     final core::Iterable<dynamic>? #t28 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t28 == null))
-      for (final dynamic #t29 in #t28{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t29 in #t28{core::Iterable<dynamic>}) {
         final core::num #t30 = #t29 as{TypeError,ForNonNullableByDefault} core::num;
         #t27.{core::List::add}{Invariant}(#t30){(core::num) → void};
       }
     final core::Iterable<dynamic>? #t31 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t31 == null))
-      for (final dynamic #t32 in #t31{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t32 in #t31{core::Iterable<dynamic>}) {
         final core::num #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::num;
         #t27.{core::List::add}{Invariant}(#t33){(core::num) → void};
       }
     final core::Iterable<dynamic>? #t34 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t34 == null))
-      for (final dynamic #t35 in #t34{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t35 in #t34{core::Iterable<dynamic>}) {
         final core::num #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::num;
         #t27.{core::List::add}{Invariant}(#t36){(core::num) → void};
       }
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
index 2ccee62..4389b70 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.expect
@@ -49,13 +49,13 @@
   if(self::b)
     #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
   else
-    for (final core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
 } =>#t1;
 static field core::Map<dynamic, dynamic>* map2 = block {
   final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
   if(self::b)
-    for (final core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   else
     #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
@@ -63,10 +63,10 @@
 static field core::Map<dynamic, dynamic>* map3 = block {
   final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
   if(self::b)
-    for (final core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   else
-    for (final core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
 } =>#t5;
 static field core::Map<dynamic, core::int*>* map4 = block {
@@ -91,14 +91,14 @@
     #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
   else
     for (dynamic a in self::list)
-      for (final core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
         #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
 } =>#t10;
 static field core::Map<dynamic, core::int*>* map7 = block {
   final core::Map<dynamic, core::int*>* #t12 = <dynamic, core::int*>{};
   if(self::b)
     for (dynamic a in self::list)
-      for (final core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
         #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
   else
     #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
@@ -125,14 +125,14 @@
     #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
   else
     for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
         #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
 } =>#t16;
 static field core::Map<dynamic, core::int*>* map11 = block {
   final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
   if(self::b)
     for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
         #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
   else
     #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
@@ -143,7 +143,7 @@
     #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int*, core::int*) →* void};
   else
     if(self::b)
-      for (final core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
         #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
 } =>#t20;
 static field core::Map<invalid-type, Null>* error4 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect
index 2ccee62..4389b70 100644
--- a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect
@@ -49,13 +49,13 @@
   if(self::b)
     #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
   else
-    for (final core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
 } =>#t1;
 static field core::Map<dynamic, dynamic>* map2 = block {
   final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
   if(self::b)
-    for (final core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   else
     #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
@@ -63,10 +63,10 @@
 static field core::Map<dynamic, dynamic>* map3 = block {
   final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
   if(self::b)
-    for (final core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
   else
-    for (final core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+    for (final has-declared-initializer core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
       #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
 } =>#t5;
 static field core::Map<dynamic, core::int*>* map4 = block {
@@ -91,14 +91,14 @@
     #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
   else
     for (dynamic a in self::list)
-      for (final core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
         #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
 } =>#t10;
 static field core::Map<dynamic, core::int*>* map7 = block {
   final core::Map<dynamic, core::int*>* #t12 = <dynamic, core::int*>{};
   if(self::b)
     for (dynamic a in self::list)
-      for (final core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
         #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
   else
     #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
@@ -125,14 +125,14 @@
     #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
   else
     for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
         #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
 } =>#t16;
 static field core::Map<dynamic, core::int*>* map11 = block {
   final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
   if(self::b)
     for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      for (final core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
         #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
   else
     #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
@@ -143,7 +143,7 @@
     #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int*, core::int*) →* void};
   else
     if(self::b)
-      for (final core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+      for (final has-declared-initializer core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
         #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
 } =>#t20;
 static field core::Map<invalid-type, Null>* error4 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.expect b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.expect
index 5fe44fb..085a8a3 100644
--- a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.expect
@@ -55,29 +55,29 @@
   } =>#t8;
   core::Set<core::int*>* set1 = block {
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t10 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t10 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
     }
-    for (final dynamic #t12 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t12 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t13){(core::int*) →* core::bool*};
     }
     #t9.{core::Set::addAll}{Invariant}(iterableIntSet){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t14 in iterableNumSet1) {
+    for (final has-declared-initializer dynamic #t14 in iterableNumSet1) {
       final core::int* #t15 = #t14 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t15){(core::int*) →* core::bool*};
     }
-    for (final dynamic #t16 in iterableNumSet2) {
+    for (final has-declared-initializer dynamic #t16 in iterableNumSet2) {
       final core::int* #t17 = #t16 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t17){(core::int*) →* core::bool*};
     }
     #t9.{core::Set::addAll}{Invariant}(intSet){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t18 in numSet1) {
+    for (final has-declared-initializer dynamic #t18 in numSet1) {
       final core::int* #t19 = #t18 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t19){(core::int*) →* core::bool*};
     }
-    for (final dynamic #t20 in numSet2) {
+    for (final has-declared-initializer dynamic #t20 in numSet2) {
       final core::int* #t21 = #t20 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t21){(core::int*) →* core::bool*};
     }
@@ -85,11 +85,11 @@
   self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set1);
   core::Set<core::num*>* set2 = block {
     final core::Set<core::num*>* #t22 = col::LinkedHashSet::•<core::num*>();
-    for (final dynamic #t23 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t23 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t24 = #t23 as{TypeError} core::num*;
       #t22.{core::Set::add}{Invariant}(#t24){(core::num*) →* core::bool*};
     }
-    for (final dynamic #t25 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t25 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t26 = #t25 as{TypeError} core::num*;
       #t22.{core::Set::add}{Invariant}(#t26){(core::num*) →* core::bool*};
     }
@@ -105,13 +105,13 @@
     final core::Set<core::int*>* #t27 = col::LinkedHashSet::•<core::int*>();
     final core::Iterable<dynamic>* #t28 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t28 == null))
-      for (final dynamic #t29 in #t28) {
+      for (final has-declared-initializer dynamic #t29 in #t28) {
         final core::int* #t30 = #t29 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t30){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t31 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t31 == null))
-      for (final dynamic #t32 in #t31) {
+      for (final has-declared-initializer dynamic #t32 in #t31) {
         final core::int* #t33 = #t32 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t33){(core::int*) →* core::bool*};
       }
@@ -120,13 +120,13 @@
       #t27.{core::Set::addAll}{Invariant}(#t34){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t35 = iterableNumSet1;
     if(!(#t35 == null))
-      for (final dynamic #t36 in #t35) {
+      for (final has-declared-initializer dynamic #t36 in #t35) {
         final core::int* #t37 = #t36 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t37){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t38 = iterableNumSet2;
     if(!(#t38 == null))
-      for (final dynamic #t39 in #t38) {
+      for (final has-declared-initializer dynamic #t39 in #t38) {
         final core::int* #t40 = #t39 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t40){(core::int*) →* core::bool*};
       }
@@ -135,13 +135,13 @@
       #t27.{core::Set::addAll}{Invariant}(#t41){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t42 = numSet1;
     if(!(#t42 == null))
-      for (final dynamic #t43 in #t42) {
+      for (final has-declared-initializer dynamic #t43 in #t42) {
         final core::int* #t44 = #t43 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t44){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t45 = numSet2;
     if(!(#t45 == null))
-      for (final dynamic #t46 in #t45) {
+      for (final has-declared-initializer dynamic #t46 in #t45) {
         final core::int* #t47 = #t46 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t47){(core::int*) →* core::bool*};
       }
@@ -151,13 +151,13 @@
     final core::Set<core::num*>* #t48 = col::LinkedHashSet::•<core::num*>();
     final core::Iterable<dynamic>* #t49 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t49 == null))
-      for (final dynamic #t50 in #t49) {
+      for (final has-declared-initializer dynamic #t50 in #t49) {
         final core::num* #t51 = #t50 as{TypeError} core::num*;
         #t48.{core::Set::add}{Invariant}(#t51){(core::num*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t52 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t52 == null))
-      for (final dynamic #t53 in #t52) {
+      for (final has-declared-initializer dynamic #t53 in #t52) {
         final core::num* #t54 = #t53 as{TypeError} core::num*;
         #t48.{core::Set::add}{Invariant}(#t54){(core::num*) →* core::bool*};
       }
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.modular.expect
index 5fe44fb..085a8a3 100644
--- a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.modular.expect
@@ -55,29 +55,29 @@
   } =>#t8;
   core::Set<core::int*>* set1 = block {
     final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
-    for (final dynamic #t10 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t10 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t11 = #t10 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
     }
-    for (final dynamic #t12 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t12 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t13 = #t12 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t13){(core::int*) →* core::bool*};
     }
     #t9.{core::Set::addAll}{Invariant}(iterableIntSet){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t14 in iterableNumSet1) {
+    for (final has-declared-initializer dynamic #t14 in iterableNumSet1) {
       final core::int* #t15 = #t14 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t15){(core::int*) →* core::bool*};
     }
-    for (final dynamic #t16 in iterableNumSet2) {
+    for (final has-declared-initializer dynamic #t16 in iterableNumSet2) {
       final core::int* #t17 = #t16 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t17){(core::int*) →* core::bool*};
     }
     #t9.{core::Set::addAll}{Invariant}(intSet){(core::Iterable<core::int*>*) →* void};
-    for (final dynamic #t18 in numSet1) {
+    for (final has-declared-initializer dynamic #t18 in numSet1) {
       final core::int* #t19 = #t18 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t19){(core::int*) →* core::bool*};
     }
-    for (final dynamic #t20 in numSet2) {
+    for (final has-declared-initializer dynamic #t20 in numSet2) {
       final core::int* #t21 = #t20 as{TypeError} core::int*;
       #t9.{core::Set::add}{Invariant}(#t21){(core::int*) →* core::bool*};
     }
@@ -85,11 +85,11 @@
   self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set1);
   core::Set<core::num*>* set2 = block {
     final core::Set<core::num*>* #t22 = col::LinkedHashSet::•<core::num*>();
-    for (final dynamic #t23 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t23 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t24 = #t23 as{TypeError} core::num*;
       #t22.{core::Set::add}{Invariant}(#t24){(core::num*) →* core::bool*};
     }
-    for (final dynamic #t25 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    for (final has-declared-initializer dynamic #t25 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::num* #t26 = #t25 as{TypeError} core::num*;
       #t22.{core::Set::add}{Invariant}(#t26){(core::num*) →* core::bool*};
     }
@@ -105,13 +105,13 @@
     final core::Set<core::int*>* #t27 = col::LinkedHashSet::•<core::int*>();
     final core::Iterable<dynamic>* #t28 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t28 == null))
-      for (final dynamic #t29 in #t28) {
+      for (final has-declared-initializer dynamic #t29 in #t28) {
         final core::int* #t30 = #t29 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t30){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t31 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t31 == null))
-      for (final dynamic #t32 in #t31) {
+      for (final has-declared-initializer dynamic #t32 in #t31) {
         final core::int* #t33 = #t32 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t33){(core::int*) →* core::bool*};
       }
@@ -120,13 +120,13 @@
       #t27.{core::Set::addAll}{Invariant}(#t34){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t35 = iterableNumSet1;
     if(!(#t35 == null))
-      for (final dynamic #t36 in #t35) {
+      for (final has-declared-initializer dynamic #t36 in #t35) {
         final core::int* #t37 = #t36 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t37){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t38 = iterableNumSet2;
     if(!(#t38 == null))
-      for (final dynamic #t39 in #t38) {
+      for (final has-declared-initializer dynamic #t39 in #t38) {
         final core::int* #t40 = #t39 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t40){(core::int*) →* core::bool*};
       }
@@ -135,13 +135,13 @@
       #t27.{core::Set::addAll}{Invariant}(#t41){(core::Iterable<core::int*>*) →* void};
     final core::Iterable<dynamic>* #t42 = numSet1;
     if(!(#t42 == null))
-      for (final dynamic #t43 in #t42) {
+      for (final has-declared-initializer dynamic #t43 in #t42) {
         final core::int* #t44 = #t43 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t44){(core::int*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t45 = numSet2;
     if(!(#t45 == null))
-      for (final dynamic #t46 in #t45) {
+      for (final has-declared-initializer dynamic #t46 in #t45) {
         final core::int* #t47 = #t46 as{TypeError} core::int*;
         #t27.{core::Set::add}{Invariant}(#t47){(core::int*) →* core::bool*};
       }
@@ -151,13 +151,13 @@
     final core::Set<core::num*>* #t48 = col::LinkedHashSet::•<core::num*>();
     final core::Iterable<dynamic>* #t49 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t49 == null))
-      for (final dynamic #t50 in #t49) {
+      for (final has-declared-initializer dynamic #t50 in #t49) {
         final core::num* #t51 = #t50 as{TypeError} core::num*;
         #t48.{core::Set::add}{Invariant}(#t51){(core::num*) →* core::bool*};
       }
     final core::Iterable<dynamic>* #t52 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
     if(!(#t52 == null))
-      for (final dynamic #t53 in #t52) {
+      for (final has-declared-initializer dynamic #t53 in #t52) {
         final core::num* #t54 = #t53 as{TypeError} core::num*;
         #t48.{core::Set::add}{Invariant}(#t54){(core::num*) →* core::bool*};
       }
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.expect b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.expect
index 4037509..502fb30 100644
--- a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.expect
+++ b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.expect
@@ -37,15 +37,15 @@
   } =>#t5;
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t7 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t7 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
       #t6.{core::Set::add}{Invariant}(#t8){(core::int) → core::bool};
     }
-    for (final dynamic #t9 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t9 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::int;
       #t6.{core::Set::add}{Invariant}(#t10){(core::int) → core::bool};
     }
-    for (final dynamic #t11 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t11 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::int;
       #t6.{core::Set::add}{Invariant}(#t12){(core::int) → core::bool};
     }
@@ -55,15 +55,15 @@
   self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::int>}, set1);
   core::Set<core::num> set2 = block {
     final core::Set<core::num> #t13 = col::LinkedHashSet::•<core::num>();
-    for (final dynamic #t14 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t14 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t15 = #t14 as{TypeError,ForNonNullableByDefault} core::num;
       #t13.{core::Set::add}{Invariant}(#t15){(core::num) → core::bool};
     }
-    for (final dynamic #t16 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t16 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t17 = #t16 as{TypeError,ForNonNullableByDefault} core::num;
       #t13.{core::Set::add}{Invariant}(#t17){(core::num) → core::bool};
     }
-    for (final dynamic #t18 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t18 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::num;
       #t13.{core::Set::add}{Invariant}(#t19){(core::num) → core::bool};
     }
@@ -107,19 +107,19 @@
     final core::Set<core::int> #t25 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t26 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t26 == null))
-      for (final dynamic #t27 in #t26{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t27 in #t26{core::Iterable<dynamic>}) {
         final core::int #t28 = #t27 as{TypeError,ForNonNullableByDefault} core::int;
         #t25.{core::Set::add}{Invariant}(#t28){(core::int) → core::bool};
       }
     final core::Iterable<dynamic>? #t29 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t29 == null))
-      for (final dynamic #t30 in #t29{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t30 in #t29{core::Iterable<dynamic>}) {
         final core::int #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::int;
         #t25.{core::Set::add}{Invariant}(#t31){(core::int) → core::bool};
       }
     final core::Iterable<dynamic>? #t32 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t32 == null))
-      for (final dynamic #t33 in #t32{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t33 in #t32{core::Iterable<dynamic>}) {
         final core::int #t34 = #t33 as{TypeError,ForNonNullableByDefault} core::int;
         #t25.{core::Set::add}{Invariant}(#t34){(core::int) → core::bool};
       }
@@ -135,19 +135,19 @@
     final core::Set<core::num> #t37 = col::LinkedHashSet::•<core::num>();
     final core::Iterable<dynamic>? #t38 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t38 == null))
-      for (final dynamic #t39 in #t38{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t39 in #t38{core::Iterable<dynamic>}) {
         final core::num #t40 = #t39 as{TypeError,ForNonNullableByDefault} core::num;
         #t37.{core::Set::add}{Invariant}(#t40){(core::num) → core::bool};
       }
     final core::Iterable<dynamic>? #t41 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t41 == null))
-      for (final dynamic #t42 in #t41{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t42 in #t41{core::Iterable<dynamic>}) {
         final core::num #t43 = #t42 as{TypeError,ForNonNullableByDefault} core::num;
         #t37.{core::Set::add}{Invariant}(#t43){(core::num) → core::bool};
       }
     final core::Iterable<dynamic>? #t44 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t44 == null))
-      for (final dynamic #t45 in #t44{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t45 in #t44{core::Iterable<dynamic>}) {
         final core::num #t46 = #t45 as{TypeError,ForNonNullableByDefault} core::num;
         #t37.{core::Set::add}{Invariant}(#t46){(core::num) → core::bool};
       }
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.modular.expect
index 4037509..502fb30 100644
--- a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.modular.expect
@@ -37,15 +37,15 @@
   } =>#t5;
   core::Set<core::int> set1 = block {
     final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
-    for (final dynamic #t7 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t7 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
       #t6.{core::Set::add}{Invariant}(#t8){(core::int) → core::bool};
     }
-    for (final dynamic #t9 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t9 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::int;
       #t6.{core::Set::add}{Invariant}(#t10){(core::int) → core::bool};
     }
-    for (final dynamic #t11 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t11 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::int #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::int;
       #t6.{core::Set::add}{Invariant}(#t12){(core::int) → core::bool};
     }
@@ -55,15 +55,15 @@
   self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::int>}, set1);
   core::Set<core::num> set2 = block {
     final core::Set<core::num> #t13 = col::LinkedHashSet::•<core::num>();
-    for (final dynamic #t14 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t14 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t15 = #t14 as{TypeError,ForNonNullableByDefault} core::num;
       #t13.{core::Set::add}{Invariant}(#t15){(core::num) → core::bool};
     }
-    for (final dynamic #t16 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t16 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t17 = #t16 as{TypeError,ForNonNullableByDefault} core::num;
       #t13.{core::Set::add}{Invariant}(#t17){(core::num) → core::bool};
     }
-    for (final dynamic #t18 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    for (final has-declared-initializer dynamic #t18 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
       final core::num #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::num;
       #t13.{core::Set::add}{Invariant}(#t19){(core::num) → core::bool};
     }
@@ -107,19 +107,19 @@
     final core::Set<core::int> #t25 = col::LinkedHashSet::•<core::int>();
     final core::Iterable<dynamic>? #t26 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t26 == null))
-      for (final dynamic #t27 in #t26{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t27 in #t26{core::Iterable<dynamic>}) {
         final core::int #t28 = #t27 as{TypeError,ForNonNullableByDefault} core::int;
         #t25.{core::Set::add}{Invariant}(#t28){(core::int) → core::bool};
       }
     final core::Iterable<dynamic>? #t29 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t29 == null))
-      for (final dynamic #t30 in #t29{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t30 in #t29{core::Iterable<dynamic>}) {
         final core::int #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::int;
         #t25.{core::Set::add}{Invariant}(#t31){(core::int) → core::bool};
       }
     final core::Iterable<dynamic>? #t32 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t32 == null))
-      for (final dynamic #t33 in #t32{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t33 in #t32{core::Iterable<dynamic>}) {
         final core::int #t34 = #t33 as{TypeError,ForNonNullableByDefault} core::int;
         #t25.{core::Set::add}{Invariant}(#t34){(core::int) → core::bool};
       }
@@ -135,19 +135,19 @@
     final core::Set<core::num> #t37 = col::LinkedHashSet::•<core::num>();
     final core::Iterable<dynamic>? #t38 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t38 == null))
-      for (final dynamic #t39 in #t38{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t39 in #t38{core::Iterable<dynamic>}) {
         final core::num #t40 = #t39 as{TypeError,ForNonNullableByDefault} core::num;
         #t37.{core::Set::add}{Invariant}(#t40){(core::num) → core::bool};
       }
     final core::Iterable<dynamic>? #t41 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t41 == null))
-      for (final dynamic #t42 in #t41{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t42 in #t41{core::Iterable<dynamic>}) {
         final core::num #t43 = #t42 as{TypeError,ForNonNullableByDefault} core::num;
         #t37.{core::Set::add}{Invariant}(#t43){(core::num) → core::bool};
       }
     final core::Iterable<dynamic>? #t44 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
     if(!(#t44 == null))
-      for (final dynamic #t45 in #t44{core::Iterable<dynamic>}) {
+      for (final has-declared-initializer dynamic #t45 in #t44{core::Iterable<dynamic>}) {
         final core::num #t46 = #t45 as{TypeError,ForNonNullableByDefault} core::num;
         #t37.{core::Set::add}{Invariant}(#t46){(core::num) → core::bool};
       }
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index b3f1a41..2bffc62 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 77;
+  UInt32 formatVersion = 78;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -1390,8 +1390,9 @@
 
   List<Expression> annotations;
 
-  Byte flags (isFinal, isConst, isInitializingFormal, isCovariantByDeclaration,
-              isCovariantByClass, isLate, isRequired, isLowered);
+  UInt flags (isFinal, isConst, hasDeclaredInitializer, isInitializingFormal,
+              isCovariantByClass, isLate, isRequired, isCovariantByDeclaration,
+              isLowered);
   // For named parameters, this is the parameter name.
   // For other variables, the name is cosmetic, may be empty,
   // and is not necessarily unique.
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 64e0e20..6ef2967 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -10275,7 +10275,8 @@
       bool isCovariantByDeclaration: false,
       bool isLate: false,
       bool isRequired: false,
-      bool isLowered: false}) {
+      bool isLowered: false,
+      bool hasDeclaredInitializer: false}) {
     // ignore: unnecessary_null_comparison
     assert(type != null);
     initializer?.parent = this;
@@ -10289,6 +10290,7 @@
       this.isLate = isLate;
       this.isRequired = isRequired;
       this.isLowered = isLowered;
+      this.hasDeclaredInitializer = hasDeclaredInitializer;
     }
   }
 
@@ -10310,16 +10312,18 @@
     this.isLate = isLate;
     this.isRequired = isRequired;
     this.isLowered = isLowered;
+    this.hasDeclaredInitializer = true;
   }
 
   static const int FlagFinal = 1 << 0; // Must match serialized bit positions.
   static const int FlagConst = 1 << 1;
-  static const int FlagInitializingFormal = 1 << 2;
-  static const int FlagCovariantByDeclaration = 1 << 3;
+  static const int FlagHasDeclaredInitializer = 1 << 2;
+  static const int FlagInitializingFormal = 1 << 3;
   static const int FlagCovariantByClass = 1 << 4;
   static const int FlagLate = 1 << 5;
   static const int FlagRequired = 1 << 6;
-  static const int FlagLowered = 1 << 7;
+  static const int FlagCovariantByDeclaration = 1 << 7;
+  static const int FlagLowered = 1 << 8;
 
   bool get isFinal => flags & FlagFinal != 0;
   bool get isConst => flags & FlagConst != 0;
@@ -10364,6 +10368,15 @@
   /// members and encoding of late locals.
   bool get isLowered => flags & FlagLowered != 0;
 
+  /// Whether the variable has an initializer, either by declaration or copied
+  /// from an original declaration.
+  ///
+  /// Note that the variable might have a synthesized initializer expression,
+  /// so `hasDeclaredInitializer == false` doesn't imply `initializer == null`.
+  /// For instance, for duplicate variable names, an invalid expression is set
+  /// as the initializer of the second variable.
+  bool get hasDeclaredInitializer => flags & FlagHasDeclaredInitializer != 0;
+
   /// Whether the variable is assignable.
   ///
   /// This is `true` if the variable is neither constant nor final, or if it
@@ -10416,6 +10429,12 @@
     flags = value ? (flags | FlagLowered) : (flags & ~FlagLowered);
   }
 
+  void set hasDeclaredInitializer(bool value) {
+    flags = value
+        ? (flags | FlagHasDeclaredInitializer)
+        : (flags & ~FlagHasDeclaredInitializer);
+  }
+
   void clearAnnotations() {
     annotations = const <Expression>[];
   }
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 8952e40..b6bbf7b 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -3210,7 +3210,7 @@
     // The [VariableDeclaration] instance is not created at this point yet,
     // so `null` is temporarily set as the parent of the annotation nodes.
     List<Expression> annotations = readAnnotationList(null);
-    int flags = readByte();
+    int flags = readUInt30();
     VariableDeclaration node = new VariableDeclaration(
         readStringOrNullIfEmpty(),
         type: readDartType(),
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 32995cb..ce11597 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -2260,7 +2260,7 @@
     writeOffset(node.fileOffset);
     writeOffset(node.fileEqualsOffset);
     writeAnnotationList(node.annotations);
-    writeByte(node.flags);
+    writeUInt30(node.flags);
     writeStringReference(node.name ?? '');
     writeNode(node.type);
     writeOptionalNode(node.initializer);
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 39dbd8c..e19e36c 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -176,7 +176,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 77;
+  static const int BinaryFormatVersion = 78;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 46969af..542324e 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -2452,6 +2452,17 @@
     writeModifier(node.isCovariantByClass, 'covariant-by-class');
     writeModifier(node.isFinal, 'final');
     writeModifier(node.isConst, 'const');
+    bool hasImplicitInitializer = node.initializer is NullLiteral ||
+        (node.initializer is ConstantExpression &&
+            (node.initializer as ConstantExpression).constant is NullConstant);
+    if ((node.initializer == null || hasImplicitInitializer) &&
+        node.hasDeclaredInitializer) {
+      writeModifier(node.hasDeclaredInitializer, 'has-declared-initializer');
+    } else if (node.initializer != null &&
+        !hasImplicitInitializer &&
+        !node.hasDeclaredInitializer) {
+      writeModifier(node.hasDeclaredInitializer, 'has-no-declared-initializer');
+    }
     // ignore: unnecessary_null_comparison
     if (node.type != null) {
       writeAnnotatedType(node.type, annotator?.annotateVariable(this, node));
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index b4b62b7..9aa5e0e 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -1257,6 +1257,7 @@
   VariableDeclaration.FlagLate: "late",
   VariableDeclaration.FlagRequired: "required",
   VariableDeclaration.FlagLowered: "lowered",
+  VariableDeclaration.FlagHasDeclaredInitializer: "has-declared-initializer",
 };
 
 class VariableDeclarationFlagTagger implements Tagger<int> {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.expect
index 15faad67..a847dd1 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_default.dart.expect
@@ -4,7 +4,7 @@
 import "file:pkg/vm/testcases/transformations/type_flow/transformer/const_default.lib.dart";
 
 static method main() → dynamic {
-  dynamic dyn = null;
+  has-declared-initializer dynamic dyn = null;
 }
 library const_default.lib.dart /*isNonNullableByDefault*/;
 import self as self;
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index a94761c..6026870 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -1011,7 +1011,7 @@
       if (++next_read_ == field) return;
       FALL_THROUGH;
     case kFlags:
-      flags_ = helper_->ReadFlags();
+      flags_ = helper_->ReadUInt();
       if (++next_read_ == field) return;
       FALL_THROUGH;
     case kNameIndex:
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index 4016697..046f874 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -414,11 +414,12 @@
   enum Flag {
     kFinal = 1 << 0,
     kConst = 1 << 1,
-    kCovariant = 1 << 3,
+    kHasDeclaredInitializer = 1 << 2,
     kIsGenericCovariantImpl = 1 << 4,
     kLate = 1 << 5,
     kRequired = 1 << 6,
-    kLowered = 1 << 7,
+    kCovariant = 1 << 7,
+    kLowered = 1 << 8,
   };
 
   explicit VariableDeclarationHelper(KernelReaderHelper* helper)
@@ -438,6 +439,9 @@
   bool IsCovariant() const { return (flags_ & kCovariant) != 0; }
   bool IsLate() const { return (flags_ & kLate) != 0; }
   bool IsRequired() const { return (flags_ & kRequired) != 0; }
+  bool HasDeclaredInitializer() const {
+    return (flags_ & kHasDeclaredInitializer) != 0;
+  }
 
   bool IsGenericCovariantImpl() const {
     return (flags_ & kIsGenericCovariantImpl) != 0;
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index dc6050c..7055a02 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -44,7 +44,7 @@
   V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x2359f8d2)              \
   V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38c6295a)          \
   V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5ce9025b)              \
-  V(ByteData, ., ByteDataFactory, 0x8a8b07a8)                                  \
+  V(ByteData, ., ByteDataFactory, 0x91f05424)                                  \
   V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0x60cef22c)   \
   V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0xb9d15ffa)          \
   V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0x60cef22c) \
@@ -81,8 +81,8 @@
   V(Float64x2List, ., TypedData_Float64x2Array_factory, 0xeccaff6a)            \
   V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x00fc4650)                 \
   V(::, copyRangeFromUint8ListToOneByteString,                                 \
-    CopyRangeFromUint8ListToOneByteString, 0x0df019c5)                         \
-  V(_StringBase, _interpolate, StringBaseInterpolate, 0xfc28bc84)              \
+    CopyRangeFromUint8ListToOneByteString, 0x19a1bf41)                         \
+  V(_StringBase, _interpolate, StringBaseInterpolate, 0x7da2a580)              \
   V(_IntegerImplementation, toDouble, IntegerToDouble, 0x97728b46)             \
   V(_Double, _add, DoubleAdd, 0xea666327)                                      \
   V(_Double, _sub, DoubleSub, 0x28474c2e)                                      \
@@ -96,10 +96,10 @@
   V(_Double, roundToDouble, DoubleRoundToDouble, 0x5649ca00)                   \
   V(_Double, toInt, DoubleToInteger, 0x676f20a9)                               \
   V(_Double, truncateToDouble, DoubleTruncateToDouble, 0x62d48659)             \
-  V(::, min, MathMin, 0x504a28df)                                              \
-  V(::, max, MathMax, 0xead7161a)                                              \
+  V(::, min, MathMin, 0xc2021a5b)                                              \
+  V(::, max, MathMax, 0xe45b2596)                                              \
   V(::, _doublePow, MathDoublePow, 0x989f3334)                                 \
-  V(::, _intPow, MathIntPow, 0x68b6021e)                                       \
+  V(::, _intPow, MathIntPow, 0xb9afc09a)                                       \
   V(::, _sin, MathSin, 0x17daca03)                                             \
   V(::, _cos, MathCos, 0xf4947d45)                                             \
   V(::, _tan, MathTan, 0xeb1a5537)                                             \
@@ -261,10 +261,10 @@
   V(::, _asExternalTypedDataDouble, FfiAsExternalTypedDataDouble, 0x40cdd9e1)  \
   V(::, _getNativeField, GetNativeField, 0xa0139b85)                           \
   V(::, reachabilityFence, ReachabilityFence, 0x730f2b7f)                      \
-  V(::, _asyncThenWrapperHelper, AsyncThenWrapperHelper, 0xd9974c34)           \
-  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x037e7601)                          \
-  V(_Future, timeout, FutureTimeout, 0x73041520)                               \
-  V(Future, wait, FutureWait, 0x495c83cd)                                      \
+  V(::, _asyncThenWrapperHelper, AsyncThenWrapperHelper, 0x0c17f838)           \
+  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0xf296c901)                          \
+  V(_Future, timeout, FutureTimeout, 0xa7cb3294)                               \
+  V(Future, wait, FutureWait, 0xb0b596bd)                                      \
   V(_RootZone, runUnary, RootZoneRunUnary, 0xb607f8bf)                         \
   V(_FutureListener, handleValue, FutureListenerHandleValue, 0x438115a8)       \
   V(::, has63BitSmis, Has63BitSmis, 0xf61b56f1)                                \
@@ -273,15 +273,15 @@
 // (class-name, function-name, intrinsification method, fingerprint).
 #define CORE_LIB_INTRINSIC_LIST(V)                                             \
   V(_Smi, get:bitLength, Smi_bitLength, 0x7ab50ceb)                            \
-  V(_BigIntImpl, _lsh, Bigint_lsh, 0x5de6ab16)                                 \
-  V(_BigIntImpl, _rsh, Bigint_rsh, 0xa8090d4f)                                 \
-  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0xdc2a8a75)                           \
-  V(_BigIntImpl, _absSub, Bigint_absSub, 0x23653a4f)                           \
-  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0x08fc5919)                           \
-  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xd1b6bf41)                           \
+  V(_BigIntImpl, _lsh, Bigint_lsh, 0x7a954122)                                 \
+  V(_BigIntImpl, _rsh, Bigint_rsh, 0xb1f1cc5f)                                 \
+  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x967b4d71)                           \
+  V(_BigIntImpl, _absSub, Bigint_absSub, 0x1cb6b94b)                           \
+  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xdc3298bd)                           \
+  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0x6936f745)                           \
   V(_BigIntImpl, _estimateQuotientDigit, Bigint_estimateQuotientDigit,         \
-    0x3b2a5ba4)                                                                \
-  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0xc1c66bf4)        \
+    0xa5ad65a8)                                                                \
+  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x9bcfdaf4)        \
   V(_Double, >, Double_greaterThan, 0x9872cc67)                                \
   V(_Double, >=, Double_greaterEqualThan, 0xfecba6b3)                          \
   V(_Double, <, Double_lessThan, 0xf07a87d4)                                   \
@@ -306,7 +306,7 @@
   V(_StringBase, get:hashCode, String_getHashCode, 0x75e0d454)                 \
   V(_StringBase, get:_identityHashCode, String_identityHash, 0x47a56912)       \
   V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xfecd3cf3)                   \
-  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0x87094a2a)    \
+  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0x74e77732)    \
   V(_StringBase, [], StringBaseCharAt, 0xd06fc6bf)                             \
   V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x75e0d454)       \
   V(_OneByteString, _substringUncheckedNative,                                 \
@@ -473,14 +473,14 @@
 //  result-cid, fingerprint).
 #define RECOGNIZED_LIST_FACTORY_LIST(V)                                        \
   V(_ListFactory, _List, ., kArrayCid, 0xd693eee6)                             \
-  V(_ListFilledFactory, _List, .filled, kArrayCid, 0x7f29060d)                 \
-  V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x95feb438)             \
+  V(_ListFilledFactory, _List, .filled, kArrayCid, 0x7ffc3415)                 \
+  V(_ListGenerateFactory, _List, .generate, kArrayCid, 0xc85f10b8)             \
   V(_GrowableListFactory, _GrowableList, ., kGrowableObjectArrayCid,           \
-    0xc1b55e71)                                                                \
+    0x3bff5c79)                                                                \
   V(_GrowableListFilledFactory, _GrowableList, .filled,                        \
-    kGrowableObjectArrayCid, 0x37d0dc65)                                       \
+    kGrowableObjectArrayCid, 0x38a40a6d)                                       \
   V(_GrowableListGenerateFactory, _GrowableList, .generate,                    \
-    kGrowableObjectArrayCid, 0x52f61890)                                       \
+    kGrowableObjectArrayCid, 0x85567510)                                       \
   V(_GrowableListWithData, _GrowableList, ._withData, kGrowableObjectArrayCid, \
     0xa32d060b)                                                                \
   V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x660dd888)        \
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 0efa27f..4c6a11f 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 77;
-static const uint32_t kMaxSupportedKernelFormatVersion = 77;
+static const uint32_t kMinSupportedKernelFormatVersion = 78;
+static const uint32_t kMaxSupportedKernelFormatVersion = 78;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/tools/VERSION b/tools/VERSION
index 1aa8a5e..f29c189 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 280
+PRERELEASE 281
 PRERELEASE_PATCH 0
\ No newline at end of file