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 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}(#t3){(core::int) → core::bool};
    }
  } =>#t1, block {
    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
    for (final 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}(#t6){(core::int) → core::bool};
    }
  } =>#t4, block {
    final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
    for (final 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}(#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}(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 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}(#t13){(core::int) → core::bool};
      }
  } =>#t11, block {
    final core::Set<core::int> #t14 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final 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}(#t16){(core::int) → core::bool};
      }
  } =>#t14, block {
    final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final 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}(#t19){(core::int) → core::bool};
      }
  } =>#t17, block {
    final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
    if(condition)
      #t20.{core::Map::[]=}(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 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}(#t23){(core::int) → core::bool};
      }
  } =>#t21, block {
    final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final 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}(#t26){(core::int) → core::bool};
      }
  } =>#t24, block {
    final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final 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}(#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::[]=}(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 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}(#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 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}(#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 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}(#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::[]=}(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 dynamic #t43 in #t42{core::Iterable<dynamic>}) {
        final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
        #t41.{core::Set::add}(#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 dynamic #t47 in #t46{core::Iterable<dynamic>}) {
        final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
        #t45.{core::Set::add}(#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 dynamic #t51 in #t50{core::Iterable<dynamic>}) {
        final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
        #t49.{core::Set::add}(#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 core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries})
        #t53.{core::Map::[]=}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value}){(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 dynamic #t58 in #t57{core::Iterable<dynamic>}) {
          final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
          #t56.{core::Set::add}(#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 dynamic #t62 in #t61{core::Iterable<dynamic>}) {
          final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
          #t60.{core::Set::add}(#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 dynamic #t66 in #t65{core::Iterable<dynamic>}) {
          final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
          #t64.{core::Set::add}(#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 core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries})
          #t68.{core::Map::[]=}(#t70.{core::MapEntry::key}, #t70.{core::MapEntry::value}){(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 dynamic #t73 in #t72{core::Iterable<dynamic>}) {
          final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
          #t71.{core::Set::add}(#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 dynamic #t77 in #t76{core::Iterable<dynamic>}) {
          final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
          #t75.{core::Set::add}(#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 dynamic #t81 in #t80{core::Iterable<dynamic>}) {
          final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
          #t79.{core::Set::add}(#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 core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries})
          #t83.{core::Map::[]=}(#t85.{core::MapEntry::key}, #t85.{core::MapEntry::value}){(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 dynamic #t88 in #t87{core::Iterable<dynamic>}) {
          final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
          #t86.{core::Set::add}(#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 dynamic #t92 in #t91{core::Iterable<dynamic>}) {
          final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
          #t90.{core::Set::add}(#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 dynamic #t96 in #t95{core::Iterable<dynamic>}) {
          final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
          #t94.{core::Set::add}(#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 core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries})
          #t98.{core::Map::[]=}(#t100.{core::MapEntry::key}, #t100.{core::MapEntry::value}){(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 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}(#t103){(core::int) → core::bool};
    }
  } =>#t101, block {
    final core::Set<core::int> #t104 = col::LinkedHashSet::•<core::int>();
    for (final 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}(#t106){(core::int) → core::bool};
    }
  } =>#t104, block {
    final core::Set<core::int> #t107 = col::LinkedHashSet::•<core::int>();
    for (final 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}(#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}(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 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}(#t113){(core::int) → core::bool};
      }
  } =>#t111, block {
    final core::Set<core::int> #t114 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final 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}(#t116){(core::int) → core::bool};
      }
  } =>#t114, block {
    final core::Set<core::int> #t117 = col::LinkedHashSet::•<core::int>();
    if(condition)
      for (final 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}(#t119){(core::int) → core::bool};
      }
  } =>#t117, block {
    final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
    if(condition)
      #t120.{core::Map::[]=}(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 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}(#t123){(core::int) → core::bool};
      }
  } =>#t121, block {
    final core::Set<core::int> #t124 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final 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}(#t126){(core::int) → core::bool};
      }
  } =>#t124, block {
    final core::Set<core::int> #t127 = col::LinkedHashSet::•<core::int>();
    for (dynamic e in iterable)
      for (final 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}(#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::[]=}(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 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}(#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 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}(#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 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}(#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::[]=}(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 dynamic #t143 in #t142{core::Iterable<dynamic>}) {
        final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
        #t141.{core::Set::add}(#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 dynamic #t147 in #t146{core::Iterable<dynamic>}) {
        final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
        #t145.{core::Set::add}(#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 dynamic #t151 in #t150{core::Iterable<dynamic>}) {
        final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
        #t149.{core::Set::add}(#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 core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries})
        #t153.{core::Map::[]=}(#t155.{core::MapEntry::key}, #t155.{core::MapEntry::value}){(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 dynamic #t158 in #t157{core::Iterable<dynamic>}) {
          final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
          #t156.{core::Set::add}(#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 dynamic #t162 in #t161{core::Iterable<dynamic>}) {
          final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
          #t160.{core::Set::add}(#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 dynamic #t166 in #t165{core::Iterable<dynamic>}) {
          final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
          #t164.{core::Set::add}(#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 core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries})
          #t168.{core::Map::[]=}(#t170.{core::MapEntry::key}, #t170.{core::MapEntry::value}){(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 dynamic #t173 in #t172{core::Iterable<dynamic>}) {
          final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
          #t171.{core::Set::add}(#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 dynamic #t177 in #t176{core::Iterable<dynamic>}) {
          final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
          #t175.{core::Set::add}(#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 dynamic #t181 in #t180{core::Iterable<dynamic>}) {
          final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
          #t179.{core::Set::add}(#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 core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries})
          #t183.{core::Map::[]=}(#t185.{core::MapEntry::key}, #t185.{core::MapEntry::value}){(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 dynamic #t188 in #t187{core::Iterable<dynamic>}) {
          final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
          #t186.{core::Set::add}(#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 dynamic #t192 in #t191{core::Iterable<dynamic>}) {
          final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
          #t190.{core::Set::add}(#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 dynamic #t196 in #t195{core::Iterable<dynamic>}) {
          final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
          #t194.{core::Set::add}(#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 core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries})
          #t198.{core::Map::[]=}(#t200.{core::MapEntry::key}, #t200.{core::MapEntry::value}){(core::int, core::int) → void};
    }
  } =>#t198];
}
static method main() → dynamic {}
