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 = <Never>[];
    final core::Iterable<Never>? #t3 = n1;
    if(!(#t3 == null))
      #t2.{core::List::addAll}{Invariant}(#t3{core::Iterable<Never>}){(core::Iterable<Never>) → void};
  } =>#t2;
  core::List<dynamic> l3 = <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 = <Never>[];
    final core::Iterable<Never>? #t5 = n2;
    if(!(#t5 == null))
      #t4.{core::List::addAll}{Invariant}(#t5{core::Iterable<Never>}){(core::Iterable<Never>) → void};
  } =>#t4;
  core::List<dynamic> l5 = <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 = <Never>[];
    final core::Iterable<Never>? #t7 = n3;
    if(!(#t7 == null))
      #t6.{core::List::addAll}{Invariant}(#t7{core::Iterable<Never>}){(core::Iterable<Never>) → void};
  } =>#t6;
  core::Set<Never> s1 = block {
    final core::Set<Never> #t8 = col::LinkedHashSet::of<Never>(n1);
    #t8.{core::Set::add}{Invariant}(n1){(Never) → core::bool};
  } =>#t8;
  core::Set<Never> s2 = block {
    final core::Set<Never> #t9 = col::LinkedHashSet::•<Never>();
    final core::Iterable<Never>? #t10 = n1;
    if(!(#t10 == null))
      #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<Never>}){(core::Iterable<Never>) → void};
    #t9.{core::Set::add}{Invariant}(n1){(Never) → core::bool};
  } =>#t9;
  core::Set<dynamic> s3 = block {
    final core::Set<dynamic> #t11 = col::LinkedHashSet::•<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};
               ^"){(dynamic) → core::bool};
    #t11.{core::Set::add}{Invariant}(n1){(dynamic) → core::bool};
  } =>#t11;
  core::Set<Never> s4 = block {
    final core::Set<Never> #t12 = col::LinkedHashSet::•<Never>();
    final core::Iterable<Never>? #t13 = n2;
    if(!(#t13 == null))
      #t12.{core::Set::addAll}{Invariant}(#t13{core::Iterable<Never>}){(core::Iterable<Never>) → void};
    #t12.{core::Set::add}{Invariant}(n1){(Never) → core::bool};
  } =>#t12;
  core::Set<dynamic> s5 = block {
    final core::Set<dynamic> #t14 = col::LinkedHashSet::•<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};
               ^"){(dynamic) → core::bool};
    #t14.{core::Set::add}{Invariant}(n1){(dynamic) → core::bool};
  } =>#t14;
  core::Set<Never> s6 = block {
    final core::Set<Never> #t15 = col::LinkedHashSet::•<Never>();
    final core::Iterable<Never>? #t16 = n3;
    if(!(#t16 == null))
      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<Never>}){(core::Iterable<Never>) → void};
    #t15.{core::Set::add}{Invariant}(n1){(Never) → core::bool};
  } =>#t15;
  core::Map<Never, Never> m1 = block {
    final core::Map<Never, Never> #t17 = <Never, Never>{};
    for (final has-declared-initializer core::MapEntry<Never, Never> #t18 in n1.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
      #t17.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}{Never}, #t18.{core::MapEntry::value}{Never}){(Never, Never) → void};
    #t17.{core::Map::[]=}{Invariant}(n1, n1){(Never, Never) → void};
  } =>#t17;
  core::Map<Never, Never> m2 = block {
    final core::Map<Never, Never> #t19 = <Never, Never>{};
    final core::Map<Never, Never>? #t20 = n1;
    if(!(#t20 == null))
      for (final has-declared-initializer core::MapEntry<Never, Never> #t21 in #t20{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
        #t19.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{Never}, #t21.{core::MapEntry::value}{Never}){(Never, Never) → void};
    #t19.{core::Map::[]=}{Invariant}(n1, n1){(Never, Never) → void};
  } =>#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 == null))
      for (final has-declared-initializer core::MapEntry<Never, Never> #t24 in #t23{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
        #t22.{core::Map::[]=}{Invariant}(#t24.{core::MapEntry::key}{Never}, #t24.{core::MapEntry::value}{Never}){(Never, Never) → void};
    #t22.{core::Map::[]=}{Invariant}(n1, n1){(Never, Never) → void};
  } =>#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 == null))
      for (final has-declared-initializer core::MapEntry<Never, Never> #t27 in #t26{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}{Never}, #t27.{core::MapEntry::value}{Never}){(Never, Never) → void};
    #t25.{core::Map::[]=}{Invariant}(n1, n1){(Never, Never) → void};
  } =>#t25;
}
static method test2<N1 extends Never, N2 extends Never?, N3 extends 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 = <Never>[];
    final core::Iterable<Never>? #t30 = n1;
    if(!(#t30 == null))
      #t29.{core::List::addAll}{Invariant}(#t30{core::Iterable<Never>}){(core::Iterable<Never>) → void};
  } =>#t29;
  core::List<dynamic> l3 = <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 = <Never>[];
    final core::Iterable<Never>? #t32 = n2;
    if(!(#t32 == null))
      #t31.{core::List::addAll}{Invariant}(#t32{core::Iterable<Never>}){(core::Iterable<Never>) → void};
  } =>#t31;
  core::List<dynamic> l5 = <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 = <Never>[];
    final core::Iterable<Never>? #t34 = n3;
    if(!(#t34 == null))
      #t33.{core::List::addAll}{Invariant}(#t34{core::Iterable<Never>}){(core::Iterable<Never>) → void};
  } =>#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){(self::test2::N1) → core::bool};
  } =>#t35;
  core::Set<self::test2::N1> s2 = block {
    final core::Set<self::test2::N1> #t36 = col::LinkedHashSet::•<self::test2::N1>();
    final core::Iterable<self::test2::N1>? #t37 = n1;
    if(!(#t37 == null))
      #t36.{core::Set::addAll}{Invariant}(#t37{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
    #t36.{core::Set::add}{Invariant}(n1){(self::test2::N1) → core::bool};
  } =>#t36;
  core::Set<dynamic> s3 = block {
    final core::Set<dynamic> #t38 = col::LinkedHashSet::•<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};
               ^"){(dynamic) → core::bool};
    #t38.{core::Set::add}{Invariant}(n1){(dynamic) → core::bool};
  } =>#t38;
  core::Set<self::test2::N1> s4 = block {
    final core::Set<self::test2::N1> #t39 = col::LinkedHashSet::•<self::test2::N1>();
    final core::Iterable<self::test2::N1>? #t40 = n2;
    if(!(#t40 == null))
      #t39.{core::Set::addAll}{Invariant}(#t40{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
    #t39.{core::Set::add}{Invariant}(n1){(self::test2::N1) → core::bool};
  } =>#t39;
  core::Set<dynamic> s5 = block {
    final core::Set<dynamic> #t41 = col::LinkedHashSet::•<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};
               ^"){(dynamic) → core::bool};
    #t41.{core::Set::add}{Invariant}(n1){(dynamic) → core::bool};
  } =>#t41;
  core::Set<self::test2::N1> s6 = block {
    final core::Set<self::test2::N1> #t42 = col::LinkedHashSet::•<self::test2::N1>();
    final core::Iterable<self::test2::N1>? #t43 = n3;
    if(!(#t43 == null))
      #t42.{core::Set::addAll}{Invariant}(#t43{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
    #t42.{core::Set::add}{Invariant}(n1){(self::test2::N1) → core::bool};
  } =>#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>{};
    for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t45 in n1.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
      #t44.{core::Map::[]=}{Invariant}(#t45.{core::MapEntry::key}{self::test2::N1}, #t45.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
    #t44.{core::Map::[]=}{Invariant}(n1, n1){(self::test2::N1, self::test2::N1) → void};
  } =>#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 == null))
      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t48 in #t47{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
        #t46.{core::Map::[]=}{Invariant}(#t48.{core::MapEntry::key}{self::test2::N1}, #t48.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
    #t46.{core::Map::[]=}{Invariant}(n1, n1){(self::test2::N1, self::test2::N1) → void};
  } =>#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 == null))
      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t51 in #t50{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
        #t49.{core::Map::[]=}{Invariant}(#t51.{core::MapEntry::key}{self::test2::N1}, #t51.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
    #t49.{core::Map::[]=}{Invariant}(n1, n1){(self::test2::N1, self::test2::N1) → void};
  } =>#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 == null))
      for (final has-declared-initializer core::MapEntry<self::test2::N1, self::test2::N1> #t54 in #t53{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
        #t52.{core::Map::[]=}{Invariant}(#t54.{core::MapEntry::key}{self::test2::N1}, #t54.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
    #t52.{core::Map::[]=}{Invariant}(n1, n1){(self::test2::N1, self::test2::N1) → void};
  } =>#t52;
}
static method main() → dynamic {}
