library;
//
// Problems in library:
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:66: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_nnbd_opt_out/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
//   dynamic map24ambiguous = {...spread, ...mapSpread};
//                            ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:100: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_nnbd_opt_out/spread_collection_inference.dart:102: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_nnbd_opt_out/spread_collection_inference.dart:105: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_nnbd_opt_out/spread_collection_inference.dart:108: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_nnbd_opt_out/spread_collection_inference.dart:111: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_nnbd_opt_out/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
//   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
//                                      ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:115:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
//   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
//                                     ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:117: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_nnbd_opt_out/spread_collection_inference.dart:119:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
//                                      ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:121:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
//                                     ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:123: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_nnbd_opt_out/spread_collection_inference.dart:125: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_nnbd_opt_out/spread_collection_inference.dart:127: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_nnbd_opt_out/spread_collection_inference.dart:129: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_nnbd_opt_out/spread_collection_inference.dart:131: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_nnbd_opt_out/spread_collection_inference.dart:133:30: Error: Can't spread a value with static type 'Null'.
//   List<int> lhs70 = <int>[...null];
//                              ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:135:29: Error: Can't spread a value with static type 'Null'.
//   Set<int> set70 = <int>{...null};
//                             ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
//     ...null,
//        ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:139:8: Error: Expected ',' before this.
//     ...null,
//        ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:144: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}(#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}(#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::[]=}(#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::[]=}(#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}(#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}(#t12);
      }
    }
    #t11.{core::Set::add}(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}(#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::[]=}(#t17.{core::MapEntry::key}, #t17.{core::MapEntry::value});
      }
    }
    #t16.{core::Map::[]=}("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::[]=}(#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}(#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}(#t23);
      }
    }
    #t22.{core::Set::add}(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::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
      }
    }
    #t24.{core::Map::[]=}("baz", 42);
  } =>#t24;
  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:66: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}(#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}(#t29);
      }
    }
    #t28.{core::Set::add}(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}(#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::[]=}(#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}(#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}(#t38);
      }
    }
    #t37.{core::Set::add}(<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}(#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::[]=}(#t43.{core::MapEntry::key}, #t43.{core::MapEntry::value});
      }
    }
  } =>#t42;
  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:98: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_nnbd_opt_out/spread_collection_inference.dart:100: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}(#t46);
      }
    }
  } =>#t45) as{TypeError} core::int*;
  core::int* set30 = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:102: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}(#t49);
      }
    }
    #t48.{core::Set::add}(42);
  } =>#t48) as{TypeError} core::int*;
  core::int* set30ambiguous = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:105: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}(#t53);
        }
      }
    }
  } =>#t51) as{TypeError} core::int*;
  core::int* map30 = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:108: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::[]=}(#t56.{core::MapEntry::key}, #t56.{core::MapEntry::value});
      }
    }
    #t55.{core::Map::[]=}("baz", 42);
  } =>#t55) as{TypeError} core::int*;
  core::int* map30ambiguous = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:111: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::[]=}(#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_nnbd_opt_out/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
  List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                     ^"];
  core::Set<dynamic>* set40 = let final core::Set<dynamic>* #t60 = new col::_CompactLinkedHashSet::•<dynamic>() in let final core::bool #t61 = #t60.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:115:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
  Set<dynamic> set40 = <dynamic>{...notSpreadInt};
                                    ^") in #t60;
  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:117: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_nnbd_opt_out/spread_collection_inference.dart:119:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
  List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
                                     ^"];
  core::Set<dynamic>* set50 = let final core::Set<dynamic>* #t62 = new col::_CompactLinkedHashSet::•<dynamic>() in let final core::bool #t63 = #t62.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:121:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
  Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
                                    ^") in #t62;
  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:123: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_nnbd_opt_out/spread_collection_inference.dart:125: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 = let final core::Set<core::String*>* #t64 = new col::_CompactLinkedHashSet::•<core::String*>() in let final core::bool #t65 = #t64.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:127:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
  Set<String> set60 = <String>{...spread};
                                  ^") in #t64;
  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:129: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_nnbd_opt_out/spread_collection_inference.dart:131: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_nnbd_opt_out/spread_collection_inference.dart:133:30: Error: Can't spread a value with static type 'Null'.
  List<int> lhs70 = <int>[...null];
                             ^"];
  core::Set<core::int*>* set70 = let final core::Set<core::int*>* #t66 = new col::_CompactLinkedHashSet::•<core::int*>() in let final core::bool #t67 = #t66.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:135:29: Error: Can't spread a value with static type 'Null'.
  Set<int> set70 = <int>{...null};
                            ^") in #t66;
  core::Set<dynamic>* set71ambiguous = block {
    final core::Set<dynamic>* #t68 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t68.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:139: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 #t69 = :sync-for-iterator.{core::Iterator::current};
        {
          final dynamic #t70 = #t69 as{TypeError} dynamic;
          #t68.{core::Set::add}(#t70);
        }
      }
    }
  } =>#t68;
  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart:144: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*>* #t71 = <core::int*>[];
    final core::Iterable<core::int*>* #t72 = null;
    if(!#t72.{core::Object::==}(null)) {
      core::Iterator<core::int*>* :sync-for-iterator = #t72.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t73 = :sync-for-iterator.{core::Iterator::current};
        #t71.{core::List::add}(#t73);
      }
    }
  } =>#t71;
  core::Set<core::int*>* set80 = block {
    final core::Set<core::int*>* #t74 = new col::_CompactLinkedHashSet::•<core::int*>();
    final core::Iterable<core::int*>* #t75 = null;
    if(!#t75.{core::Object::==}(null)) {
      core::Iterator<core::int*>* :sync-for-iterator = #t75.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::int* #t76 = :sync-for-iterator.{core::Iterator::current};
        #t74.{core::Set::add}(#t76);
      }
    }
  } =>#t74;
  core::Set<dynamic>* set81ambiguous = block {
    final core::Set<dynamic>* #t77 = new col::_CompactLinkedHashSet::•<dynamic>();
    final core::Iterable<dynamic>* #t78 = null;
    if(!#t78.{core::Object::==}(null)) {
      core::Iterator<dynamic>* :sync-for-iterator = #t78.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t79 = :sync-for-iterator.{core::Iterator::current};
        {
          final dynamic #t80 = #t79 as{TypeError} dynamic;
          #t77.{core::Set::add}(#t80);
        }
      }
    }
    {
      core::Iterator<dynamic>* :sync-for-iterator = <dynamic>[].{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t81 = :sync-for-iterator.{core::Iterator::current};
        {
          final dynamic #t82 = #t81 as{TypeError} dynamic;
          #t77.{core::Set::add}(#t82);
        }
      }
    }
  } =>#t77;
  core::Map<core::String*, core::int*>* map80 = block {
    final core::Map<core::String*, core::int*>* #t83 = <core::String*, core::int*>{};
    final core::Map<core::String*, core::int*>* #t84 = null;
    if(!#t84.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = #t84.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::String*, core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
        #t83.{core::Map::[]=}(#t85.{core::MapEntry::key}, #t85.{core::MapEntry::value});
      }
    }
  } =>#t83;
  core::Map<core::String*, core::int*>* map90 = block {
    final core::Map<core::String*, core::int*>* #t86 = <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*>* #t87 = :sync-for-iterator.{core::Iterator::current};
        #t86.{core::Map::[]=}(#t87.{core::MapEntry::key}, #t87.{core::MapEntry::value});
      }
    }
  } =>#t86;
  core::List<core::int*>* list100 = block {
    final core::List<core::int*>* #t88 = <core::int*>[];
    {
      core::Iterator<core::num*>* :sync-for-iterator = listNum.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t89 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int* #t90 = #t89 as{TypeError} core::int*;
          #t88.{core::List::add}(#t90);
        }
      }
    }
  } =>#t88;
  core::Map<core::num*, core::int*>* map100 = block {
    final core::Map<core::num*, core::int*>* #t91 = <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>* #t92 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::num* #t93 = #t92.{core::MapEntry::key} as{TypeError} core::num*;
          final core::int* #t94 = #t92.{core::MapEntry::value} as{TypeError} core::int*;
          #t91.{core::Map::[]=}(#t93, #t94);
        }
      }
    }
  } =>#t91;
  core::List<core::int*>* list110 = block {
    final core::List<core::int*>* #t95 = <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 #t96 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int* #t97 = #t96 as{TypeError} core::int*;
          #t95.{core::List::add}(#t97);
        }
      }
    }
  } =>#t95;
  core::Map<core::num*, core::int*>* map110 = block {
    final core::Map<core::num*, core::int*>* #t98 = <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>* #t99 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
          final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
          #t98.{core::Map::[]=}(#t100, #t101);
        }
      }
    }
  } =>#t98;
}
static method main() → dynamic {}
