library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/spread_collection.dart:24: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;

static field core::List<core::int>? nullableList = <core::int>[3];
static field core::Map<core::int, core::int>? nullableMap = <core::int, core::int>{3: 3};
static method main() → dynamic {
  final core::List<core::int> aList = block {
    final core::List<core::int> #t1 = <core::int>[1];
    #t1.{core::List::addAll}{Invariant}(<core::int>[2]){(core::Iterable<core::int>) → void};
    final core::Iterable<core::int>? #t2 = self::nullableList;
    if(!(#t2 == null))
      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
  } =>#t1;
  final core::Map<core::int, core::int> aMap = block {
    final core::Map<core::int, core::int> #t3 = <core::int, core::int>{};
    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
    for (final core::MapEntry<core::int, core::int> #t4 in <core::int, core::int>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int}, #t4.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t5 = self::nullableMap;
    if(!(#t5 == null))
      for (final core::MapEntry<core::int, core::int> #t6 in #t5{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int}, #t6.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
  } =>#t3;
  final core::Set<core::int> aSet = block {
    final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
    #t7.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    #t7.{core::Set::addAll}{Invariant}(<core::int>[2]){(core::Iterable<core::int>) → void};
    final core::Iterable<core::int>? #t8 = self::nullableList;
    if(!(#t8 == null))
      #t7.{core::Set::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
  } =>#t7;
  final Never aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:24: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()};
                    ^";
  core::print(aList);
  core::print(aSet);
  core::print(aMap);
}
static method foo() → dynamic
  return null;
