library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue42758.dart:7:17: Warning: Operand of null-aware operation '...?' has type 'Never' which excludes null.
//   var l2 = [...?n1];
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:8:16: Error: Can't spread a value with static type 'Never?'.
//   var l3 = [...n2];
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:10:16: Error: Can't spread a value with static type 'Null'.
//   var l5 = [...n3];
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:13:17: Warning: Operand of null-aware operation '...?' has type 'Never' which excludes null.
//   var s2 = {...?n1, n1};
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
//   var s3 = {...n2, n1};
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
//   var s5 = {...n3, n1};
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:19:17: Warning: Operand of null-aware operation '...?' has type 'Never' which excludes null.
//   var m2 = {...?n1, n1: n1};
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:20:16: Error: Can't spread a value with static type 'Never?'.
//   var m3 = {...n2, n1: n1};
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:22:16: Error: Can't spread a value with static type 'Null'.
//   var m5 = {...n3, n1: n1};
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:29:17: Warning: Operand of null-aware operation '...?' has type 'N1' which excludes null.
//   var l2 = [...?n1];
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:30:16: Error: Can't spread a value with static type 'N2'.
//   var l3 = [...n2];
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:32:16: Error: Can't spread a value with static type 'N3'.
//   var l5 = [...n3];
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:35:17: Warning: Operand of null-aware operation '...?' has type 'N1' which excludes null.
//   var s2 = {...?n1, n1};
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
//   var s3 = {...n2, n1};
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
//   var s5 = {...n3, n1};
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:41:17: Warning: Operand of null-aware operation '...?' has type 'N1' which excludes null.
//   var m2 = {...?n1, n1: n1};
//                 ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:42:16: Error: Can't spread a value with static type 'N2'.
//   var m3 = {...n2, n1: n1};
//                ^
//
// pkg/front_end/testcases/nnbd/issue42758.dart:44:16: Error: Can't spread a value with static type 'N3'.
//   var m5 = {...n3, n1: n1};
//                ^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method test1(Never n1, Never? n2, Null n3) → dynamic {
  core::List<Never> l1 = block {
    final core::List<Never> #t1 = core::List::of<Never>(n1);
  } =>#t1;
  core::List<Never> l2 = block {
    final core::List<Never> #t2 = core::_GrowableList::•<Never>(0);
    final core::Iterable<Never>? #t3 = n1;
    if(!#t3.{core::Object::==}(null))
      #t2.{core::List::addAll}{Invariant}(#t3{core::Iterable<Never>});
  } =>#t2;
  core::List<dynamic> l3 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:8:16: Error: Can't spread a value with static type 'Never?'.
  var l3 = [...n2];
               ^");
  core::List<Never> l4 = block {
    final core::List<Never> #t4 = core::_GrowableList::•<Never>(0);
    final core::Iterable<Never>? #t5 = n2;
    if(!#t5.{core::Object::==}(null))
      #t4.{core::List::addAll}{Invariant}(#t5{core::Iterable<Never>});
  } =>#t4;
  core::List<dynamic> l5 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:10:16: Error: Can't spread a value with static type 'Null'.
  var l5 = [...n3];
               ^");
  core::List<Never> l6 = block {
    final core::List<Never> #t6 = core::_GrowableList::•<Never>(0);
    final core::Iterable<Never>? #t7 = n3;
    if(!#t7.{core::Object::==}(null))
      #t6.{core::List::addAll}{Invariant}(#t7{core::Iterable<Never>});
  } =>#t6;
  core::Set<Never> s1 = block {
    final core::Set<Never> #t8 = col::LinkedHashSet::of<Never>(n1);
    #t8.{core::Set::add}{Invariant}(n1);
  } =>#t8;
  core::Set<Never> s2 = block {
    final core::Set<Never> #t9 = new col::_CompactLinkedHashSet::•<Never>();
    final core::Iterable<Never>? #t10 = n1;
    if(!#t10.{core::Object::==}(null))
      #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<Never>});
    #t9.{core::Set::add}{Invariant}(n1);
  } =>#t9;
  core::Set<dynamic> s3 = block {
    final core::Set<dynamic> #t11 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t11.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
  var s3 = {...n2, n1};
               ^");
    #t11.{core::Set::add}{Invariant}(n1);
  } =>#t11;
  core::Set<Never> s4 = block {
    final core::Set<Never> #t12 = new col::_CompactLinkedHashSet::•<Never>();
    final core::Iterable<Never>? #t13 = n2;
    if(!#t13.{core::Object::==}(null))
      #t12.{core::Set::addAll}{Invariant}(#t13{core::Iterable<Never>});
    #t12.{core::Set::add}{Invariant}(n1);
  } =>#t12;
  core::Set<dynamic> s5 = block {
    final core::Set<dynamic> #t14 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t14.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
  var s5 = {...n3, n1};
               ^");
    #t14.{core::Set::add}{Invariant}(n1);
  } =>#t14;
  core::Set<Never> s6 = block {
    final core::Set<Never> #t15 = new col::_CompactLinkedHashSet::•<Never>();
    final core::Iterable<Never>? #t16 = n3;
    if(!#t16.{core::Object::==}(null))
      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<Never>});
    #t15.{core::Set::add}{Invariant}(n1);
  } =>#t15;
  core::Map<Never, Never> m1 = block {
    final core::Map<Never, Never> #t17 = <Never, Never>{};
    {
      core::Iterator<core::MapEntry<<BottomType>, <BottomType>>> :sync-for-iterator = n1.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<Never, Never> #t18 = :sync-for-iterator.{core::Iterator::current};
        #t17.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}, #t18.{core::MapEntry::value});
      }
    }
    #t17.{core::Map::[]=}{Invariant}(n1, n1);
  } =>#t17;
  core::Map<Never, Never> m2 = block {
    final core::Map<Never, Never> #t19 = <Never, Never>{};
    final core::Map<Never, Never>? #t20 = n1;
    if(!#t20.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t20{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<Never, Never> #t21 = :sync-for-iterator.{core::Iterator::current};
        #t19.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
      }
    }
    #t19.{core::Map::[]=}{Invariant}(n1, n1);
  } =>#t19;
  core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:20:16: Error: Can't spread a value with static type 'Never?'.
  var m3 = {...n2, n1: n1};
               ^": null, n1: n1};
  core::Map<Never, Never> m4 = block {
    final core::Map<Never, Never> #t22 = <Never, Never>{};
    final core::Map<Never, Never>? #t23 = n2;
    if(!#t23.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t23{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<Never, Never> #t24 = :sync-for-iterator.{core::Iterator::current};
        #t22.{core::Map::[]=}{Invariant}(#t24.{core::MapEntry::key}, #t24.{core::MapEntry::value});
      }
    }
    #t22.{core::Map::[]=}{Invariant}(n1, n1);
  } =>#t22;
  core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:22:16: Error: Can't spread a value with static type 'Null'.
  var m5 = {...n3, n1: n1};
               ^": null, n1: n1};
  core::Map<Never, Never> m6 = block {
    final core::Map<Never, Never> #t25 = <Never, Never>{};
    final core::Map<Never, Never>? #t26 = n3;
    if(!#t26.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<Never, Never>> :sync-for-iterator = #t26{core::Map<Never, Never>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<Never, Never> #t27 = :sync-for-iterator.{core::Iterator::current};
        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
      }
    }
    #t25.{core::Map::[]=}{Invariant}(n1, n1);
  } =>#t25;
}
static method test2<N1 extends Never = Never, N2 extends Never? = Never?, N3 extends Null = Null>(self::test2::N1 n1, self::test2::N2% n2, self::test2::N3% n3) → dynamic {
  core::List<Never> l1 = block {
    final core::List<Never> #t28 = core::List::of<Never>(n1);
  } =>#t28;
  core::List<Never> l2 = block {
    final core::List<Never> #t29 = core::_GrowableList::•<Never>(0);
    final core::Iterable<Never>? #t30 = n1;
    if(!#t30.{core::Object::==}(null))
      #t29.{core::List::addAll}{Invariant}(#t30{core::Iterable<Never>});
  } =>#t29;
  core::List<dynamic> l3 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:30:16: Error: Can't spread a value with static type 'N2'.
  var l3 = [...n2];
               ^");
  core::List<Never> l4 = block {
    final core::List<Never> #t31 = core::_GrowableList::•<Never>(0);
    final core::Iterable<Never>? #t32 = n2;
    if(!#t32.{core::Object::==}(null))
      #t31.{core::List::addAll}{Invariant}(#t32{core::Iterable<Never>});
  } =>#t31;
  core::List<dynamic> l5 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:32:16: Error: Can't spread a value with static type 'N3'.
  var l5 = [...n3];
               ^");
  core::List<Never> l6 = block {
    final core::List<Never> #t33 = core::_GrowableList::•<Never>(0);
    final core::Iterable<Never>? #t34 = n3;
    if(!#t34.{core::Object::==}(null))
      #t33.{core::List::addAll}{Invariant}(#t34{core::Iterable<Never>});
  } =>#t33;
  core::Set<self::test2::N1> s1 = block {
    final core::Set<self::test2::N1> #t35 = col::LinkedHashSet::of<self::test2::N1>(n1);
    #t35.{core::Set::add}{Invariant}(n1);
  } =>#t35;
  core::Set<self::test2::N1> s2 = block {
    final core::Set<self::test2::N1> #t36 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
    final core::Iterable<self::test2::N1>? #t37 = n1;
    if(!#t37.{core::Object::==}(null))
      #t36.{core::Set::addAll}{Invariant}(#t37{core::Iterable<self::test2::N1>});
    #t36.{core::Set::add}{Invariant}(n1);
  } =>#t36;
  core::Set<dynamic> s3 = block {
    final core::Set<dynamic> #t38 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t38.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
  var s3 = {...n2, n1};
               ^");
    #t38.{core::Set::add}{Invariant}(n1);
  } =>#t38;
  core::Set<self::test2::N1> s4 = block {
    final core::Set<self::test2::N1> #t39 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
    final core::Iterable<self::test2::N1>? #t40 = n2;
    if(!#t40.{core::Object::==}(null))
      #t39.{core::Set::addAll}{Invariant}(#t40{core::Iterable<self::test2::N1>});
    #t39.{core::Set::add}{Invariant}(n1);
  } =>#t39;
  core::Set<dynamic> s5 = block {
    final core::Set<dynamic> #t41 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t41.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
  var s5 = {...n3, n1};
               ^");
    #t41.{core::Set::add}{Invariant}(n1);
  } =>#t41;
  core::Set<self::test2::N1> s6 = block {
    final core::Set<self::test2::N1> #t42 = new col::_CompactLinkedHashSet::•<self::test2::N1>();
    final core::Iterable<self::test2::N1>? #t43 = n3;
    if(!#t43.{core::Object::==}(null))
      #t42.{core::Set::addAll}{Invariant}(#t43{core::Iterable<self::test2::N1>});
    #t42.{core::Set::add}{Invariant}(n1);
  } =>#t42;
  core::Map<self::test2::N1, self::test2::N1> m1 = block {
    final core::Map<self::test2::N1, self::test2::N1> #t44 = <self::test2::N1, self::test2::N1>{};
    {
      core::Iterator<core::MapEntry<<BottomType>, <BottomType>>> :sync-for-iterator = n1.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<self::test2::N1, self::test2::N1> #t45 = :sync-for-iterator.{core::Iterator::current};
        #t44.{core::Map::[]=}{Invariant}(#t45.{core::MapEntry::key}, #t45.{core::MapEntry::value});
      }
    }
    #t44.{core::Map::[]=}{Invariant}(n1, n1);
  } =>#t44;
  core::Map<self::test2::N1, self::test2::N1> m2 = block {
    final core::Map<self::test2::N1, self::test2::N1> #t46 = <self::test2::N1, self::test2::N1>{};
    final core::Map<self::test2::N1, self::test2::N1>? #t47 = n1;
    if(!#t47.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t47{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<self::test2::N1, self::test2::N1> #t48 = :sync-for-iterator.{core::Iterator::current};
        #t46.{core::Map::[]=}{Invariant}(#t48.{core::MapEntry::key}, #t48.{core::MapEntry::value});
      }
    }
    #t46.{core::Map::[]=}{Invariant}(n1, n1);
  } =>#t46;
  core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:42:16: Error: Can't spread a value with static type 'N2'.
  var m3 = {...n2, n1: n1};
               ^": null, n1: n1};
  core::Map<self::test2::N1, self::test2::N1> m4 = block {
    final core::Map<self::test2::N1, self::test2::N1> #t49 = <self::test2::N1, self::test2::N1>{};
    final core::Map<self::test2::N1, self::test2::N1>? #t50 = n2;
    if(!#t50.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t50{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<self::test2::N1, self::test2::N1> #t51 = :sync-for-iterator.{core::Iterator::current};
        #t49.{core::Map::[]=}{Invariant}(#t51.{core::MapEntry::key}, #t51.{core::MapEntry::value});
      }
    }
    #t49.{core::Map::[]=}{Invariant}(n1, n1);
  } =>#t49;
  core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:44:16: Error: Can't spread a value with static type 'N3'.
  var m5 = {...n3, n1: n1};
               ^": null, n1: n1};
  core::Map<self::test2::N1, self::test2::N1> m6 = block {
    final core::Map<self::test2::N1, self::test2::N1> #t52 = <self::test2::N1, self::test2::N1>{};
    final core::Map<self::test2::N1, self::test2::N1>? #t53 = n3;
    if(!#t53.{core::Object::==}(null)) {
      core::Iterator<core::MapEntry<self::test2::N1, self::test2::N1>> :sync-for-iterator = #t53{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<self::test2::N1, self::test2::N1> #t54 = :sync-for-iterator.{core::Iterator::current};
        #t52.{core::Map::[]=}{Invariant}(#t54.{core::MapEntry::key}, #t54.{core::MapEntry::value});
      }
    }
    #t52.{core::Map::[]=}{Invariant}(n1, n1);
  } =>#t52;
}
static method main() → dynamic {}
