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};
    #t3.{core::Map::addAll}{Invariant}(<core::int, core::int>{2: 2}){(core::Map<core::int, core::int>) → void};
    final core::Map<core::int, core::int>? #t4 = self::nullableMap;
    if(!(#t4 == null))
      #t3.{core::Map::addAll}{Invariant}(#t4{core::Map<core::int, core::int>}){(core::Map<core::int, core::int>) → void};
  } =>#t3;
  final core::Set<core::int> aSet = block {
    final core::Set<core::int> #t5 = col::LinkedHashSet::•<core::int>();
    #t5.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    #t5.{core::Set::addAll}{Invariant}(<core::int>[2]){(core::Iterable<core::int>) → void};
    final core::Iterable<core::int>? #t6 = self::nullableList;
    if(!(#t6 == null))
      #t5.{core::Set::addAll}{Invariant}(#t6{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
  } =>#t5;
  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;
