library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: 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 = {...(mapSpread as dynamic)};
//                            ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
//   dynamic map24ambiguous = {...spread, ...mapSpread};
//                            ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
//  - 'List' is from 'dart:core'.
//   int lhs30 = /*@ typeArgs=int* */ [...spread];
//                                    ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
//  - 'Set' is from 'dart:core'.
//   int set30 = /*@ typeArgs=int* */ {...spread, 42};
//                                    ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
//  - 'Set' is from 'dart:core'.
//       {...spread};
//       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
//  - 'Map' is from 'dart:core'.
//       {...mapSpread, "baz": 42};
//       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
//  - 'Map' is from 'dart:core'.
//       {...mapSpread};
//       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
//   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
//                                      ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
//   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
//                                     ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
//   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
//                                                       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
//                                      ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
//                                     ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
//   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
//                                                       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
//   List<String> lhs60 = <String>[...spread];
//                                    ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
//   Set<String> set60 = <String>{...spread};
//                                   ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
//   Map<int, int> map60 = <int, int>{...mapSpread};
//                                       ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
//   Map<String, String> map61 = <String, String>{...mapSpread};
//                                                   ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
//   List<int> lhs70 = <int>[...null];
//                              ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
//   Set<int> set70 = <int>{...null};
//                             ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
//     ...null,
//        ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Expected ',' before this.
//     ...null,
//        ^
//
// pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
//   Map<String, int> map70 = <String, int>{...null};
//                                             ^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method bar<K extends core::Object* = dynamic, V extends core::Object* = dynamic>() → core::Map<self::bar::K*, self::bar::V*>*
  return null;
static method foo(dynamic dynVar) → dynamic {
  core::List<core::int*>* spread = <core::int*>[1, 2, 3];
  core::Map<core::String*, core::int*>* mapSpread = <core::String*, core::int*>{"foo": 4, "bar": 2};
  core::int* notSpreadInt = 42;
  () →* core::int* notSpreadFunction = null;
  core::Map<core::int*, core::num*>* mapIntNum = <core::int*, core::num*>{42: 42};
  core::List<core::num*>* listNum = <core::num*>[42];
  core::List<dynamic>* lhs10 = block {
    final core::List<dynamic>* #t1 = <dynamic>[];
    {
      core::Iterator<dynamic>* :sync-for-iterator = <dynamic>[].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
        #t1.{core::List::add}{Invariant}(#t2);
      }
    }
  } =>#t1;
  core::Set<dynamic>* set10 = block {
    final core::Set<dynamic>* #t3 = new col::_CompactLinkedHashSet::•<dynamic>();
    {
      core::Iterator<dynamic>* :sync-for-iterator = <dynamic>[].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
        #t3.{core::Set::add}{Invariant}(#t4);
      }
    }
  } =>#t3;
  core::Map<dynamic, dynamic>* map10 = block {
    final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
    {
      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = <dynamic, dynamic>{}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<dynamic, dynamic>* #t6 = :sync-for-iterator.{core::Iterator::current};
        #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}, #t6.{core::MapEntry::value});
      }
    }
  } =>#t5;
  core::Map<dynamic, dynamic>* map10ambiguous = block {
    final core::Map<dynamic, dynamic>* #t7 = <dynamic, dynamic>{};
    {
      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = <dynamic, dynamic>{}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<dynamic, dynamic>* #t8 = :sync-for-iterator.{core::Iterator::current};
        #t7.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value});
      }
    }
  } =>#t7;
  core::List<core::int*>* lhs20 = block {
    final core::List<core::int*>* #t9 = <core::int*>[];
    {
      core::Iterator<core::int*>* :sync-for-iterator = spread.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t10 = :sync-for-iterator.{core::Iterator::current};
        #t9.{core::List::add}{Invariant}(#t10);
      }
    }
  } =>#t9;
  core::Set<core::int*>* set20 = block {
    final core::Set<core::int*>* #t11 = new col::_CompactLinkedHashSet::•<core::int*>();
    {
      core::Iterator<core::int*>* :sync-for-iterator = spread.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t12 = :sync-for-iterator.{core::Iterator::current};
        #t11.{core::Set::add}{Invariant}(#t12);
      }
    }
    #t11.{core::Set::add}{Invariant}(42);
  } =>#t11;
  core::Set<core::int*>* set20ambiguous = block {
    final core::Set<core::int*>* #t13 = new col::_CompactLinkedHashSet::•<core::int*>();
    {
      core::Iterator<core::int*>* :sync-for-iterator = spread.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t14 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int* #t15 = #t14 as{TypeError} core::int*;
          #t13.{core::Set::add}{Invariant}(#t15);
        }
      }
    }
  } =>#t13;
  core::Map<core::String*, core::int*>* map20 = block {
    final core::Map<core::String*, core::int*>* #t16 = <core::String*, core::int*>{};
    {
      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::int*>* #t17 = :sync-for-iterator.{core::Iterator::current};
        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
      }
    }
    #t16.{core::Map::[]=}{Invariant}("baz", 42);
  } =>#t16;
  core::Map<core::String*, core::int*>* map20ambiguous = block {
    final core::Map<core::String*, core::int*>* #t18 = <core::String*, core::int*>{};
    {
      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::int*>* #t19 = :sync-for-iterator.{core::Iterator::current};
        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}, #t19.{core::MapEntry::value});
      }
    }
  } =>#t18;
  core::List<dynamic>* lhs21 = block {
    final core::List<dynamic>* #t20 = <dynamic>[];
    {
      core::Iterator<dynamic>* :sync-for-iterator = ((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
        #t20.{core::List::add}{Invariant}(#t21);
      }
    }
  } =>#t20;
  core::Set<dynamic>* set21 = block {
    final core::Set<dynamic>* #t22 = new col::_CompactLinkedHashSet::•<dynamic>();
    {
      core::Iterator<dynamic>* :sync-for-iterator = ((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
        #t22.{core::Set::add}{Invariant}(#t23);
      }
    }
    #t22.{core::Set::add}{Invariant}(42);
  } =>#t22;
  core::Map<dynamic, dynamic>* map21 = block {
    final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
    {
      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<dynamic, dynamic>* #t25 = :sync-for-iterator.{core::Iterator::current};
        #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
      }
    }
    #t24.{core::Map::[]=}{Invariant}("baz", 42);
  } =>#t24;
  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: 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 = {...(mapSpread as dynamic)};
                           ^";
  core::List<core::int*>* lhs22 = block {
    final core::List<core::int*>* #t26 = <core::int*>[];
    {
      core::Iterator<core::int*>* :sync-for-iterator = <core::int*>[].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t27 = :sync-for-iterator.{core::Iterator::current};
        #t26.{core::List::add}{Invariant}(#t27);
      }
    }
  } =>#t26;
  core::Set<core::int*>* set22 = block {
    final core::Set<core::int*>* #t28 = new col::_CompactLinkedHashSet::•<core::int*>();
    {
      core::Iterator<core::int*>* :sync-for-iterator = <core::int*>[].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
        #t28.{core::Set::add}{Invariant}(#t29);
      }
    }
    #t28.{core::Set::add}{Invariant}(42);
  } =>#t28;
  core::Set<core::int*>* set22ambiguous = block {
    final core::Set<core::int*>* #t30 = new col::_CompactLinkedHashSet::•<core::int*>();
    {
      core::Iterator<core::int*>* :sync-for-iterator = <core::int*>[].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t31 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int* #t32 = #t31 as{TypeError} core::int*;
          #t30.{core::Set::add}{Invariant}(#t32);
        }
      }
    }
  } =>#t30;
  core::Map<core::String*, core::int*>* map22 = block {
    final core::Map<core::String*, core::int*>* #t33 = <core::String*, core::int*>{};
    {
      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::int*>* #t34 = :sync-for-iterator.{core::Iterator::current};
        #t33.{core::Map::[]=}{Invariant}(#t34.{core::MapEntry::key}, #t34.{core::MapEntry::value});
      }
    }
  } =>#t33;
  core::List<core::List<core::int*>*>* lhs23 = block {
    final core::List<core::List<core::int*>*>* #t35 = <core::List<core::int*>*>[];
    {
      core::Iterator<core::List<core::int*>*>* :sync-for-iterator = <core::List<core::int*>*>[<core::int*>[]].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::List<core::int*>* #t36 = :sync-for-iterator.{core::Iterator::current};
        #t35.{core::List::add}{Invariant}(#t36);
      }
    }
  } =>#t35;
  core::Set<core::List<core::int*>*>* set23 = block {
    final core::Set<core::List<core::int*>*>* #t37 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
    {
      core::Iterator<core::List<core::int*>*>* :sync-for-iterator = <core::List<core::int*>*>[<core::int*>[]].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::List<core::int*>* #t38 = :sync-for-iterator.{core::Iterator::current};
        #t37.{core::Set::add}{Invariant}(#t38);
      }
    }
    #t37.{core::Set::add}{Invariant}(<core::int*>[42]);
  } =>#t37;
  core::Set<core::List<core::int*>*>* set23ambiguous = block {
    final core::Set<core::List<core::int*>*>* #t39 = new col::_CompactLinkedHashSet::•<core::List<core::int*>*>();
    {
      core::Iterator<core::List<core::int*>*>* :sync-for-iterator = <core::List<core::int*>*>[<core::int*>[]].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t40 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::List<core::int*>* #t41 = #t40 as{TypeError} core::List<core::int*>*;
          #t39.{core::Set::add}{Invariant}(#t41);
        }
      }
    }
  } =>#t39;
  core::Map<core::String*, core::List<core::int*>*>* map23 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t42 = <core::String*, core::List<core::int*>*>{};
    {
      core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>>* :sync-for-iterator = <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 = :sync-for-iterator.{core::Iterator::current};
        #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}, #t43.{core::MapEntry::value});
      }
    }
  } =>#t42;
  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
  dynamic map24ambiguous = {...spread, ...mapSpread};
                           ^";
  core::int* lhs30 = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
 - 'List' is from 'dart:core'.
  int lhs30 = /*@ typeArgs=int* */ [...spread];
                                   ^" in ( block {
    final core::List<core::int*>* #t45 = <core::int*>[];
    {
      core::Iterator<core::int*>* :sync-for-iterator = spread.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t46 = :sync-for-iterator.{core::Iterator::current};
        #t45.{core::List::add}{Invariant}(#t46);
      }
    }
  } =>#t45) as{TypeError} core::int*;
  core::int* set30 = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 - 'Set' is from 'dart:core'.
  int set30 = /*@ typeArgs=int* */ {...spread, 42};
                                   ^" in ( block {
    final core::Set<core::int*>* #t48 = new col::_CompactLinkedHashSet::•<core::int*>();
    {
      core::Iterator<core::int*>* :sync-for-iterator = spread.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t49 = :sync-for-iterator.{core::Iterator::current};
        #t48.{core::Set::add}{Invariant}(#t49);
      }
    }
    #t48.{core::Set::add}{Invariant}(42);
  } =>#t48) as{TypeError} core::int*;
  core::int* set30ambiguous = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 - 'Set' is from 'dart:core'.
      {...spread};
      ^" in ( block {
    final core::Set<core::int*>* #t51 = new col::_CompactLinkedHashSet::•<core::int*>();
    {
      core::Iterator<core::int*>* :sync-for-iterator = spread.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t52 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int* #t53 = #t52 as{TypeError} core::int*;
          #t51.{core::Set::add}{Invariant}(#t53);
        }
      }
    }
  } =>#t51) as{TypeError} core::int*;
  core::int* map30 = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 - 'Map' is from 'dart:core'.
      {...mapSpread, \"baz\": 42};
      ^" in ( block {
    final core::Map<core::String*, core::int*>* #t55 = <core::String*, core::int*>{};
    {
      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::int*>* #t56 = :sync-for-iterator.{core::Iterator::current};
        #t55.{core::Map::[]=}{Invariant}(#t56.{core::MapEntry::key}, #t56.{core::MapEntry::value});
      }
    }
    #t55.{core::Map::[]=}{Invariant}("baz", 42);
  } =>#t55) as{TypeError} core::int*;
  core::int* map30ambiguous = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 - 'Map' is from 'dart:core'.
      {...mapSpread};
      ^" in ( block {
    final core::Map<core::String*, core::int*>* #t58 = <core::String*, core::int*>{};
    {
      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = mapSpread.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
        #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}, #t59.{core::MapEntry::value});
      }
    }
  } =>#t58) as{TypeError} core::int*;
  core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
  List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                     ^"];
  core::Set<dynamic>* set40 = block {
    final core::Set<dynamic>* #t60 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t60.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
  Set<dynamic> set40 = <dynamic>{...notSpreadInt};
                                    ^");
  } =>#t60;
  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
  Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
                                                      ^": null};
  core::List<dynamic>* lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
  List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
                                     ^"];
  core::Set<dynamic>* set50 = block {
    final core::Set<dynamic>* #t61 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t61.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
  Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
                                    ^");
  } =>#t61;
  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
  Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
                                                      ^": null};
  core::List<core::String*>* lhs60 = <core::String*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
  List<String> lhs60 = <String>[...spread];
                                   ^"];
  core::Set<core::String*>* set60 = block {
    final core::Set<core::String*>* #t62 = new col::_CompactLinkedHashSet::•<core::String*>();
    #t62.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
  Set<String> set60 = <String>{...spread};
                                  ^");
  } =>#t62;
  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
  Map<int, int> map60 = <int, int>{...mapSpread};
                                      ^": null};
  core::Map<core::String*, core::String*>* map61 = <core::String*, core::String*>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
  Map<String, String> map61 = <String, String>{...mapSpread};
                                                  ^"};
  core::List<core::int*>* lhs70 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
  List<int> lhs70 = <int>[...null];
                             ^"];
  core::Set<core::int*>* set70 = block {
    final core::Set<core::int*>* #t63 = new col::_CompactLinkedHashSet::•<core::int*>();
    #t63.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
  Set<int> set70 = <int>{...null};
                            ^");
  } =>#t63;
  core::Set<dynamic>* set71ambiguous = block {
    final core::Set<dynamic>* #t64 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t64.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Expected ',' before this.
    ...null,
       ^");
    {
      core::Iterator<dynamic>* :sync-for-iterator = <dynamic>[].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t65 = :sync-for-iterator.{core::Iterator::current};
        {
          final dynamic #t66 = #t65 as{TypeError} dynamic;
          #t64.{core::Set::add}{Invariant}(#t66);
        }
      }
    }
  } =>#t64;
  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
  Map<String, int> map70 = <String, int>{...null};
                                            ^": null};
  core::List<core::int*>* lhs80 = block {
    final core::List<core::int*>* #t67 = <core::int*>[];
    final core::Iterable<core::int*>* #t68 = null;
    if(!#t68.{core::Object::==}(null)) {
      core::Iterator<core::int*>* :sync-for-iterator = #t68.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t69 = :sync-for-iterator.{core::Iterator::current};
        #t67.{core::List::add}{Invariant}(#t69);
      }
    }
  } =>#t67;
  core::Set<core::int*>* set80 = block {
    final core::Set<core::int*>* #t70 = new col::_CompactLinkedHashSet::•<core::int*>();
    final core::Iterable<core::int*>* #t71 = null;
    if(!#t71.{core::Object::==}(null)) {
      core::Iterator<core::int*>* :sync-for-iterator = #t71.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t72 = :sync-for-iterator.{core::Iterator::current};
        #t70.{core::Set::add}{Invariant}(#t72);
      }
    }
  } =>#t70;
  core::Set<dynamic>* set81ambiguous = block {
    final core::Set<dynamic>* #t73 = new col::_CompactLinkedHashSet::•<dynamic>();
    final core::Iterable<dynamic>* #t74 = null;
    if(!#t74.{core::Object::==}(null)) {
      core::Iterator<dynamic>* :sync-for-iterator = #t74.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t75 = :sync-for-iterator.{core::Iterator::current};
        {
          final dynamic #t76 = #t75 as{TypeError} dynamic;
          #t73.{core::Set::add}{Invariant}(#t76);
        }
      }
    }
    {
      core::Iterator<dynamic>* :sync-for-iterator = <dynamic>[].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t77 = :sync-for-iterator.{core::Iterator::current};
        {
          final dynamic #t78 = #t77 as{TypeError} dynamic;
          #t73.{core::Set::add}{Invariant}(#t78);
        }
      }
    }
  } =>#t73;
  core::Map<core::String*, core::int*>* map80 = block {
    final core::Map<core::String*, core::int*>* #t79 = <core::String*, core::int*>{};
    final core::Map<core::String*, core::int*>* #t80 = null;
    if(!#t80.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = #t80.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::int*>* #t81 = :sync-for-iterator.{core::Iterator::current};
        #t79.{core::Map::[]=}{Invariant}(#t81.{core::MapEntry::key}, #t81.{core::MapEntry::value});
      }
    }
  } =>#t79;
  core::Map<core::String*, core::int*>* map90 = block {
    final core::Map<core::String*, core::int*>* #t82 = <core::String*, core::int*>{};
    {
      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = self::bar<core::String*, core::int*>().{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::int*>* #t83 = :sync-for-iterator.{core::Iterator::current};
        #t82.{core::Map::[]=}{Invariant}(#t83.{core::MapEntry::key}, #t83.{core::MapEntry::value});
      }
    }
  } =>#t82;
  core::List<core::int*>* list100 = block {
    final core::List<core::int*>* #t84 = <core::int*>[];
    {
      core::Iterator<core::num*>* :sync-for-iterator = listNum.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t85 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int* #t86 = #t85 as{TypeError} core::int*;
          #t84.{core::List::add}{Invariant}(#t86);
        }
      }
    }
  } =>#t84;
  core::Map<core::num*, core::int*>* map100 = block {
    final core::Map<core::num*, core::int*>* #t87 = <core::num*, core::int*>{};
    {
      core::Iterator<core::MapEntry<core::int*, core::num*>>* :sync-for-iterator = mapIntNum.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<dynamic, dynamic>* #t88 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::num* #t89 = #t88.{core::MapEntry::key} as{TypeError} core::num*;
          final core::int* #t90 = #t88.{core::MapEntry::value} as{TypeError} core::int*;
          #t87.{core::Map::[]=}{Invariant}(#t89, #t90);
        }
      }
    }
  } =>#t87;
  core::List<core::int*>* list110 = block {
    final core::List<core::int*>* #t91 = <core::int*>[];
    {
      core::Iterator<dynamic>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t92 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int* #t93 = #t92 as{TypeError} core::int*;
          #t91.{core::List::add}{Invariant}(#t93);
        }
      }
    }
  } =>#t91;
  core::Map<core::num*, core::int*>* map110 = block {
    final core::Map<core::num*, core::int*>* #t94 = <core::num*, core::int*>{};
    {
      core::Iterator<core::MapEntry<dynamic, dynamic>>* :sync-for-iterator = (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<dynamic, dynamic>* #t95 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::num* #t96 = #t95.{core::MapEntry::key} as{TypeError} core::num*;
          final core::int* #t97 = #t95.{core::MapEntry::value} as{TypeError} core::int*;
          #t94.{core::Map::[]=}{Invariant}(#t96, #t97);
        }
      }
    }
  } =>#t94;
}
static method main() → dynamic {}
