library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {...a}, // Error.
//         ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {...b}, // Error.
//         ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {...c}, // Error.
//         ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:11:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {...d}, // Error.
//         ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:12:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     <int, int>{...a}, // Error.
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:12:19: Error: Unexpected type 'List<int>?' of a map spread entry.  Expected 'dynamic' or a Map.
//  - 'List' is from 'dart:core'.
//     <int, int>{...a}, // Error.
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     <int>{...d}, // Error.
//              ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//     <int>{...d}, // Error.
//              ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {if (condition) ...a}, // Error.
//                        ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {if (condition) ...b}, // Error.
//                        ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {if (condition) ...c}, // Error.
//                        ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {if (condition) ...d}, // Error.
//                        ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (dynamic e in iterable) ...a}, // Error.
//                                     ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (dynamic e in iterable) ...b}, // Error.
//                                     ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (dynamic e in iterable) ...c}, // Error.
//                                     ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (dynamic e in iterable) ...d}, // Error.
//                                     ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (int i = 0; i < 42; ++i) ...a}, // Error.
//                                      ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (int i = 0; i < 42; ++i) ...b}, // Error.
//                                      ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (int i = 0; i < 42; ++i) ...c}, // Error.
//                                      ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (int i = 0; i < 42; ++i) ...d}, // Error.
//                                      ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {...x}, // Error.
//         ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {...y}, // Error.
//         ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {...z}, // Error.
//         ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:53:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {...w}, // Error.
//         ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     <int, int>{...x}, // Error.
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:54:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
//     <int, int>{...x}, // Error.
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     <int>{...w}, // Error.
//              ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
//     <int>{...w}, // Error.
//              ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {if (condition) ...x}, // Error.
//                        ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {if (condition) ...y}, // Error.
//                        ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {if (condition) ...z}, // Error.
//                        ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {if (condition) ...w}, // Error.
//                        ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (dynamic e in iterable) ...x}, // Error.
//                                     ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (dynamic e in iterable) ...y}, // Error.
//                                     ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (dynamic e in iterable) ...z}, // Error.
//                                     ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (dynamic e in iterable) ...w}, // Error.
//                                     ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (int i = 0; i < 42; ++i) ...x}, // Error.
//                                      ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (int i = 0; i < 42; ++i) ...y}, // Error.
//                                      ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (int i = 0; i < 42; ++i) ...z}, // Error.
//                                      ^
//
// pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     {for (int i = 0; i < 42; ++i) ...w}, // Error.
//                                      ^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method foo(core::bool condition, core::Iterable<dynamic> iterable, core::List<core::int>? a, core::Set<core::int>? b, core::Iterable<core::int>? c, core::Map<core::int, core::int>? d) → dynamic {
  return <core::Object>[ block {
    final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
    for (final has-declared-initializer dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {...a}, // Error.
        ^") {
      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
      #t1.{core::Set::add}{Invariant}(#t3){(core::int) → core::bool};
    }
  } =>#t1, block {
    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
    for (final has-declared-initializer dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {...b}, // Error.
        ^") {
      final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
      #t4.{core::Set::add}{Invariant}(#t6){(core::int) → core::bool};
    }
  } =>#t4, block {
    final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
    for (final has-declared-initializer dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {...c}, // Error.
        ^") {
      final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
      #t7.{core::Set::add}{Invariant}(#t9){(core::int) → core::bool};
    }
  } =>#t7, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:11:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {...d}, // Error.
        ^": null}, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:12:19: Error: Unexpected type 'List<int>?' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
    <int, int>{...a}, // Error.
                  ^": null}, block {
    final core::Set<core::int> #t10 = col::LinkedHashSet::•<core::int>();
    #t10.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
    <int>{...d}, // Error.
             ^"){(core::int) → core::bool};
  } =>#t10, block {
    final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final has-declared-initializer dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {if (condition) ...a}, // Error.
                       ^") {
        final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
        #t11.{core::Set::add}{Invariant}(#t13){(core::int) → core::bool};
      }
  } =>#t11, block {
    final core::Set<core::int> #t14 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final has-declared-initializer dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {if (condition) ...b}, // Error.
                       ^") {
        final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
        #t14.{core::Set::add}{Invariant}(#t16){(core::int) → core::bool};
      }
  } =>#t14, block {
    final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final has-declared-initializer dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {if (condition) ...c}, // Error.
                       ^") {
        final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
        #t17.{core::Set::add}{Invariant}(#t19){(core::int) → core::bool};
      }
  } =>#t17, block {
    final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
    if(condition)
      #t20.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {if (condition) ...d}, // Error.
                       ^", null){(core::int, core::int) → void};
  } =>#t20, block {
    final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final has-declared-initializer dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (dynamic e in iterable) ...a}, // Error.
                                    ^") {
        final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
        #t21.{core::Set::add}{Invariant}(#t23){(core::int) → core::bool};
      }
  } =>#t21, block {
    final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final has-declared-initializer dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (dynamic e in iterable) ...b}, // Error.
                                    ^") {
        final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
        #t24.{core::Set::add}{Invariant}(#t26){(core::int) → core::bool};
      }
  } =>#t24, block {
    final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final has-declared-initializer dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (dynamic e in iterable) ...c}, // Error.
                                    ^") {
        final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
        #t27.{core::Set::add}{Invariant}(#t29){(core::int) → core::bool};
      }
  } =>#t27, block {
    final core::Map<core::int, core::int> #t30 = <core::int, core::int>{};
    for (dynamic e in iterable)
      #t30.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (dynamic e in iterable) ...d}, // Error.
                                    ^", null){(core::int, core::int) → void};
  } =>#t30, block {
    final core::Set<core::int> #t31 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      for (final has-declared-initializer dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (int i = 0; i < 42; ++i) ...a}, // Error.
                                     ^") {
        final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
        #t31.{core::Set::add}{Invariant}(#t33){(core::int) → core::bool};
      }
  } =>#t31, block {
    final core::Set<core::int> #t34 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      for (final has-declared-initializer dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (int i = 0; i < 42; ++i) ...b}, // Error.
                                     ^") {
        final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
        #t34.{core::Set::add}{Invariant}(#t36){(core::int) → core::bool};
      }
  } =>#t34, block {
    final core::Set<core::int> #t37 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      for (final has-declared-initializer dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (int i = 0; i < 42; ++i) ...c}, // Error.
                                     ^") {
        final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
        #t37.{core::Set::add}{Invariant}(#t39){(core::int) → core::bool};
      }
  } =>#t37, block {
    final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      #t40.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (int i = 0; i < 42; ++i) ...d}, // Error.
                                     ^", null){(core::int, core::int) → void};
  } =>#t40, block {
    final core::Set<core::int> #t41 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t42 = a;
    if(!(#t42 == null))
      for (final has-declared-initializer dynamic #t43 in #t42{core::Iterable<dynamic>}) {
        final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
        #t41.{core::Set::add}{Invariant}(#t44){(core::int) → core::bool};
      }
  } =>#t41, block {
    final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t46 = b;
    if(!(#t46 == null))
      for (final has-declared-initializer dynamic #t47 in #t46{core::Iterable<dynamic>}) {
        final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
        #t45.{core::Set::add}{Invariant}(#t48){(core::int) → core::bool};
      }
  } =>#t45, block {
    final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t50 = c;
    if(!(#t50 == null))
      for (final has-declared-initializer dynamic #t51 in #t50{core::Iterable<dynamic>}) {
        final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
        #t49.{core::Set::add}{Invariant}(#t52){(core::int) → core::bool};
      }
  } =>#t49, block {
    final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
    final core::Map<core::int, core::int>? #t54 = d;
    if(!(#t54 == null))
      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
        #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
  } =>#t53, block {
    final core::Set<core::int> #t56 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t57 = a;
      if(!(#t57 == null))
        for (final has-declared-initializer dynamic #t58 in #t57{core::Iterable<dynamic>}) {
          final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
          #t56.{core::Set::add}{Invariant}(#t59){(core::int) → core::bool};
        }
    }
  } =>#t56, block {
    final core::Set<core::int> #t60 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t61 = b;
      if(!(#t61 == null))
        for (final has-declared-initializer dynamic #t62 in #t61{core::Iterable<dynamic>}) {
          final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
          #t60.{core::Set::add}{Invariant}(#t63){(core::int) → core::bool};
        }
    }
  } =>#t60, block {
    final core::Set<core::int> #t64 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t65 = c;
      if(!(#t65 == null))
        for (final has-declared-initializer dynamic #t66 in #t65{core::Iterable<dynamic>}) {
          final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
          #t64.{core::Set::add}{Invariant}(#t67){(core::int) → core::bool};
        }
    }
  } =>#t64, block {
    final core::Map<core::int, core::int> #t68 = <core::int, core::int>{};
    if(condition) {
      final core::Map<core::int, core::int>? #t69 = d;
      if(!(#t69 == null))
        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
          #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
    }
  } =>#t68, block {
    final core::Set<core::int> #t71 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable) {
      final core::Iterable<dynamic>? #t72 = a;
      if(!(#t72 == null))
        for (final has-declared-initializer dynamic #t73 in #t72{core::Iterable<dynamic>}) {
          final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
          #t71.{core::Set::add}{Invariant}(#t74){(core::int) → core::bool};
        }
    }
  } =>#t71, block {
    final core::Set<core::int> #t75 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable) {
      final core::Iterable<dynamic>? #t76 = b;
      if(!(#t76 == null))
        for (final has-declared-initializer dynamic #t77 in #t76{core::Iterable<dynamic>}) {
          final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
          #t75.{core::Set::add}{Invariant}(#t78){(core::int) → core::bool};
        }
    }
  } =>#t75, block {
    final core::Set<core::int> #t79 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable) {
      final core::Iterable<dynamic>? #t80 = c;
      if(!(#t80 == null))
        for (final has-declared-initializer dynamic #t81 in #t80{core::Iterable<dynamic>}) {
          final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
          #t79.{core::Set::add}{Invariant}(#t82){(core::int) → core::bool};
        }
    }
  } =>#t79, block {
    final core::Map<core::int, core::int> #t83 = <core::int, core::int>{};
    for (dynamic e in iterable) {
      final core::Map<core::int, core::int>? #t84 = d;
      if(!(#t84 == null))
        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
          #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
    }
  } =>#t83, block {
    final core::Set<core::int> #t86 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      final core::Iterable<dynamic>? #t87 = a;
      if(!(#t87 == null))
        for (final has-declared-initializer dynamic #t88 in #t87{core::Iterable<dynamic>}) {
          final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
          #t86.{core::Set::add}{Invariant}(#t89){(core::int) → core::bool};
        }
    }
  } =>#t86, block {
    final core::Set<core::int> #t90 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      final core::Iterable<dynamic>? #t91 = b;
      if(!(#t91 == null))
        for (final has-declared-initializer dynamic #t92 in #t91{core::Iterable<dynamic>}) {
          final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
          #t90.{core::Set::add}{Invariant}(#t93){(core::int) → core::bool};
        }
    }
  } =>#t90, block {
    final core::Set<core::int> #t94 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      final core::Iterable<dynamic>? #t95 = c;
      if(!(#t95 == null))
        for (final has-declared-initializer dynamic #t96 in #t95{core::Iterable<dynamic>}) {
          final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
          #t94.{core::Set::add}{Invariant}(#t97){(core::int) → core::bool};
        }
    }
  } =>#t94, block {
    final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      final core::Map<core::int, core::int>? #t99 = d;
      if(!(#t99 == null))
        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
          #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
    }
  } =>#t98];
}
static method bar<X extends core::List<core::int>?, Y extends core::Set<core::int>?, Z extends core::Iterable<core::int>?, W extends core::Map<core::int, core::int>?>(core::bool condition, core::Iterable<dynamic> iterable, self::bar::X% x, self::bar::Y% y, self::bar::Z% z, self::bar::W% w) → dynamic {
  return <core::Object>[ block {
    final core::Set<core::int> #t101 = col::LinkedHashSet::•<core::int>();
    for (final has-declared-initializer dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {...x}, // Error.
        ^") {
      final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
      #t101.{core::Set::add}{Invariant}(#t103){(core::int) → core::bool};
    }
  } =>#t101, block {
    final core::Set<core::int> #t104 = col::LinkedHashSet::•<core::int>();
    for (final has-declared-initializer dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {...y}, // Error.
        ^") {
      final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
      #t104.{core::Set::add}{Invariant}(#t106){(core::int) → core::bool};
    }
  } =>#t104, block {
    final core::Set<core::int> #t107 = col::LinkedHashSet::•<core::int>();
    for (final has-declared-initializer dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {...z}, // Error.
        ^") {
      final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
      #t107.{core::Set::add}{Invariant}(#t109){(core::int) → core::bool};
    }
  } =>#t107, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:53:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {...w}, // Error.
        ^": null}, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:54:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
    <int, int>{...x}, // Error.
                  ^": null}, block {
    final core::Set<core::int> #t110 = col::LinkedHashSet::•<core::int>();
    #t110.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
    <int>{...w}, // Error.
             ^"){(core::int) → core::bool};
  } =>#t110, block {
    final core::Set<core::int> #t111 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final has-declared-initializer dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {if (condition) ...x}, // Error.
                       ^") {
        final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
        #t111.{core::Set::add}{Invariant}(#t113){(core::int) → core::bool};
      }
  } =>#t111, block {
    final core::Set<core::int> #t114 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final has-declared-initializer dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {if (condition) ...y}, // Error.
                       ^") {
        final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
        #t114.{core::Set::add}{Invariant}(#t116){(core::int) → core::bool};
      }
  } =>#t114, block {
    final core::Set<core::int> #t117 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final has-declared-initializer dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {if (condition) ...z}, // Error.
                       ^") {
        final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
        #t117.{core::Set::add}{Invariant}(#t119){(core::int) → core::bool};
      }
  } =>#t117, block {
    final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
    if(condition)
      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {if (condition) ...w}, // Error.
                       ^", null){(core::int, core::int) → void};
  } =>#t120, block {
    final core::Set<core::int> #t121 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final has-declared-initializer dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (dynamic e in iterable) ...x}, // Error.
                                    ^") {
        final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
        #t121.{core::Set::add}{Invariant}(#t123){(core::int) → core::bool};
      }
  } =>#t121, block {
    final core::Set<core::int> #t124 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final has-declared-initializer dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (dynamic e in iterable) ...y}, // Error.
                                    ^") {
        final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
        #t124.{core::Set::add}{Invariant}(#t126){(core::int) → core::bool};
      }
  } =>#t124, block {
    final core::Set<core::int> #t127 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final has-declared-initializer dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (dynamic e in iterable) ...z}, // Error.
                                    ^") {
        final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
        #t127.{core::Set::add}{Invariant}(#t129){(core::int) → core::bool};
      }
  } =>#t127, block {
    final core::Map<core::int, core::int> #t130 = <core::int, core::int>{};
    for (dynamic e in iterable)
      #t130.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (dynamic e in iterable) ...w}, // Error.
                                    ^", null){(core::int, core::int) → void};
  } =>#t130, block {
    final core::Set<core::int> #t131 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      for (final has-declared-initializer dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (int i = 0; i < 42; ++i) ...x}, // Error.
                                     ^") {
        final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
        #t131.{core::Set::add}{Invariant}(#t133){(core::int) → core::bool};
      }
  } =>#t131, block {
    final core::Set<core::int> #t134 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      for (final has-declared-initializer dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (int i = 0; i < 42; ++i) ...y}, // Error.
                                     ^") {
        final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
        #t134.{core::Set::add}{Invariant}(#t136){(core::int) → core::bool};
      }
  } =>#t134, block {
    final core::Set<core::int> #t137 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      for (final has-declared-initializer dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (int i = 0; i < 42; ++i) ...z}, // Error.
                                     ^") {
        final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
        #t137.{core::Set::add}{Invariant}(#t139){(core::int) → core::bool};
      }
  } =>#t137, block {
    final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      #t140.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    {for (int i = 0; i < 42; ++i) ...w}, // Error.
                                     ^", null){(core::int, core::int) → void};
  } =>#t140, block {
    final core::Set<core::int> #t141 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t142 = x;
    if(!(#t142 == null))
      for (final has-declared-initializer dynamic #t143 in #t142{core::Iterable<dynamic>}) {
        final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
        #t141.{core::Set::add}{Invariant}(#t144){(core::int) → core::bool};
      }
  } =>#t141, block {
    final core::Set<core::int> #t145 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t146 = y;
    if(!(#t146 == null))
      for (final has-declared-initializer dynamic #t147 in #t146{core::Iterable<dynamic>}) {
        final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
        #t145.{core::Set::add}{Invariant}(#t148){(core::int) → core::bool};
      }
  } =>#t145, block {
    final core::Set<core::int> #t149 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t150 = z;
    if(!(#t150 == null))
      for (final has-declared-initializer dynamic #t151 in #t150{core::Iterable<dynamic>}) {
        final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
        #t149.{core::Set::add}{Invariant}(#t152){(core::int) → core::bool};
      }
  } =>#t149, block {
    final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
    final core::Map<core::int, core::int>? #t154 = w;
    if(!(#t154 == null))
      for (final has-declared-initializer core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
        #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
  } =>#t153, block {
    final core::Set<core::int> #t156 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t157 = x;
      if(!(#t157 == null))
        for (final has-declared-initializer dynamic #t158 in #t157{core::Iterable<dynamic>}) {
          final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
          #t156.{core::Set::add}{Invariant}(#t159){(core::int) → core::bool};
        }
    }
  } =>#t156, block {
    final core::Set<core::int> #t160 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t161 = y;
      if(!(#t161 == null))
        for (final has-declared-initializer dynamic #t162 in #t161{core::Iterable<dynamic>}) {
          final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
          #t160.{core::Set::add}{Invariant}(#t163){(core::int) → core::bool};
        }
    }
  } =>#t160, block {
    final core::Set<core::int> #t164 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t165 = z;
      if(!(#t165 == null))
        for (final has-declared-initializer dynamic #t166 in #t165{core::Iterable<dynamic>}) {
          final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
          #t164.{core::Set::add}{Invariant}(#t167){(core::int) → core::bool};
        }
    }
  } =>#t164, block {
    final core::Map<core::int, core::int> #t168 = <core::int, core::int>{};
    if(condition) {
      final core::Map<core::int, core::int>? #t169 = w;
      if(!(#t169 == null))
        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
          #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
    }
  } =>#t168, block {
    final core::Set<core::int> #t171 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable) {
      final core::Iterable<dynamic>? #t172 = x;
      if(!(#t172 == null))
        for (final has-declared-initializer dynamic #t173 in #t172{core::Iterable<dynamic>}) {
          final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
          #t171.{core::Set::add}{Invariant}(#t174){(core::int) → core::bool};
        }
    }
  } =>#t171, block {
    final core::Set<core::int> #t175 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable) {
      final core::Iterable<dynamic>? #t176 = y;
      if(!(#t176 == null))
        for (final has-declared-initializer dynamic #t177 in #t176{core::Iterable<dynamic>}) {
          final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
          #t175.{core::Set::add}{Invariant}(#t178){(core::int) → core::bool};
        }
    }
  } =>#t175, block {
    final core::Set<core::int> #t179 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable) {
      final core::Iterable<dynamic>? #t180 = z;
      if(!(#t180 == null))
        for (final has-declared-initializer dynamic #t181 in #t180{core::Iterable<dynamic>}) {
          final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
          #t179.{core::Set::add}{Invariant}(#t182){(core::int) → core::bool};
        }
    }
  } =>#t179, block {
    final core::Map<core::int, core::int> #t183 = <core::int, core::int>{};
    for (dynamic e in iterable) {
      final core::Map<core::int, core::int>? #t184 = w;
      if(!(#t184 == null))
        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
          #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
    }
  } =>#t183, block {
    final core::Set<core::int> #t186 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      final core::Iterable<dynamic>? #t187 = x;
      if(!(#t187 == null))
        for (final has-declared-initializer dynamic #t188 in #t187{core::Iterable<dynamic>}) {
          final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
          #t186.{core::Set::add}{Invariant}(#t189){(core::int) → core::bool};
        }
    }
  } =>#t186, block {
    final core::Set<core::int> #t190 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      final core::Iterable<dynamic>? #t191 = y;
      if(!(#t191 == null))
        for (final has-declared-initializer dynamic #t192 in #t191{core::Iterable<dynamic>}) {
          final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
          #t190.{core::Set::add}{Invariant}(#t193){(core::int) → core::bool};
        }
    }
  } =>#t190, block {
    final core::Set<core::int> #t194 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      final core::Iterable<dynamic>? #t195 = z;
      if(!(#t195 == null))
        for (final has-declared-initializer dynamic #t196 in #t195{core::Iterable<dynamic>}) {
          final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
          #t194.{core::Set::add}{Invariant}(#t197){(core::int) → core::bool};
        }
    }
  } =>#t194, block {
    final core::Map<core::int, core::int> #t198 = <core::int, core::int>{};
    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
      final core::Map<core::int, core::int>? #t199 = w;
      if(!(#t199 == null))
        for (final has-declared-initializer core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
          #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
    }
  } =>#t198];
}
static method main() → dynamic {}
