Revert "[cfe] Disambiguate between sets and maps with spreads"

This reverts commit b817b274c2f9ef1f3232f95aa15efbec9f6b3b80.

Reason for revert: very red bots, gardener not going to blindly approve all redness

Original change's description:
> [cfe] Disambiguate between sets and maps with spreads
> 
> Change-Id: I8da95178d0864dd0d59232a902cdb142be7f135e
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/95649
> Reviewed-by: Kevin Millikin <kmillikin@google.com>

TBR=dmitryas@google.com,askesc@google.com,kmillikin@google.com

Change-Id: I008c42a5b50da98af32c923b233130920fdb2546
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96127
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index c12729c..a47e394 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -520,28 +520,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeCantDisambiguateAmbiguousInformation =
-    messageCantDisambiguateAmbiguousInformation;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageCantDisambiguateAmbiguousInformation = const MessageCode(
-    "CantDisambiguateAmbiguousInformation",
-    message:
-        r"""Both Iterable and Map spread elements encountered in ambiguous literal.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeCantDisambiguateNotEnoughInformation =
-    messageCantDisambiguateNotEnoughInformation;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageCantDisambiguateNotEnoughInformation = const MessageCode(
-    "CantDisambiguateNotEnoughInformation",
-    message:
-        r"""Not enough type information to disambiguate between literal set and literal map.""",
-    tip:
-        r"""Try providing type arguments for the literal explicitly to disambiguate it.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCantInferPackagesFromManyInputs =
     messageCantInferPackagesFromManyInputs;
 
@@ -8256,13 +8234,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeSpreadElement = messageSpreadElement;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageSpreadElement = const MessageCode("SpreadElement",
-    severity: Severity.context, message: r"""Iterable spread.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         DartType _type,
@@ -8296,15 +8267,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeSpreadMapElement = messageSpreadMapElement;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageSpreadMapElement = const MessageCode(
-    "SpreadMapElement",
-    severity: Severity.context,
-    message: r"""Map spread.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         DartType _type,
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index a81d124..5deb216 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -817,22 +817,18 @@
         (node.valueType is ImplicitTypeArgument));
     bool inferenceNeeded = node.keyType is ImplicitTypeArgument;
     KernelLibraryBuilder library = inferrer.library;
-    bool typeContextIsMap = false;
-    bool typeContextIsIterable = false;
     if (library != null &&
         library.loader.target.enableSetLiterals &&
-        inferenceNeeded) {
+        inferenceNeeded &&
+        node.entries.isEmpty) {
       // Ambiguous set/map literal
       DartType context =
           inferrer.typeSchemaEnvironment.unfutureType(typeContext);
       if (context is InterfaceType) {
-        typeContextIsMap = inferrer.classHierarchy
-            .isSubtypeOf(context.classNode, inferrer.coreTypes.mapClass);
-        typeContextIsIterable = inferrer.classHierarchy
-            .isSubtypeOf(context.classNode, inferrer.coreTypes.iterableClass);
-        if (node.entries.isEmpty &&
-            typeContextIsIterable &&
-            !typeContextIsMap) {
+        if (inferrer.classHierarchy.isSubtypeOf(
+                context.classNode, inferrer.coreTypes.iterableClass) &&
+            !inferrer.classHierarchy
+                .isSubtypeOf(context.classNode, inferrer.coreTypes.mapClass)) {
           // Set literal
           SetLiteralJudgment setLiteral = new SetLiteralJudgment([],
               typeArgument: const ImplicitTypeArgument(), isConst: node.isConst)
@@ -871,24 +867,13 @@
         cachedValues[i] = node.entries[i].value;
       }
     }
-    int iterableSpreadOffset = null;
-    int mapSpreadOffset = null;
-    int mapEntryOffset = null;
     if (inferenceNeeded || typeChecksNeeded) {
-      DartType spreadTypeContext = const UnknownType();
-      if (typeContextIsIterable && !typeContextIsMap) {
-        spreadTypeContext = inferrer.typeSchemaEnvironment
-            .getTypeAsInstanceOf(typeContext, inferrer.coreTypes.iterableClass);
-      } else if (!typeContextIsIterable && typeContextIsMap) {
-        spreadTypeContext =
-            new InterfaceType(inferrer.coreTypes.mapClass, inferredTypes);
-      }
       for (int i = 0; i < node.entries.length; ++i) {
         MapEntry entry = node.entries[i];
         if (entry is SpreadMapEntry) {
           DartType spreadMapEntryType = inferrer.inferExpression(
               entry.expression,
-              spreadTypeContext,
+              new InterfaceType(inferrer.coreTypes.mapClass, inferredTypes),
               inferenceNeeded || typeChecksNeeded,
               isVoidAllowed: true);
           if (inferenceNeeded) {
@@ -898,19 +883,6 @@
           if (typeChecksNeeded) {
             spreadMapEntryTypes[i] = spreadMapEntryType;
           }
-
-          bool isMap = inferrer.typeSchemaEnvironment.isSubtypeOf(
-              spreadMapEntryType, inferrer.coreTypes.mapClass.rawType);
-          bool isSet = inferrer.typeSchemaEnvironment.isSubtypeOf(
-              spreadMapEntryType, inferrer.coreTypes.iterableClass.rawType);
-
-          if (isMap && !isSet) {
-            mapSpreadOffset = entry.expression.fileOffset;
-          }
-          if (!isMap && isSet) {
-            iterableSpreadOffset = entry.expression.fileOffset;
-          }
-
           // Use 'dynamic' for error recovery.
           int length = actualTypes.length;
           actualTypes.add(const DynamicType());
@@ -929,62 +901,10 @@
           if (inferenceNeeded) {
             formalTypes.addAll(mapType.typeArguments);
           }
-
-          mapEntryOffset = entry.fileOffset;
         }
       }
     }
     if (inferenceNeeded) {
-      bool canBeSet = mapSpreadOffset == null &&
-          mapEntryOffset == null &&
-          !typeContextIsMap;
-      bool canBeMap = iterableSpreadOffset == null && !typeContextIsIterable;
-      if (canBeSet && !canBeMap) {
-        List<Expression> setElements = <Expression>[];
-        for (int i = 0; i < node.entries.length; ++i) {
-          SpreadMapEntry entry = node.entries[i];
-          // TODO(dmitryas):  Add support for null-aware spreads.
-          setElements.add(new SpreadElement(entry.expression, false));
-        }
-        SetLiteralJudgment setLiteral = new SetLiteralJudgment(setElements,
-            typeArgument: const ImplicitTypeArgument(), isConst: node.isConst)
-          ..fileOffset = node.fileOffset;
-        node.parent.replaceChild(node, setLiteral);
-        visitSetLiteralJudgment(setLiteral, typeContext);
-        node.inferredType = setLiteral.inferredType;
-        return;
-      }
-      if (canBeSet && canBeMap && node.entries.isNotEmpty) {
-        node.parent.replaceChild(
-            node,
-            inferrer.helper.desugarSyntheticExpression(inferrer.helper
-                .buildProblem(messageCantDisambiguateNotEnoughInformation,
-                    node.fileOffset, 1)));
-        node.inferredType = const BottomType();
-        return;
-      }
-      if (!canBeSet && !canBeMap) {
-        LocatedMessage iterableContextMessage = messageSpreadElement
-            .withLocation(library.uri, iterableSpreadOffset, 1);
-        LocatedMessage mapContextMessage = messageSpreadMapElement.withLocation(
-            library.uri, mapSpreadOffset, 1);
-        List<LocatedMessage> context = <LocatedMessage>[];
-        if (iterableSpreadOffset < mapSpreadOffset) {
-          context.add(iterableContextMessage);
-          context.add(mapContextMessage);
-        } else {
-          context.add(mapContextMessage);
-          context.add(iterableContextMessage);
-        }
-        node.parent.replaceChild(
-            node,
-            inferrer.helper.desugarSyntheticExpression(inferrer.helper
-                .buildProblem(messageCantDisambiguateAmbiguousInformation,
-                    node.fileOffset, 1,
-                    context: context)));
-        node.inferredType = const BottomType();
-        return;
-      }
       inferrer.typeSchemaEnvironment.inferGenericFunctionOrType(
           mapType,
           mapClass.typeParameters,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 9ebcc33..4cdc182 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -35,11 +35,6 @@
 
 import '../fasta_codes.dart'
     show
-        LocatedMessage,
-        messageCantDisambiguateAmbiguousInformation,
-        messageCantDisambiguateNotEnoughInformation,
-        messageSpreadElement,
-        messageSpreadMapElement,
         messageSwitchExpressionNotAssignableCause,
         messageVoidExpression,
         noLength,
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 69520ef..b644869 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -30,10 +30,6 @@
 CannotReadSdkSpecification/analyzerCode: Fail
 CannotReadSdkSpecification/example: Fail
 CantDetermineConstness/analyzerCode: Fail
-CantDisambiguateAmbiguousInformation/analyzerCode: Fail # There's no analyzer code for that error yet.
-CantDisambiguateAmbiguousInformation/script: Fail # Can't be tested until 'spread-collections' flag is on.
-CantDisambiguateNotEnoughInformation/analyzerCode: Fail # There's no analyzer code for that error yet.
-CantDisambiguateNotEnoughInformation/script: Fail # Can't be tested until 'spread-collections' flag is on.
 CantInferPackagesFromManyInputs/analyzerCode: Fail
 CantInferPackagesFromManyInputs/example: Fail
 CantInferPackagesFromPackageUri/analyzerCode: Fail
@@ -347,7 +343,7 @@
 SpreadMapEntryTypeMismatch/analyzerCode: Fail # Can't be tested until 'spread-collections' flag is on.
 SpreadMapEntryTypeMismatch/script1: Fail # Can't be tested until 'spread-collections' flag is on.
 SpreadMapEntryTypeMismatch/script2: Fail # Can't be tested until 'spread-collections' flag is on.
-SpreadTypeMismatch/analyzerCode: Fail # There's no analyzer code for that error yet.
+SpreadTypeMismatch/analyzerCode: Fail # There's not analyzer code for that error yet.
 SpreadTypeMismatch/script1: Fail # Can't be tested until 'spread-collections' flag is on.
 SpreadTypeMismatch/script2: Fail # Can't be tested until 'spread-collections' flag is on.
 StackOverflow/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index e713239..aa63668 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -3530,26 +3530,3 @@
       Map<String, int> a = <String, int>{"foo": 42};
       Map<String, String> b = <String, String>{...a};
     }
-
-CantDisambiguateNotEnoughInformation:
-  template: "Not enough type information to disambiguate between literal set and literal map."
-  tip: "Try providing type arguments for the literal explicitly to disambiguate it."
-  script: >
-    foo(dynamic spread) {
-      var a = {...spread};
-    }
-
-CantDisambiguateAmbiguousInformation:
-  template: "Both Iterable and Map spread elements encountered in ambiguous literal."
-  script: >
-    foo(Iterable<int> iterableSpread, Map<int, int> mapSpread) {
-      var c = {...iterableSpread, ...mapSpread};
-    }
-
-SpreadElement:
-  template: "Iterable spread."
-  severity: CONTEXT
-
-SpreadMapElement:
-  template: "Map spread."
-  severity: CONTEXT
diff --git a/pkg/front_end/testcases/spread_collection.dart.strong.expect b/pkg/front_end/testcases/spread_collection.dart.strong.expect
index a05138f..9e18ed0 100644
--- a/pkg/front_end/testcases/spread_collection.dart.strong.expect
+++ b/pkg/front_end/testcases/spread_collection.dart.strong.expect
@@ -1,12 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/spread_collection.dart:9:21: Error: Not enough type information to disambiguate between literal set and literal map.
-// Try providing type arguments for the literal explicitly to disambiguate it.
-//   final aSetOrMap = {...foo()};
-//                     ^
-//
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -25,9 +17,9 @@
   final core::Map<core::int, core::int> aMap = block {
     final core::Map<core::int, core::int> #t5 = <core::int, core::int>{};
     #t5.{core::Map::[]=}(1, 1);
-    for (final core::MapEntry<core::int, core::int> #t6 in <core::int, core::int>{2: 2})
+    for (final core::MapEntry<core::int, core::int> #t6 in <dynamic, dynamic>{2: 2})
       #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
-    for (final core::MapEntry<core::int, core::int> #t7 in <core::int, core::int>{3: 3})
+    for (final core::MapEntry<core::int, core::int> #t7 in <dynamic, dynamic>{3: 3})
       #t5.{core::Map::[]=}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
   } =>#t5;
   final core::Set<core::int> aSet = block {
@@ -40,10 +32,11 @@
       for (final core::int #t11 in #t10)
         #t8.{core::Set::add}(#t11);
   } =>#t8;
-  final dynamic aSetOrMap = invalid-expression "pkg/front_end/testcases/spread_collection.dart:9:21: Error: Not enough type information to disambiguate between literal set and literal map.
-Try providing type arguments for the literal explicitly to disambiguate it.
-  final aSetOrMap = {...foo()};
-                    ^";
+  final core::Map<dynamic, dynamic> aSetOrMap = block {
+    final core::Map<dynamic, dynamic> #t12 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t13 in self::foo() as{TypeError} core::Map<dynamic, dynamic>)
+      #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
+  } =>#t12;
   core::print(aList);
   core::print(aSet);
   core::print(aMap);
diff --git a/pkg/front_end/testcases/spread_collection.dart.strong.transformed.expect b/pkg/front_end/testcases/spread_collection.dart.strong.transformed.expect
index a05138f..9e18ed0 100644
--- a/pkg/front_end/testcases/spread_collection.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/spread_collection.dart.strong.transformed.expect
@@ -1,12 +1,4 @@
 library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/spread_collection.dart:9:21: Error: Not enough type information to disambiguate between literal set and literal map.
-// Try providing type arguments for the literal explicitly to disambiguate it.
-//   final aSetOrMap = {...foo()};
-//                     ^
-//
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -25,9 +17,9 @@
   final core::Map<core::int, core::int> aMap = block {
     final core::Map<core::int, core::int> #t5 = <core::int, core::int>{};
     #t5.{core::Map::[]=}(1, 1);
-    for (final core::MapEntry<core::int, core::int> #t6 in <core::int, core::int>{2: 2})
+    for (final core::MapEntry<core::int, core::int> #t6 in <dynamic, dynamic>{2: 2})
       #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
-    for (final core::MapEntry<core::int, core::int> #t7 in <core::int, core::int>{3: 3})
+    for (final core::MapEntry<core::int, core::int> #t7 in <dynamic, dynamic>{3: 3})
       #t5.{core::Map::[]=}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value});
   } =>#t5;
   final core::Set<core::int> aSet = block {
@@ -40,10 +32,11 @@
       for (final core::int #t11 in #t10)
         #t8.{core::Set::add}(#t11);
   } =>#t8;
-  final dynamic aSetOrMap = invalid-expression "pkg/front_end/testcases/spread_collection.dart:9:21: Error: Not enough type information to disambiguate between literal set and literal map.
-Try providing type arguments for the literal explicitly to disambiguate it.
-  final aSetOrMap = {...foo()};
-                    ^";
+  final core::Map<dynamic, dynamic> aSetOrMap = block {
+    final core::Map<dynamic, dynamic> #t12 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t13 in self::foo() as{TypeError} core::Map<dynamic, dynamic>)
+      #t12.{core::Map::[]=}(#t13.{core::MapEntry::key}, #t13.{core::MapEntry::value});
+  } =>#t12;
   core::print(aList);
   core::print(aSet);
   core::print(aMap);
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart b/pkg/front_end/testcases/spread_collection_inference.dart
index 8547fed..474905a 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart
+++ b/pkg/front_end/testcases/spread_collection_inference.dart
@@ -21,21 +21,13 @@
   var /*@type=Map<dynamic, dynamic>*/ map10 = <dynamic, dynamic>{...
     /*@typeArgs=dynamic, dynamic*/ {}};
 
-  var /*@type=Map<dynamic, dynamic>*/ map10ambiguous =
-    /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
-
   var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
 
   var /*@type=Set<int>*/ set20 = /*@typeArgs=int*/ {...spread, 42};
 
-  var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
-
   var /*@type=Map<String, int>*/ map20 = /*@typeArgs=String, int*/
     {...mapSpread, "baz": 42};
 
-  var /*@type=Map<String, int>*/ map20ambiguous = /*@typeArgs=String, int*/
-    {...mapSpread};
-
   var /*@type=List<dynamic>*/ lhs21 = /*@typeArgs=dynamic*/ [...(spread as
       dynamic)];
 
@@ -43,17 +35,12 @@
       dynamic), 42};
 
   var /*@type=Map<dynamic, dynamic>*/ map21 = /*@typeArgs=dynamic, dynamic*/
-    {...(mapSpread as dynamic), "baz": 42};
-
-  dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
-    (mapSpread as dynamic)};
+    {...(spread as dynamic), "baz": 42};
 
   List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
 
   Set<int> set22 = /*@typeArgs=int*/ {... /*@typeArgs=int*/ [], 42};
 
-  Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
-
   Map<String, int> map22 = /*@typeArgs=String, int*/
     {... /*@typeArgs=String, int*/ {}};
 
@@ -63,28 +50,16 @@
   Set<List<int>> set23 = /*@typeArgs=List<int>*/ {... /*@typeArgs=List<int>*/
     [/*@typeArgs=int*/ []], <int>[42]};
 
-  Set<List<int>> set23ambiguous = /*@typeArgs=List<int>*/
-    {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
-
   Map<String, List<int>> map23 = /*@typeArgs=String, List<int>*/
     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
 
-  dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
-    spread, ...mapSpread};
-
   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
 
   int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
 
-  int set30ambiguous = /*@error=InvalidAssignment*/ /*@typeArgs=int*/
-    {...spread};
-
   int map30 = /*@error=InvalidAssignment*/ /*@typeArgs=String, int*/
     {...mapSpread, "baz": 42};
 
-  int map30ambiguous = /*@error=InvalidAssignment*/ /*@typeArgs=String, int*/
-    {...mapSpread};
-
   List<dynamic> lhs40 = <dynamic>[... /*@error=SpreadTypeMismatch*/
     notSpreadInt];
 
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
index a976974..3507169 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
@@ -18,219 +18,139 @@
 //     /*@typeArgs=dynamic, dynamic*/ {}};
 //                                    ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:25:37: Error: Unexpected token '...'.
-//     /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
-//                                     ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:25:73: Error: Expected ':' after this.
-//     /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
-//                                                                         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:27:54: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:24:54: Error: Unexpected token '...'.
 //   var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
 //                                                      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:29:53: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:26:53: Error: Unexpected token '...'.
 //   var /*@type=Set<int>*/ set20 = /*@typeArgs=int*/ {...spread, 42};
 //                                                     ^^^
 //
+// pkg/front_end/testcases/spread_collection_inference.dart:29:6: Error: Unexpected token '...'.
+//     {...mapSpread, "baz": 42};
+//      ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:29:9: Error: Expected ':' after this.
+//     {...mapSpread, "baz": 42};
+//         ^
+//
 // pkg/front_end/testcases/spread_collection_inference.dart:31:62: Error: Unexpected token '...'.
-//   var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
-//                                                              ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:31:65: Error: Expected ':' after this.
-//   var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
-//                                                                 ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:34:6: Error: Unexpected token '...'.
-//     {...mapSpread, "baz": 42};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:34:9: Error: Expected ':' after this.
-//     {...mapSpread, "baz": 42};
-//         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:37:6: Error: Unexpected token '...'.
-//     {...mapSpread};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:37:9: Error: Expected ':' after this.
-//     {...mapSpread};
-//         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:39:62: Error: Unexpected token '...'.
 //   var /*@type=List<dynamic>*/ lhs21 = /*@typeArgs=dynamic*/ [...(spread as
 //                                                              ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:42:61: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:34:61: Error: Unexpected token '...'.
 //   var /*@type=Set<dynamic>*/ set21 = /*@typeArgs=dynamic*/ {...(spread as
 //                                                             ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:46:6: Error: Unexpected token '...'.
-//     {...(mapSpread as dynamic), "baz": 42};
+// pkg/front_end/testcases/spread_collection_inference.dart:38:6: Error: Unexpected token '...'.
+//     {...(spread as dynamic), "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:46:20: Error: Expected ':' after this.
-//     {...(mapSpread as dynamic), "baz": 42};
-//                    ^
+// pkg/front_end/testcases/spread_collection_inference.dart:38:17: Error: Expected ':' after this.
+//     {...(spread as dynamic), "baz": 42};
+//                 ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:48:77: Error: Unexpected token '...'.
-//   dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
-//                                                                             ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:49:16: Error: Expected ':' after this.
-//     (mapSpread as dynamic)};
-//                ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:51:40: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:40:40: Error: Unexpected token '...'.
 //   List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
 //                                        ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:53:39: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:42:39: Error: Unexpected token '...'.
 //   Set<int> set22 = /*@typeArgs=int*/ {... /*@typeArgs=int*/ [], 42};
 //                                       ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:55:48: Error: Unexpected token '...'.
-//   Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
-//                                                ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:55:70: Error: Expected ':' after this.
-//   Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
-//                                                                      ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:58:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:45:6: Error: Unexpected token '...'.
 //     {... /*@typeArgs=String, int*/ {}};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:58:36: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:45:36: Error: Expected ':' after this.
 //     {... /*@typeArgs=String, int*/ {}};
 //                                    ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:60:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:47:52: Error: Unexpected token '...'.
 //   List<List<int>> lhs23 = /*@typeArgs=List<int>*/ [... /*@typeArgs=List<int>*/
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:63:51: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:50:51: Error: Unexpected token '...'.
 //   Set<List<int>> set23 = /*@typeArgs=List<int>*/ {... /*@typeArgs=List<int>*/
 //                                                   ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:67:6: Error: Unexpected token '...'.
-//     {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:67:34: Error: Expected ':' after this.
-//     {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
-//                                  ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:70:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:54:6: Error: Unexpected token '...'.
 //     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:70:42: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:54:42: Error: Expected ':' after this.
 //     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
 //                                          ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:72:77: Error: Unexpected token '...'.
-//   dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
-//                                                                             ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:13: Error: Unexpected token '...'.
-//     spread, ...mapSpread};
-//             ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Expected ':' after this.
-//     spread, ...mapSpread};
-//     ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Error: Expected ':' after this.
-//     spread, ...mapSpread};
-//                ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:75:63: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:56:63: Error: Unexpected token '...'.
 //   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
 //                                                               ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:77:63: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:58:63: Error: Unexpected token '...'.
 //   int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
 //                                                               ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:80:6: Error: Unexpected token '...'.
-//     {...spread};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:80:9: Error: Expected ':' after this.
-//     {...spread};
-//         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:83:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:61:6: Error: Unexpected token '...'.
 //     {...mapSpread, "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:83:9: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:61:9: Error: Expected ':' after this.
 //     {...mapSpread, "baz": 42};
 //         ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:86:6: Error: Unexpected token '...'.
-//     {...mapSpread};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:86:9: Error: Expected ':' after this.
-//     {...mapSpread};
-//         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:88:35: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:63:35: Error: Unexpected token '...'.
 //   List<dynamic> lhs40 = <dynamic>[... /*@error=SpreadTypeMismatch*/
 //                                   ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:91:34: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:66:34: Error: Unexpected token '...'.
 //   Set<dynamic> set40 = <dynamic>{... /*@error=SpreadTypeMismatch*/
 //                                  ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:94:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:69:52: Error: Unexpected token '...'.
 //   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Expected ':' after this.
 //     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
 //                                           ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:97:36: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:72:36: Error: Unexpected token '...'.
 //   List<dynamic> lhs50 = <dynamic> [... /*@error=SpreadTypeMismatch*/
 //                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:100:35: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:75:35: Error: Unexpected token '...'.
 //   Set<dynamic> set50 = <dynamic> {... /*@error=SpreadTypeMismatch*/
 //                                   ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:103:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:78:52: Error: Unexpected token '...'.
 //   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Expected ':' after this.
 //     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
 //                                           ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:106:33: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:81:33: Error: Unexpected token '...'.
 //   List<String> lhs60 = <String>[... /*@error=SpreadElementTypeMismatch*/
 //                                 ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:109:32: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:84:32: Error: Unexpected token '...'.
 //   Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
 //                                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:111:36: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:86:36: Error: Unexpected token '...'.
 //   Map<int, int> map60 = <int, int>{...
 //                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Expected ':' after this.
 //     /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
 //                                                     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:114:48: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:89:48: Error: Unexpected token '...'.
 //   Map<String, String> map61 = <String, String>{...
 //                                                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Expected ':' after this.
 //     /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
 //                                                       ^
 //
@@ -245,30 +165,21 @@
   dynamic lhs10 = <dynamic>[<dynamic>[]];
   dynamic set10 = <dynamic>{<dynamic>[]};
   dynamic map10 = <dynamic, dynamic>{};
-  dynamic map10ambiguous = <dynamic, dynamic>{};
   dynamic lhs20 = <dynamic>[spread];
   dynamic set20 = <dynamic>{spread, 42};
-  dynamic set20ambiguous = <dynamic, dynamic>{};
   dynamic map20 = <dynamic, dynamic>{"baz": 42};
-  dynamic map20ambiguous = <dynamic, dynamic>{};
   dynamic lhs21 = <dynamic>[spread as dynamic];
   dynamic set21 = <dynamic>{spread as dynamic, 42};
   dynamic map21 = <dynamic, dynamic>{"baz": 42};
-  dynamic map21ambiguous = <dynamic, dynamic>{};
   core::List<core::int> lhs22 = <dynamic>[<dynamic>[]];
   core::Set<core::int> set22 = <dynamic>{<dynamic>[], 42};
-  core::Set<core::int> set22ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::int> map22 = <dynamic, dynamic>{};
   core::List<core::List<core::int>> lhs23 = <dynamic>[<dynamic>[<dynamic>[]]];
   core::Set<core::List<core::int>> set23 = <dynamic>{<dynamic>[<dynamic>[]], <core::int>[42]};
-  core::Set<core::List<core::int>> set23ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::List<core::int>> map23 = <dynamic, dynamic>{};
-  dynamic map24ambiguous = <dynamic, dynamic>{};
   core::int lhs30 = <dynamic>[spread];
   core::int set30 = <dynamic>{spread, 42};
-  core::int set30ambiguous = <dynamic, dynamic>{};
   core::int map30 = <dynamic, dynamic>{"baz": 42};
-  core::int map30ambiguous = <dynamic, dynamic>{};
   core::List<dynamic> lhs40 = <dynamic>[notSpreadInt];
   core::Set<dynamic> set40 = <dynamic>{notSpreadInt};
   core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{};
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
index a976974..3507169 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
@@ -18,219 +18,139 @@
 //     /*@typeArgs=dynamic, dynamic*/ {}};
 //                                    ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:25:37: Error: Unexpected token '...'.
-//     /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
-//                                     ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:25:73: Error: Expected ':' after this.
-//     /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
-//                                                                         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:27:54: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:24:54: Error: Unexpected token '...'.
 //   var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
 //                                                      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:29:53: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:26:53: Error: Unexpected token '...'.
 //   var /*@type=Set<int>*/ set20 = /*@typeArgs=int*/ {...spread, 42};
 //                                                     ^^^
 //
+// pkg/front_end/testcases/spread_collection_inference.dart:29:6: Error: Unexpected token '...'.
+//     {...mapSpread, "baz": 42};
+//      ^^^
+//
+// pkg/front_end/testcases/spread_collection_inference.dart:29:9: Error: Expected ':' after this.
+//     {...mapSpread, "baz": 42};
+//         ^
+//
 // pkg/front_end/testcases/spread_collection_inference.dart:31:62: Error: Unexpected token '...'.
-//   var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
-//                                                              ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:31:65: Error: Expected ':' after this.
-//   var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
-//                                                                 ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:34:6: Error: Unexpected token '...'.
-//     {...mapSpread, "baz": 42};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:34:9: Error: Expected ':' after this.
-//     {...mapSpread, "baz": 42};
-//         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:37:6: Error: Unexpected token '...'.
-//     {...mapSpread};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:37:9: Error: Expected ':' after this.
-//     {...mapSpread};
-//         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:39:62: Error: Unexpected token '...'.
 //   var /*@type=List<dynamic>*/ lhs21 = /*@typeArgs=dynamic*/ [...(spread as
 //                                                              ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:42:61: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:34:61: Error: Unexpected token '...'.
 //   var /*@type=Set<dynamic>*/ set21 = /*@typeArgs=dynamic*/ {...(spread as
 //                                                             ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:46:6: Error: Unexpected token '...'.
-//     {...(mapSpread as dynamic), "baz": 42};
+// pkg/front_end/testcases/spread_collection_inference.dart:38:6: Error: Unexpected token '...'.
+//     {...(spread as dynamic), "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:46:20: Error: Expected ':' after this.
-//     {...(mapSpread as dynamic), "baz": 42};
-//                    ^
+// pkg/front_end/testcases/spread_collection_inference.dart:38:17: Error: Expected ':' after this.
+//     {...(spread as dynamic), "baz": 42};
+//                 ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:48:77: Error: Unexpected token '...'.
-//   dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
-//                                                                             ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:49:16: Error: Expected ':' after this.
-//     (mapSpread as dynamic)};
-//                ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:51:40: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:40:40: Error: Unexpected token '...'.
 //   List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
 //                                        ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:53:39: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:42:39: Error: Unexpected token '...'.
 //   Set<int> set22 = /*@typeArgs=int*/ {... /*@typeArgs=int*/ [], 42};
 //                                       ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:55:48: Error: Unexpected token '...'.
-//   Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
-//                                                ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:55:70: Error: Expected ':' after this.
-//   Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
-//                                                                      ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:58:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:45:6: Error: Unexpected token '...'.
 //     {... /*@typeArgs=String, int*/ {}};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:58:36: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:45:36: Error: Expected ':' after this.
 //     {... /*@typeArgs=String, int*/ {}};
 //                                    ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:60:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:47:52: Error: Unexpected token '...'.
 //   List<List<int>> lhs23 = /*@typeArgs=List<int>*/ [... /*@typeArgs=List<int>*/
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:63:51: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:50:51: Error: Unexpected token '...'.
 //   Set<List<int>> set23 = /*@typeArgs=List<int>*/ {... /*@typeArgs=List<int>*/
 //                                                   ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:67:6: Error: Unexpected token '...'.
-//     {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:67:34: Error: Expected ':' after this.
-//     {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
-//                                  ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:70:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:54:6: Error: Unexpected token '...'.
 //     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:70:42: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:54:42: Error: Expected ':' after this.
 //     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
 //                                          ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:72:77: Error: Unexpected token '...'.
-//   dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
-//                                                                             ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:13: Error: Unexpected token '...'.
-//     spread, ...mapSpread};
-//             ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Expected ':' after this.
-//     spread, ...mapSpread};
-//     ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Error: Expected ':' after this.
-//     spread, ...mapSpread};
-//                ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:75:63: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:56:63: Error: Unexpected token '...'.
 //   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
 //                                                               ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:77:63: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:58:63: Error: Unexpected token '...'.
 //   int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
 //                                                               ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:80:6: Error: Unexpected token '...'.
-//     {...spread};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:80:9: Error: Expected ':' after this.
-//     {...spread};
-//         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:83:6: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:61:6: Error: Unexpected token '...'.
 //     {...mapSpread, "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:83:9: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:61:9: Error: Expected ':' after this.
 //     {...mapSpread, "baz": 42};
 //         ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:86:6: Error: Unexpected token '...'.
-//     {...mapSpread};
-//      ^^^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:86:9: Error: Expected ':' after this.
-//     {...mapSpread};
-//         ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:88:35: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:63:35: Error: Unexpected token '...'.
 //   List<dynamic> lhs40 = <dynamic>[... /*@error=SpreadTypeMismatch*/
 //                                   ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:91:34: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:66:34: Error: Unexpected token '...'.
 //   Set<dynamic> set40 = <dynamic>{... /*@error=SpreadTypeMismatch*/
 //                                  ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:94:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:69:52: Error: Unexpected token '...'.
 //   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Expected ':' after this.
 //     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
 //                                           ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:97:36: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:72:36: Error: Unexpected token '...'.
 //   List<dynamic> lhs50 = <dynamic> [... /*@error=SpreadTypeMismatch*/
 //                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:100:35: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:75:35: Error: Unexpected token '...'.
 //   Set<dynamic> set50 = <dynamic> {... /*@error=SpreadTypeMismatch*/
 //                                   ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:103:52: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:78:52: Error: Unexpected token '...'.
 //   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Expected ':' after this.
 //     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
 //                                           ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:106:33: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:81:33: Error: Unexpected token '...'.
 //   List<String> lhs60 = <String>[... /*@error=SpreadElementTypeMismatch*/
 //                                 ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:109:32: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:84:32: Error: Unexpected token '...'.
 //   Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
 //                                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:111:36: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:86:36: Error: Unexpected token '...'.
 //   Map<int, int> map60 = <int, int>{...
 //                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Expected ':' after this.
 //     /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
 //                                                     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:114:48: Error: Unexpected token '...'.
+// pkg/front_end/testcases/spread_collection_inference.dart:89:48: Error: Unexpected token '...'.
 //   Map<String, String> map61 = <String, String>{...
 //                                                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Expected ':' after this.
+// pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Expected ':' after this.
 //     /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
 //                                                       ^
 //
@@ -245,30 +165,21 @@
   dynamic lhs10 = <dynamic>[<dynamic>[]];
   dynamic set10 = <dynamic>{<dynamic>[]};
   dynamic map10 = <dynamic, dynamic>{};
-  dynamic map10ambiguous = <dynamic, dynamic>{};
   dynamic lhs20 = <dynamic>[spread];
   dynamic set20 = <dynamic>{spread, 42};
-  dynamic set20ambiguous = <dynamic, dynamic>{};
   dynamic map20 = <dynamic, dynamic>{"baz": 42};
-  dynamic map20ambiguous = <dynamic, dynamic>{};
   dynamic lhs21 = <dynamic>[spread as dynamic];
   dynamic set21 = <dynamic>{spread as dynamic, 42};
   dynamic map21 = <dynamic, dynamic>{"baz": 42};
-  dynamic map21ambiguous = <dynamic, dynamic>{};
   core::List<core::int> lhs22 = <dynamic>[<dynamic>[]];
   core::Set<core::int> set22 = <dynamic>{<dynamic>[], 42};
-  core::Set<core::int> set22ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::int> map22 = <dynamic, dynamic>{};
   core::List<core::List<core::int>> lhs23 = <dynamic>[<dynamic>[<dynamic>[]]];
   core::Set<core::List<core::int>> set23 = <dynamic>{<dynamic>[<dynamic>[]], <core::int>[42]};
-  core::Set<core::List<core::int>> set23ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::List<core::int>> map23 = <dynamic, dynamic>{};
-  dynamic map24ambiguous = <dynamic, dynamic>{};
   core::int lhs30 = <dynamic>[spread];
   core::int set30 = <dynamic>{spread, 42};
-  core::int set30ambiguous = <dynamic, dynamic>{};
   core::int map30 = <dynamic, dynamic>{"baz": 42};
-  core::int map30ambiguous = <dynamic, dynamic>{};
   core::List<dynamic> lhs40 = <dynamic>[notSpreadInt];
   core::Set<dynamic> set40 = <dynamic>{notSpreadInt};
   core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{};
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 a45078f..a8ade16 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.strong.expect
@@ -2,88 +2,61 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:48:76: Error: Not enough type information to disambiguate between literal set and literal map.
-// Try providing type arguments for the literal explicitly to disambiguate it.
-//   dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
-//                                                                            ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:72:76: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
-//   dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
-//                                                                            ^
-// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Context: Iterable spread.
-//     spread, ...mapSpread};
-//     ^
-// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Context: Map spread.
-//     spread, ...mapSpread};
-//                ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:75:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:56:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
 //  - 'List' is from 'dart:core'.
 // Try changing the type of the left hand side, or casting the right hand side to 'int'.
 //   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
 //                                                              ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:77:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:58:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 //  - 'Set' is from 'dart:core'.
 // Try changing the type of the left hand side, or casting the right hand side to 'int'.
 //   int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
 //                                                              ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:80:5: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
-//  - 'Set' is from 'dart:core'.
-// Try changing the type of the left hand side, or casting the right hand side to 'int'.
-//     {...spread};
-//     ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:83:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:61:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 //  - 'Map' is from 'dart:core'.
 // Try changing the type of the left hand side, or casting the right hand side to 'int'.
 //     {...mapSpread, "baz": 42};
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:86:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
-//  - 'Map' is from 'dart:core'.
-// Try changing the type of the left hand side, or casting the right hand side to 'int'.
-//     {...mapSpread};
-//     ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:89:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:64:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //     notSpreadInt];
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:92:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:67:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //     notSpreadInt};
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 //     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
 //                                           ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:98:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //     notSpreadFunction];
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:101:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:76:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //     notSpreadFunction};
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
 //     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
 //                                           ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:107:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:82:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //     spread];
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:109:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:84:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //   Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
 //                                                                         ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
 //     /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
 //                                                     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
 //     /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
 //                                                       ^
 //
@@ -111,179 +84,129 @@
     for (final core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{})
       #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
   } =>#t5;
-  core::Map<dynamic, dynamic> map10ambiguous = block {
-    final core::Map<dynamic, dynamic> #t7 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t8 in <dynamic, dynamic>{})
-      #t7.{core::Map::[]=}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
-  } =>#t7;
   core::List<core::int> lhs20 = block {
-    final core::List<core::int> #t9 = <core::int>[];
-    for (final core::int #t10 in spread)
-      #t9.{core::List::add}(#t10);
-  } =>#t9;
+    final core::List<core::int> #t7 = <core::int>[];
+    for (final core::int #t8 in spread)
+      #t7.{core::List::add}(#t8);
+  } =>#t7;
   core::Set<core::int> set20 = block {
-    final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t12 in spread)
-      #t11.{core::Set::add}(#t12);
-    #t11.{core::Set::add}(42);
-  } =>#t11;
-  core::Set<core::int> set20ambiguous = block {
-    final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t14 in spread)
-      #t13.{core::Set::add}(#t14);
-  } =>#t13;
+    final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+    for (final core::int #t10 in spread)
+      #t9.{core::Set::add}(#t10);
+    #t9.{core::Set::add}(42);
+  } =>#t9;
   core::Map<core::String, core::int> map20 = block {
-    final core::Map<core::String, core::int> #t15 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t16 in mapSpread)
-      #t15.{core::Map::[]=}(#t16.{core::MapEntry::key}, #t16.{core::MapEntry::value});
-    #t15.{core::Map::[]=}("baz", 42);
-  } =>#t15;
-  core::Map<core::String, core::int> map20ambiguous = block {
-    final core::Map<core::String, core::int> #t17 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t18 in mapSpread)
-      #t17.{core::Map::[]=}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
-  } =>#t17;
+    final core::Map<core::String, core::int> #t11 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t12 in mapSpread)
+      #t11.{core::Map::[]=}(#t12.{core::MapEntry::key}, #t12.{core::MapEntry::value});
+    #t11.{core::Map::[]=}("baz", 42);
+  } =>#t11;
   core::List<dynamic> lhs21 = block {
-    final core::List<dynamic> #t19 = <dynamic>[];
-    for (final dynamic #t20 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
+    final core::List<dynamic> #t13 = <dynamic>[];
+    for (final dynamic #t14 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
+      #t13.{core::List::add}(#t14);
+  } =>#t13;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t15 = col::LinkedHashSet::•<dynamic>();
+    for (final dynamic #t16 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
+      #t15.{core::Set::add}(#t16);
+    #t15.{core::Set::add}(42);
+  } =>#t15;
+  core::Map<dynamic, dynamic> map21 = block {
+    final core::Map<dynamic, dynamic> #t17 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t18 in (spread as dynamic) as{TypeError} core::Map<dynamic, dynamic>)
+      #t17.{core::Map::[]=}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
+    #t17.{core::Map::[]=}("baz", 42);
+  } =>#t17;
+  core::List<core::int> lhs22 = block {
+    final core::List<core::int> #t19 = <core::int>[];
+    for (final core::int #t20 in <core::int>[])
       #t19.{core::List::add}(#t20);
   } =>#t19;
-  core::Set<dynamic> set21 = block {
-    final core::Set<dynamic> #t21 = col::LinkedHashSet::•<dynamic>();
-    for (final dynamic #t22 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
+  core::Set<core::int> set22 = block {
+    final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
+    for (final core::int #t22 in <core::int>[])
       #t21.{core::Set::add}(#t22);
     #t21.{core::Set::add}(42);
   } =>#t21;
-  core::Map<dynamic, dynamic> map21 = block {
-    final core::Map<dynamic, dynamic> #t23 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t24 in (mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>)
+  core::Map<core::String, core::int> map22 = block {
+    final core::Map<core::String, core::int> #t23 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t24 in <core::String, core::int>{})
       #t23.{core::Map::[]=}(#t24.{core::MapEntry::key}, #t24.{core::MapEntry::value});
-    #t23.{core::Map::[]=}("baz", 42);
   } =>#t23;
-  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:48:76: Error: Not enough type information to disambiguate between literal set and literal map.
-Try providing type arguments for the literal explicitly to disambiguate it.
-  dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
-                                                                           ^";
-  core::List<core::int> lhs22 = block {
-    final core::List<core::int> #t25 = <core::int>[];
-    for (final core::int #t26 in <core::int>[])
+  core::List<core::List<core::int>> lhs23 = block {
+    final core::List<core::List<core::int>> #t25 = <core::List<core::int>>[];
+    for (final core::List<core::int> #t26 in <core::List<core::int>>[<core::int>[]])
       #t25.{core::List::add}(#t26);
   } =>#t25;
-  core::Set<core::int> set22 = block {
-    final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t28 in <core::int>[])
-      #t27.{core::Set::add}(#t28);
-    #t27.{core::Set::add}(42);
-  } =>#t27;
-  core::Set<core::int> set22ambiguous = block {
-    final core::Set<core::int> #t29 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t30 in <core::int>[])
-      #t29.{core::Set::add}(#t30);
-  } =>#t29;
-  core::Map<core::String, core::int> map22 = block {
-    final core::Map<core::String, core::int> #t31 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t32 in <core::String, core::int>{})
-      #t31.{core::Map::[]=}(#t32.{core::MapEntry::key}, #t32.{core::MapEntry::value});
-  } =>#t31;
-  core::List<core::List<core::int>> lhs23 = block {
-    final core::List<core::List<core::int>> #t33 = <core::List<core::int>>[];
-    for (final core::List<core::int> #t34 in <core::List<core::int>>[<core::int>[]])
-      #t33.{core::List::add}(#t34);
-  } =>#t33;
   core::Set<core::List<core::int>> set23 = block {
-    final core::Set<core::List<core::int>> #t35 = col::LinkedHashSet::•<core::List<core::int>>();
-    for (final core::List<core::int> #t36 in <core::List<core::int>>[<core::int>[]])
-      #t35.{core::Set::add}(#t36);
-    #t35.{core::Set::add}(<core::int>[42]);
-  } =>#t35;
-  core::Set<core::List<core::int>> set23ambiguous = block {
-    final core::Set<core::List<core::int>> #t37 = col::LinkedHashSet::•<core::List<core::int>>();
-    for (final core::List<core::int> #t38 in <core::List<core::int>>[<core::int>[]])
-      #t37.{core::Set::add}(#t38);
-  } =>#t37;
+    final core::Set<core::List<core::int>> #t27 = col::LinkedHashSet::•<core::List<core::int>>();
+    for (final core::List<core::int> #t28 in <core::List<core::int>>[<core::int>[]])
+      #t27.{core::Set::add}(#t28);
+    #t27.{core::Set::add}(<core::int>[42]);
+  } =>#t27;
   core::Map<core::String, core::List<core::int>> map23 = block {
-    final core::Map<core::String, core::List<core::int>> #t39 = <core::String, core::List<core::int>>{};
-    for (final core::MapEntry<core::String, core::List<core::int>> #t40 in <core::String, core::List<core::int>>{"baz": <core::int>[]})
-      #t39.{core::Map::[]=}(#t40.{core::MapEntry::key}, #t40.{core::MapEntry::value});
-  } =>#t39;
-  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:72:76: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
-  dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
-                                                                           ^";
-  core::int lhs30 = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:75:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+    final core::Map<core::String, core::List<core::int>> #t29 = <core::String, core::List<core::int>>{};
+    for (final core::MapEntry<core::String, core::List<core::int>> #t30 in <core::String, core::List<core::int>>{"baz": <core::int>[]})
+      #t29.{core::Map::[]=}(#t30.{core::MapEntry::key}, #t30.{core::MapEntry::value});
+  } =>#t29;
+  core::int lhs30 = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:56:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
 Try changing the type of the left hand side, or casting the right hand side to 'int'.
   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
                                                              ^" in ( block {
-    final core::List<core::int> #t42 = <core::int>[];
-    for (final core::int #t43 in spread)
-      #t42.{core::List::add}(#t43);
-  } =>#t42) as{TypeError} core::int;
-  core::int set30 = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:77:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+    final core::List<core::int> #t32 = <core::int>[];
+    for (final core::int #t33 in spread)
+      #t32.{core::List::add}(#t33);
+  } =>#t32) as{TypeError} core::int;
+  core::int set30 = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:58:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
 Try changing the type of the left hand side, or casting the right hand side to 'int'.
   int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
                                                              ^" in ( block {
-    final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t46 in spread)
-      #t45.{core::Set::add}(#t46);
-    #t45.{core::Set::add}(42);
-  } =>#t45) as{TypeError} core::int;
-  core::int set30ambiguous = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:80:5: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
- - 'Set' is from 'dart:core'.
-Try changing the type of the left hand side, or casting the right hand side to 'int'.
-    {...spread};
-    ^" in ( block {
-    final core::Set<core::int> #t48 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t49 in spread)
-      #t48.{core::Set::add}(#t49);
-  } =>#t48) as{TypeError} core::int;
-  core::int map30 = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:83:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+    final core::Set<core::int> #t35 = col::LinkedHashSet::•<core::int>();
+    for (final core::int #t36 in spread)
+      #t35.{core::Set::add}(#t36);
+    #t35.{core::Set::add}(42);
+  } =>#t35) as{TypeError} core::int;
+  core::int map30 = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:61:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
 Try changing the type of the left hand side, or casting the right hand side to 'int'.
     {...mapSpread, \"baz\": 42};
     ^" in ( block {
-    final core::Map<core::String, core::int> #t51 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t52 in mapSpread)
-      #t51.{core::Map::[]=}(#t52.{core::MapEntry::key}, #t52.{core::MapEntry::value});
-    #t51.{core::Map::[]=}("baz", 42);
-  } =>#t51) as{TypeError} core::int;
-  core::int map30ambiguous = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:86:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
- - 'Map' is from 'dart:core'.
-Try changing the type of the left hand side, or casting the right hand side to 'int'.
-    {...mapSpread};
-    ^" in ( block {
-    final core::Map<core::String, core::int> #t54 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t55 in mapSpread)
-      #t54.{core::Map::[]=}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
-  } =>#t54) as{TypeError} core::int;
-  core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:89:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    final core::Map<core::String, core::int> #t38 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t39 in mapSpread)
+      #t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
+    #t38.{core::Map::[]=}("baz", 42);
+  } =>#t38) as{TypeError} core::int;
+  core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:64:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
     notSpreadInt];
     ^"];
-  core::Set<dynamic> set40 = let final core::Set<dynamic> #t56 = col::LinkedHashSet::•<dynamic>() in let final dynamic #t57 = #t56.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:92:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  core::Set<dynamic> set40 = let final core::Set<dynamic> #t40 = col::LinkedHashSet::•<dynamic>() in let final dynamic #t41 = #t40.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:67:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
     notSpreadInt};
-    ^") in #t56;
-  core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+    ^") in #t40;
+  core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
                                           ^": null};
-  core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:98:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
     notSpreadFunction];
     ^"];
-  core::Set<dynamic> set50 = let final core::Set<dynamic> #t58 = col::LinkedHashSet::•<dynamic>() in let final dynamic #t59 = #t58.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:101:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  core::Set<dynamic> set50 = let final core::Set<dynamic> #t42 = col::LinkedHashSet::•<dynamic>() in let final dynamic #t43 = #t42.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:76:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
     notSpreadFunction};
-    ^") in #t58;
-  core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+    ^") in #t42;
+  core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
                                           ^": null};
-  core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:107:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:82:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
     spread];
     ^"];
-  core::Set<core::String> set60 = let final core::Set<core::String> #t60 = col::LinkedHashSet::•<core::String>() in let final dynamic #t61 = #t60.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:109:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  core::Set<core::String> set60 = let final core::Set<core::String> #t44 = col::LinkedHashSet::•<core::String>() in let final dynamic #t45 = #t44.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:84:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
-                                                                        ^") in #t60;
-  core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+                                                                        ^") in #t44;
+  core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
     /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
                                                     ^": null};
-  core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
     /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
                                                       ^"};
 }
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 0f75319..34ef7b6 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
@@ -2,88 +2,61 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:48:76: Error: Not enough type information to disambiguate between literal set and literal map.
-// Try providing type arguments for the literal explicitly to disambiguate it.
-//   dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
-//                                                                            ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:72:76: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
-//   dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
-//                                                                            ^
-// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Context: Iterable spread.
-//     spread, ...mapSpread};
-//     ^
-// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Context: Map spread.
-//     spread, ...mapSpread};
-//                ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:75:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:56:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
 //  - 'List' is from 'dart:core'.
 // Try changing the type of the left hand side, or casting the right hand side to 'int'.
 //   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
 //                                                              ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:77:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:58:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 //  - 'Set' is from 'dart:core'.
 // Try changing the type of the left hand side, or casting the right hand side to 'int'.
 //   int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
 //                                                              ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:80:5: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
-//  - 'Set' is from 'dart:core'.
-// Try changing the type of the left hand side, or casting the right hand side to 'int'.
-//     {...spread};
-//     ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:83:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:61:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 //  - 'Map' is from 'dart:core'.
 // Try changing the type of the left hand side, or casting the right hand side to 'int'.
 //     {...mapSpread, "baz": 42};
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:86:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
-//  - 'Map' is from 'dart:core'.
-// Try changing the type of the left hand side, or casting the right hand side to 'int'.
-//     {...mapSpread};
-//     ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:89:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:64:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //     notSpreadInt];
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:92:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:67:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //     notSpreadInt};
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 //     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
 //                                           ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:98:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //     notSpreadFunction];
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:101:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/spread_collection_inference.dart:76:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //     notSpreadFunction};
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
 //     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
 //                                           ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:107:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:82:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //     spread];
 //     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:109:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:84:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //   Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
 //                                                                         ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+// pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
 //     /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
 //                                                     ^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+// pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
 //     /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
 //                                                       ^
 //
@@ -111,179 +84,129 @@
     for (final core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{})
       #t5.{core::Map::[]=}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
   } =>#t5;
-  core::Map<dynamic, dynamic> map10ambiguous = block {
-    final core::Map<dynamic, dynamic> #t7 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t8 in <dynamic, dynamic>{})
-      #t7.{core::Map::[]=}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
-  } =>#t7;
   core::List<core::int> lhs20 = block {
-    final core::List<core::int> #t9 = <core::int>[];
-    for (final core::int #t10 in spread)
-      #t9.{core::List::add}(#t10);
-  } =>#t9;
+    final core::List<core::int> #t7 = <core::int>[];
+    for (final core::int #t8 in spread)
+      #t7.{core::List::add}(#t8);
+  } =>#t7;
   core::Set<core::int> set20 = block {
-    final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t12 in spread)
-      #t11.{core::Set::add}(#t12);
-    #t11.{core::Set::add}(42);
-  } =>#t11;
-  core::Set<core::int> set20ambiguous = block {
-    final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t14 in spread)
-      #t13.{core::Set::add}(#t14);
-  } =>#t13;
+    final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+    for (final core::int #t10 in spread)
+      #t9.{core::Set::add}(#t10);
+    #t9.{core::Set::add}(42);
+  } =>#t9;
   core::Map<core::String, core::int> map20 = block {
-    final core::Map<core::String, core::int> #t15 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t16 in mapSpread)
-      #t15.{core::Map::[]=}(#t16.{core::MapEntry::key}, #t16.{core::MapEntry::value});
-    #t15.{core::Map::[]=}("baz", 42);
-  } =>#t15;
-  core::Map<core::String, core::int> map20ambiguous = block {
-    final core::Map<core::String, core::int> #t17 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t18 in mapSpread)
-      #t17.{core::Map::[]=}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
-  } =>#t17;
+    final core::Map<core::String, core::int> #t11 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t12 in mapSpread)
+      #t11.{core::Map::[]=}(#t12.{core::MapEntry::key}, #t12.{core::MapEntry::value});
+    #t11.{core::Map::[]=}("baz", 42);
+  } =>#t11;
   core::List<dynamic> lhs21 = block {
-    final core::List<dynamic> #t19 = <dynamic>[];
-    for (final dynamic #t20 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
+    final core::List<dynamic> #t13 = <dynamic>[];
+    for (final dynamic #t14 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
+      #t13.{core::List::add}(#t14);
+  } =>#t13;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t15 = col::LinkedHashSet::•<dynamic>();
+    for (final dynamic #t16 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
+      #t15.{core::Set::add}(#t16);
+    #t15.{core::Set::add}(42);
+  } =>#t15;
+  core::Map<dynamic, dynamic> map21 = block {
+    final core::Map<dynamic, dynamic> #t17 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t18 in (spread as dynamic) as{TypeError} core::Map<dynamic, dynamic>)
+      #t17.{core::Map::[]=}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
+    #t17.{core::Map::[]=}("baz", 42);
+  } =>#t17;
+  core::List<core::int> lhs22 = block {
+    final core::List<core::int> #t19 = <core::int>[];
+    for (final core::int #t20 in <core::int>[])
       #t19.{core::List::add}(#t20);
   } =>#t19;
-  core::Set<dynamic> set21 = block {
-    final core::Set<dynamic> #t21 = col::LinkedHashSet::•<dynamic>();
-    for (final dynamic #t22 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>)
+  core::Set<core::int> set22 = block {
+    final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
+    for (final core::int #t22 in <core::int>[])
       #t21.{core::Set::add}(#t22);
     #t21.{core::Set::add}(42);
   } =>#t21;
-  core::Map<dynamic, dynamic> map21 = block {
-    final core::Map<dynamic, dynamic> #t23 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic> #t24 in (mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>)
+  core::Map<core::String, core::int> map22 = block {
+    final core::Map<core::String, core::int> #t23 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t24 in <core::String, core::int>{})
       #t23.{core::Map::[]=}(#t24.{core::MapEntry::key}, #t24.{core::MapEntry::value});
-    #t23.{core::Map::[]=}("baz", 42);
   } =>#t23;
-  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:48:76: Error: Not enough type information to disambiguate between literal set and literal map.
-Try providing type arguments for the literal explicitly to disambiguate it.
-  dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
-                                                                           ^";
-  core::List<core::int> lhs22 = block {
-    final core::List<core::int> #t25 = <core::int>[];
-    for (final core::int #t26 in <core::int>[])
+  core::List<core::List<core::int>> lhs23 = block {
+    final core::List<core::List<core::int>> #t25 = <core::List<core::int>>[];
+    for (final core::List<core::int> #t26 in <core::List<core::int>>[<core::int>[]])
       #t25.{core::List::add}(#t26);
   } =>#t25;
-  core::Set<core::int> set22 = block {
-    final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t28 in <core::int>[])
-      #t27.{core::Set::add}(#t28);
-    #t27.{core::Set::add}(42);
-  } =>#t27;
-  core::Set<core::int> set22ambiguous = block {
-    final core::Set<core::int> #t29 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t30 in <core::int>[])
-      #t29.{core::Set::add}(#t30);
-  } =>#t29;
-  core::Map<core::String, core::int> map22 = block {
-    final core::Map<core::String, core::int> #t31 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t32 in <core::String, core::int>{})
-      #t31.{core::Map::[]=}(#t32.{core::MapEntry::key}, #t32.{core::MapEntry::value});
-  } =>#t31;
-  core::List<core::List<core::int>> lhs23 = block {
-    final core::List<core::List<core::int>> #t33 = <core::List<core::int>>[];
-    for (final core::List<core::int> #t34 in <core::List<core::int>>[<core::int>[]])
-      #t33.{core::List::add}(#t34);
-  } =>#t33;
   core::Set<core::List<core::int>> set23 = block {
-    final core::Set<core::List<core::int>> #t35 = col::LinkedHashSet::•<core::List<core::int>>();
-    for (final core::List<core::int> #t36 in <core::List<core::int>>[<core::int>[]])
-      #t35.{core::Set::add}(#t36);
-    #t35.{core::Set::add}(<core::int>[42]);
-  } =>#t35;
-  core::Set<core::List<core::int>> set23ambiguous = block {
-    final core::Set<core::List<core::int>> #t37 = col::LinkedHashSet::•<core::List<core::int>>();
-    for (final core::List<core::int> #t38 in <core::List<core::int>>[<core::int>[]])
-      #t37.{core::Set::add}(#t38);
-  } =>#t37;
+    final core::Set<core::List<core::int>> #t27 = col::LinkedHashSet::•<core::List<core::int>>();
+    for (final core::List<core::int> #t28 in <core::List<core::int>>[<core::int>[]])
+      #t27.{core::Set::add}(#t28);
+    #t27.{core::Set::add}(<core::int>[42]);
+  } =>#t27;
   core::Map<core::String, core::List<core::int>> map23 = block {
-    final core::Map<core::String, core::List<core::int>> #t39 = <core::String, core::List<core::int>>{};
-    for (final core::MapEntry<core::String, core::List<core::int>> #t40 in <core::String, core::List<core::int>>{"baz": <core::int>[]})
-      #t39.{core::Map::[]=}(#t40.{core::MapEntry::key}, #t40.{core::MapEntry::value});
-  } =>#t39;
-  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:72:76: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
-  dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
-                                                                           ^";
-  core::int lhs30 = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:75:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+    final core::Map<core::String, core::List<core::int>> #t29 = <core::String, core::List<core::int>>{};
+    for (final core::MapEntry<core::String, core::List<core::int>> #t30 in <core::String, core::List<core::int>>{"baz": <core::int>[]})
+      #t29.{core::Map::[]=}(#t30.{core::MapEntry::key}, #t30.{core::MapEntry::value});
+  } =>#t29;
+  core::int lhs30 = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:56:62: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
 Try changing the type of the left hand side, or casting the right hand side to 'int'.
   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
                                                              ^" in ( block {
-    final core::List<core::int> #t42 = <core::int>[];
-    for (final core::int #t43 in spread)
-      #t42.{core::List::add}(#t43);
-  } =>#t42) as{TypeError} core::int;
-  core::int set30 = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:77:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+    final core::List<core::int> #t32 = <core::int>[];
+    for (final core::int #t33 in spread)
+      #t32.{core::List::add}(#t33);
+  } =>#t32) as{TypeError} core::int;
+  core::int set30 = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:58:62: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
 Try changing the type of the left hand side, or casting the right hand side to 'int'.
   int set30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ {...spread, 42};
                                                              ^" in ( block {
-    final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t46 in spread)
-      #t45.{core::Set::add}(#t46);
-    #t45.{core::Set::add}(42);
-  } =>#t45) as{TypeError} core::int;
-  core::int set30ambiguous = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:80:5: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
- - 'Set' is from 'dart:core'.
-Try changing the type of the left hand side, or casting the right hand side to 'int'.
-    {...spread};
-    ^" in ( block {
-    final core::Set<core::int> #t48 = col::LinkedHashSet::•<core::int>();
-    for (final core::int #t49 in spread)
-      #t48.{core::Set::add}(#t49);
-  } =>#t48) as{TypeError} core::int;
-  core::int map30 = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:83:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+    final core::Set<core::int> #t35 = col::LinkedHashSet::•<core::int>();
+    for (final core::int #t36 in spread)
+      #t35.{core::Set::add}(#t36);
+    #t35.{core::Set::add}(42);
+  } =>#t35) as{TypeError} core::int;
+  core::int map30 = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:61:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
 Try changing the type of the left hand side, or casting the right hand side to 'int'.
     {...mapSpread, \"baz\": 42};
     ^" in ( block {
-    final core::Map<core::String, core::int> #t51 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t52 in mapSpread)
-      #t51.{core::Map::[]=}(#t52.{core::MapEntry::key}, #t52.{core::MapEntry::value});
-    #t51.{core::Map::[]=}("baz", 42);
-  } =>#t51) as{TypeError} core::int;
-  core::int map30ambiguous = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:86:5: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
- - 'Map' is from 'dart:core'.
-Try changing the type of the left hand side, or casting the right hand side to 'int'.
-    {...mapSpread};
-    ^" in ( block {
-    final core::Map<core::String, core::int> #t54 = <core::String, core::int>{};
-    for (final core::MapEntry<core::String, core::int> #t55 in mapSpread)
-      #t54.{core::Map::[]=}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
-  } =>#t54) as{TypeError} core::int;
-  core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:89:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    final core::Map<core::String, core::int> #t38 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t39 in mapSpread)
+      #t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
+    #t38.{core::Map::[]=}("baz", 42);
+  } =>#t38) as{TypeError} core::int;
+  core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:64:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
     notSpreadInt];
     ^"];
-  core::Set<dynamic> set40 = let final core::Set<dynamic> #t56 = col::LinkedHashSet::•<dynamic>() in let final core::bool #t57 = #t56.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:92:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  core::Set<dynamic> set40 = let final core::Set<dynamic> #t40 = col::LinkedHashSet::•<dynamic>() in let final core::bool #t41 = #t40.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:67:5: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
     notSpreadInt};
-    ^") in #t56;
-  core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+    ^") in #t40;
+  core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:70:43: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
                                           ^": null};
-  core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:98:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
     notSpreadFunction];
     ^"];
-  core::Set<dynamic> set50 = let final core::Set<dynamic> #t58 = col::LinkedHashSet::•<dynamic>() in let final core::bool #t59 = #t58.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:101:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  core::Set<dynamic> set50 = let final core::Set<dynamic> #t42 = col::LinkedHashSet::•<dynamic>() in let final core::bool #t43 = #t42.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:76:5: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
     notSpreadFunction};
-    ^") in #t58;
-  core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+    ^") in #t42;
+  core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:79:43: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
                                           ^": null};
-  core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:107:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:82:5: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
     spread];
     ^"];
-  core::Set<core::String> set60 = let final core::Set<core::String> #t60 = col::LinkedHashSet::•<core::String>() in let final core::bool #t61 = #t60.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:109:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  core::Set<core::String> set60 = let final core::Set<core::String> #t44 = col::LinkedHashSet::•<core::String>() in let final core::bool #t45 = #t44.{core::Set::add}(invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:84:73: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{... /*@error=SpreadElementTypeMismatch*/ spread};
-                                                                        ^") in #t60;
-  core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+                                                                        ^") in #t44;
+  core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:87:53: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
     /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
                                                     ^": null};
-  core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/spread_collection_inference.dart:90:55: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
     /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
                                                       ^"};
 }