[cfe] Fix pre-inference set/map disambiguation

Closes #36377

Bug: http://dartbug.com/36377
Change-Id: I0a486f467bdc999e6188fb3206f4eed1d8ffb67a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98341
Reviewed-by: Aske Simon Christensen <askesc@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index c9f502a..c06c8c6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -2456,7 +2456,7 @@
         if (entry is MapEntry) {
           // TODO(danrubel): report the error on the colon
           addProblem(fasta.templateExpectedButGot.withArguments(','),
-              entry.value.fileOffset - 1, 1);
+              entry.fileOffset, 1);
         } else {
           // TODO(danrubel): Revise once control flow and spread
           //  collection entries are supported.
@@ -2518,6 +2518,13 @@
     final typeArgCount = typeArguments?.length;
     bool isSet = typeArgCount == 1 ? true : typeArgCount != null ? false : null;
 
+    for (int i = 0; i < setOrMapEntries.length; ++i) {
+      if (setOrMapEntries[i] is! MapEntry &&
+          !isConvertibleToMapEntry(setOrMapEntries[i])) {
+        hasSetEntry = true;
+      }
+    }
+
     // TODO(danrubel): If the type arguments are not known (null) then
     // defer set/map determination until after type resolution as per the
     // unified collection spec: https://github.com/dart-lang/language/pull/200
@@ -2527,7 +2534,15 @@
     if (isSet) {
       buildLiteralSet(typeArguments, constKeyword, leftBrace, setOrMapEntries);
     } else {
-      buildLiteralMap(typeArguments, constKeyword, leftBrace, setOrMapEntries);
+      List<MapEntry> mapEntries = new List<MapEntry>(setOrMapEntries.length);
+      for (int i = 0; i < setOrMapEntries.length; ++i) {
+        if (setOrMapEntries[i] is MapEntry) {
+          mapEntries[i] = setOrMapEntries[i];
+        } else {
+          mapEntries[i] = convertToMapEntry(setOrMapEntries[i]);
+        }
+      }
+      buildLiteralMap(typeArguments, constKeyword, leftBrace, mapEntries);
     }
   }
 
@@ -2551,10 +2566,26 @@
     push(forest.literalNull(token));
   }
 
+  bool isConvertibleToMapEntry(Expression element) {
+    if (element is SpreadElement) return true;
+    if (element is IfElement) {
+      return isConvertibleToMapEntry(element.then) &&
+          (element.otherwise == null ||
+              isConvertibleToMapEntry(element.otherwise));
+    }
+    if (element is ForElement) {
+      return isConvertibleToMapEntry(element.body);
+    }
+    if (element is ForInElement) {
+      return isConvertibleToMapEntry(element.body);
+    }
+    return false;
+  }
+
   MapEntry convertToMapEntry(Expression element) {
     if (element is SpreadElement) {
       return new SpreadMapEntry(element.expression, element.isNullAware)
-        ..fileOffset = element.fileOffset;
+        ..fileOffset = element.expression.fileOffset;
     }
     if (element is IfElement) {
       return new IfMapEntry(
@@ -2586,7 +2617,7 @@
   }
 
   void buildLiteralMap(List<UnresolvedType<KernelTypeBuilder>> typeArguments,
-      Token constKeyword, Token leftBrace, List<dynamic> setOrMapEntries) {
+      Token constKeyword, Token leftBrace, List<MapEntry> entries) {
     DartType keyType;
     DartType valueType;
     if (typeArguments != null) {
@@ -2607,17 +2638,6 @@
       valueType = implicitTypeArgument;
     }
 
-    List<MapEntry> entries = <MapEntry>[];
-    if (setOrMapEntries != null) {
-      for (var entry in setOrMapEntries) {
-        if (entry is MapEntry) {
-          entries.add(entry);
-        } else {
-          entries.add(convertToMapEntry(entry));
-        }
-      }
-    }
-
     Expression node = forest.literalMap(
         constKeyword,
         constKeyword != null || constantContext == ConstantContext.inferred,
diff --git a/pkg/front_end/testcases/control_flow_collection_inference.dart.type_promotion.expect b/pkg/front_end/testcases/control_flow_collection_inference.dart.type_promotion.expect
index bad3fdc..1ac72fb 100644
--- a/pkg/front_end/testcases/control_flow_collection_inference.dart.type_promotion.expect
+++ b/pkg/front_end/testcases/control_flow_collection_inference.dart.type_promotion.expect
@@ -1,288 +1,288 @@
-pkg/front_end/testcases/control_flow_collection_inference.dart:106:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:106:49: Context: Write to i@6094
   var list10 = [for (int i = 0; oracle("foo"); i++) 42];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:107:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:107:48: Context: Write to i@6094
   var set10 = {for (int i = 0; oracle("foo"); i++) 42, null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:108:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:108:48: Context: Write to i@6094
   var map10 = {for (int i = 0; oracle("foo"); i++) "bar": 42, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:109:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:109:49: Context: Write to i@6094
   var list11 = [for (int i = 0; oracle("foo"); i++) dynVar];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:110:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:110:48: Context: Write to i@6094
   var set11 = {for (int i = 0; oracle("foo"); i++) dynVar, null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:111:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:111:48: Context: Write to i@6094
   var map11 = {for (int i = 0; oracle("foo"); i++) "bar": dynVar, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:112:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:112:49: Context: Write to i@6094
   var list12 = [for (int i = 0; oracle("foo"); i++) [42]];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:113:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:113:48: Context: Write to i@6094
   var set12 = {for (int i = 0; oracle("foo"); i++) [42], null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:114:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:114:48: Context: Write to i@6094
   var map12 = {for (int i = 0; oracle("foo"); i++) "bar": [42], "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:115:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:115:49: Context: Write to i@6094
   var list20 = [for (int i = 0; oracle("foo"); i++) ...[42]];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:116:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:116:48: Context: Write to i@6094
   var set20 = {for (int i = 0; oracle("foo"); i++) ...[42], null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:117:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:117:48: Context: Write to i@6094
   var map20 = {for (int i = 0; oracle("foo"); i++) ...{"bar": 42}, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:118:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:118:49: Context: Write to i@6094
   var list21 = [for (int i = 0; oracle("foo"); i++) ...[dynVar]];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:119:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:119:48: Context: Write to i@6094
   var set21 = {for (int i = 0; oracle("foo"); i++) ...[dynVar], null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:120:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:120:48: Context: Write to i@6094
   var map21 = {for (int i = 0; oracle("foo"); i++) ...{"bar": dynVar}, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:121:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:121:49: Context: Write to i@6094
   var list22 = [for (int i = 0; oracle("foo"); i++) ...[[42]]];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:122:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:122:48: Context: Write to i@6094
   var set22 = {for (int i = 0; oracle("foo"); i++) ...[[42]], null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:123:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:123:48: Context: Write to i@6094
   var map22 = {for (int i = 0; oracle("foo"); i++) ...{"bar": [42]}, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:124:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:124:49: Context: Write to i@6094
   var list30 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[42]];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:125:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:125:48: Context: Write to i@6094
   var set30 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[42], null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:126:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:126:48: Context: Write to i@6094
   var map30 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": 42}, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:127:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:127:49: Context: Write to i@6094
   var list31 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[dynVar]];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:128:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:128:48: Context: Write to i@6094
   var set31 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[dynVar], null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:129:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:129:48: Context: Write to i@6094
   var map31 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": dynVar}, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:130:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:130:49: Context: Write to i@6094
   var list33 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[42]]];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:131:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:131:48: Context: Write to i@6094
   var set33 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[42]], null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:132:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:132:48: Context: Write to i@6094
   var map33 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": [42]}, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:133:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:133:61: Context: Write to i@6094
   List<List<int>> list40 = [for (int i = 0; oracle("foo"); i++) ...[[]]];
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:134:59: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:134:59: Context: Write to i@6094
   Set<List<int>> set40 = {for (int i = 0; oracle("foo"); i++) ...[[]], null};
                                                           ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:135:67: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:135:67: Context: Write to i@6094
   Map<String, List<int>> map40 = {for (int i = 0; oracle("foo"); i++) ...{"bar": []}, "baz": null};
                                                                   ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:136:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:136:61: Context: Write to i@6094
   List<List<int>> list41 = [for (int i = 0; oracle("foo"); i++) ...{[]}];
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:137:59: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:137:59: Context: Write to i@6094
   Set<List<int>> set41 = {for (int i = 0; oracle("foo"); i++) ...{[]}, null};
                                                           ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:138:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:138:61: Context: Write to i@6094
   List<List<int>> list42 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]]];
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:139:59: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:139:59: Context: Write to i@6094
   Set<List<int>> set42 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]], null};
                                                           ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:140:67: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:140:67: Context: Write to i@6094
   Map<String, List<int>> map42 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": []}, "baz": null};
                                                                   ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:141:55: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:141:55: Context: Write to i@6094
   List<int> list50 = [for (int i = 0; oracle("foo"); i++) ...[]];
                                                       ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:142:53: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:142:53: Context: Write to i@6094
   Set<int> set50 = {for (int i = 0; oracle("foo"); i++) ...[], null};
                                                     ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:143:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:143:61: Context: Write to i@6094
   Map<String, int> map50 = {for (int i = 0; oracle("foo"); i++) ...{}, "baz": null};
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:144:55: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:144:55: Context: Write to i@6094
   List<int> list51 = [for (int i = 0; oracle("foo"); i++) ...{}];
                                                       ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:145:53: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:145:53: Context: Write to i@6094
   Set<int> set51 = {for (int i = 0; oracle("foo"); i++) ...{}, null};
                                                     ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:146:55: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:146:55: Context: Write to i@6094
   List<int> list52 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[]];
                                                       ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:147:53: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:147:53: Context: Write to i@6094
   Set<int> set52 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[], null};
                                                     ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:148:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:148:61: Context: Write to i@6094
   List<List<int>> list60 = [for (int i = 0; oracle("foo"); i++) ...[[]]];
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:149:59: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:149:59: Context: Write to i@6094
   Set<List<int>> set60 = {for (int i = 0; oracle("foo"); i++) ...[[]], null};
                                                           ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:150:67: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:150:67: Context: Write to i@6094
   Map<String, List<int>> map60 = {for (int i = 0; oracle("foo"); i++) ...{"bar": []}, "baz": null};
                                                                   ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:151:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:151:61: Context: Write to i@6094
   List<List<int>> list61 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]]];
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:152:59: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:152:59: Context: Write to i@6094
   Set<List<int>> set61 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]], null};
                                                           ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:153:67: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:153:67: Context: Write to i@6094
   Map<String, List<int>> map61 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": []}, "baz": null};
                                                                   ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:154:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:154:61: Context: Write to i@6094
   List<List<int>> list70 = [for (int i = 0; oracle("foo"); i++) []];
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:155:59: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:155:59: Context: Write to i@6094
   Set<List<int>> set70 = {for (int i = 0; oracle("foo"); i++) [], null};
                                                           ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:156:67: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:156:67: Context: Write to i@6094
   Map<String, List<int>> map70 = {for (int i = 0; oracle("foo"); i++) "bar": [], "baz": null};
                                                                   ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:157:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:157:61: Context: Write to i@6094
   List<List<int>> list71 = [for (int i = 0; oracle("foo"); i++) if (oracle()) []];
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:158:59: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:158:59: Context: Write to i@6094
   Set<List<int>> set71 = {for (int i = 0; oracle("foo"); i++) if (oracle()) [], null};
                                                           ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:159:67: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:159:67: Context: Write to i@6094
   Map<String, List<int>> map71 = {for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": [], "baz": null};
                                                                   ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:160:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:160:49: Context: Write to i@6094
   var list80 = [for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:161:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:161:48: Context: Write to i@6094
   var set80 = {for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:162:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:162:48: Context: Write to i@6094
   var map80 = {for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:163:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:163:49: Context: Write to i@6094
   var list81 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...listDouble];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:164:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:164:48: Context: Write to i@6094
   var set81 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...listDouble, null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:165:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:165:48: Context: Write to i@6094
   var map81 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else ...mapStringDouble, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:166:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:166:49: Context: Write to i@6094
   var list82 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...dynVar];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:167:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:167:48: Context: Write to i@6094
   var set82 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...dynVar, null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:168:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:168:48: Context: Write to i@6094
   var map82 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else ...dynVar, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:169:49: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:169:49: Context: Write to i@6094
   var list83 = [for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...listDouble];
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:170:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:170:48: Context: Write to i@6094
   var set83 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else 3.14, null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:171:48: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:171:48: Context: Write to i@6094
   var map83 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else "bar": 3.14, "baz": null};
                                                ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:172:55: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:172:55: Context: Write to i@6094
   List<int> list90 = [for (int i = 0; oracle("foo"); i++) dynVar];
                                                       ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:173:53: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:173:53: Context: Write to i@6094
   Set<int> set90 = {for (int i = 0; oracle("foo"); i++) dynVar, null};
                                                     ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:174:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:174:61: Context: Write to i@6094
   Map<String, int> map90 = {for (int i = 0; oracle("foo"); i++) "bar": dynVar, "baz": null};
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:175:55: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:175:55: Context: Write to i@6094
   List<int> list91 = [for (int i = 0; oracle("foo"); i++) ...dynVar];
                                                       ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:176:53: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:176:53: Context: Write to i@6094
   Set<int> set91 = {for (int i = 0; oracle("foo"); i++) ...dynVar, null};
                                                     ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:177:61: Context: Write to i@6069
+pkg/front_end/testcases/control_flow_collection_inference.dart:177:61: Context: Write to i@6094
   Map<String, int> map91 = {for (int i = 0; oracle("foo"); i++) ...dynVar, "baz": null};
                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:178:40: Context: Write to index@5967
+pkg/front_end/testcases/control_flow_collection_inference.dart:178:40: Context: Write to index@5992
   List<int> list100 = <int>[for (index = 0; oracle("foo"); index++) 42];
                                        ^
-pkg/front_end/testcases/control_flow_collection_inference.dart:178:65: Context: Write to index@5967
+pkg/front_end/testcases/control_flow_collection_inference.dart:178:65: Context: Write to index@5992
   List<int> list100 = <int>[for (index = 0; oracle("foo"); index++) 42];
                                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:179:38: Context: Write to index@5967
+pkg/front_end/testcases/control_flow_collection_inference.dart:179:38: Context: Write to index@5992
   Set<int> set100 = <int>{for (index = 0; oracle("foo"); index++) 42};
                                      ^
-pkg/front_end/testcases/control_flow_collection_inference.dart:179:63: Context: Write to index@5967
+pkg/front_end/testcases/control_flow_collection_inference.dart:179:63: Context: Write to index@5992
   Set<int> set100 = <int>{for (index = 0; oracle("foo"); index++) 42};
                                                               ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:180:53: Context: Write to index@5967
-  Map<String, int> map100 = <String int>{for (index = 0; oracle("foo"); index++) "bar": 42};
-                                                    ^
-pkg/front_end/testcases/control_flow_collection_inference.dart:180:78: Context: Write to index@5967
-  Map<String, int> map100 = <String int>{for (index = 0; oracle("foo"); index++) "bar": 42};
-                                                                             ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:190:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:180:54: Context: Write to index@5992
+  Map<String, int> map100 = <String, int>{for (index = 0; oracle("foo"); index++) "bar": 42};
+                                                     ^
+pkg/front_end/testcases/control_flow_collection_inference.dart:180:79: Context: Write to index@5992
+  Map<String, int> map100 = <String, int>{for (index = 0; oracle("foo"); index++) "bar": 42};
+                                                                              ^^
+pkg/front_end/testcases/control_flow_collection_inference.dart:190:41: Context: Write to i@12696
   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:191:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:191:41: Context: Write to i@12696
   <int>{for (int i = 0; oracle("foo"); i++) "bar", null};
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:192:46: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:192:46: Context: Write to i@12696
   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
                                              ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:193:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:193:41: Context: Write to i@12696
   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:194:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:194:41: Context: Write to i@12696
   <int>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:195:46: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:195:46: Context: Write to i@12696
   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
                                              ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:196:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:196:41: Context: Write to i@12696
   <int>[for (int i = 0; oracle("foo"); i++) ...map];
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:197:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:197:41: Context: Write to i@12696
   <int>{for (int i = 0; oracle("foo"); i++) ...map, null};
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:198:46: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:198:46: Context: Write to i@12696
   <int, int>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
                                              ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:199:44: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:199:44: Context: Write to i@12696
   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
                                            ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:200:44: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:200:44: Context: Write to i@12696
   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
                                            ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:201:52: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:201:52: Context: Write to i@12696
   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
                                                    ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:202:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:202:41: Context: Write to i@12696
   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:203:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:203:41: Context: Write to i@12696
   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:204:49: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:204:49: Context: Write to i@12696
   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
                                                 ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:205:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:205:41: Context: Write to i@12696
   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:206:41: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:206:41: Context: Write to i@12696
   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
                                         ^^
-pkg/front_end/testcases/control_flow_collection_inference.dart:207:49: Context: Write to i@12670
+pkg/front_end/testcases/control_flow_collection_inference.dart:207:49: Context: Write to i@12696
   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
                                                 ^^
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect b/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect
index 0d3a9fb..7599faa 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect
@@ -103,9 +103,9 @@
 //     {... null, ... /*@typeArgs=dynamic*/
 //          ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:127:6: Error: Expected ',' before this.
+// pkg/front_end/testcases/spread_collection_inference.dart:127:10: Error: Expected ',' before this.
 //     {... null, ... /*@typeArgs=dynamic*/
-//      ^
+//          ^
 //
 // pkg/front_end/testcases/spread_collection_inference.dart:131:5: Error: Can't spread a value with static type Null.
 //     null};
@@ -336,9 +336,9 @@
                              ^" as{TypeError} core::int) in #t68;
   core::Set<dynamic> set71ambiguous = block {
     final core::Set<dynamic> #t70 = col::LinkedHashSet::•<dynamic>();
-    #t70.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:127:6: Error: Expected ',' before this.
+    #t70.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:127:10: Error: Expected ',' before this.
     {... null, ... /*@typeArgs=dynamic*/
-     ^");
+         ^");
     for (final dynamic #t71 in <dynamic>[]) {
       final dynamic #t72 = #t71 as{TypeError} dynamic;
       #t70.{core::Set::add}(#t72);
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/spread_collection_inference.dart.strong.transformed.expect
index 8be62ab..3262225 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.strong.transformed.expect
@@ -103,9 +103,9 @@
 //     {... null, ... /*@typeArgs=dynamic*/
 //          ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:127:6: Error: Expected ',' before this.
+// pkg/front_end/testcases/spread_collection_inference.dart:127:10: Error: Expected ',' before this.
 //     {... null, ... /*@typeArgs=dynamic*/
-//      ^
+//          ^
 //
 // pkg/front_end/testcases/spread_collection_inference.dart:131:5: Error: Can't spread a value with static type Null.
 //     null};
@@ -336,9 +336,9 @@
                              ^" as{TypeError} core::int) in #t68;
   core::Set<dynamic> set71ambiguous = block {
     final core::Set<dynamic> #t70 = col::LinkedHashSet::•<dynamic>();
-    #t70.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:127:6: Error: Expected ',' before this.
+    #t70.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:127:10: Error: Expected ',' before this.
     {... null, ... /*@typeArgs=dynamic*/
-     ^");
+         ^");
     for (final dynamic #t71 in <dynamic>[]) {
       final dynamic #t72 = #t71 as{TypeError} dynamic;
       #t70.{core::Set::add}(#t72);