library;
//
// 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::_GrowableList::_literal1<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::_GrowableList::_literal1<core::int>(1);
    #t1.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<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 = new col::_Set::•<core::int>();
    #t5.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    #t5.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<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;
