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}{Invariant}(#t3);
    }
  } =>#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}{Invariant}(#t6);
    }
  } =>#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}{Invariant}(#t9);
    }
  } =>#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.
             ^");
  } =>#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}{Invariant}(#t13);
      }
  } =>#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}{Invariant}(#t16);
      }
  } =>#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}{Invariant}(#t19);
      }
  } =>#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);
  } =>#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}{Invariant}(#t23);
      }
  } =>#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}{Invariant}(#t26);
      }
  } =>#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}{Invariant}(#t29);
      }
  } =>#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);
  } =>#t30, block {
    final core::Set<core::int> #t31 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
      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}{Invariant}(#t33);
      }
  } =>#t31, block {
    final core::Set<core::int> #t34 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
      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}{Invariant}(#t36);
      }
  } =>#t34, block {
    final core::Set<core::int> #t37 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
      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}{Invariant}(#t39);
      }
  } =>#t37, block {
    final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
      #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);
  } =>#t40, block {
    final core::Set<core::int> #t41 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t42 = a;
    if(!#t42.{core::Object::==}(null))
      for (final dynamic #t43 in #t42{core::Iterable<dynamic>}) {
        final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
        #t41.{core::Set::add}{Invariant}(#t44);
      }
  } =>#t41, block {
    final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t46 = b;
    if(!#t46.{core::Object::==}(null))
      for (final dynamic #t47 in #t46{core::Iterable<dynamic>}) {
        final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
        #t45.{core::Set::add}{Invariant}(#t48);
      }
  } =>#t45, block {
    final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t50 = c;
    if(!#t50.{core::Object::==}(null))
      for (final dynamic #t51 in #t50{core::Iterable<dynamic>}) {
        final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
        #t49.{core::Set::add}{Invariant}(#t52);
      }
  } =>#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.{core::Object::==}(null))
      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries})
        #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}, #t55.{core::MapEntry::value});
  } =>#t53, block {
    final core::Set<core::int> #t56 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t57 = a;
      if(!#t57.{core::Object::==}(null))
        for (final dynamic #t58 in #t57{core::Iterable<dynamic>}) {
          final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
          #t56.{core::Set::add}{Invariant}(#t59);
        }
    }
  } =>#t56, block {
    final core::Set<core::int> #t60 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t61 = b;
      if(!#t61.{core::Object::==}(null))
        for (final dynamic #t62 in #t61{core::Iterable<dynamic>}) {
          final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
          #t60.{core::Set::add}{Invariant}(#t63);
        }
    }
  } =>#t60, block {
    final core::Set<core::int> #t64 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t65 = c;
      if(!#t65.{core::Object::==}(null))
        for (final dynamic #t66 in #t65{core::Iterable<dynamic>}) {
          final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
          #t64.{core::Set::add}{Invariant}(#t67);
        }
    }
  } =>#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.{core::Object::==}(null))
        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries})
          #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}, #t70.{core::MapEntry::value});
    }
  } =>#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.{core::Object::==}(null))
        for (final dynamic #t73 in #t72{core::Iterable<dynamic>}) {
          final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
          #t71.{core::Set::add}{Invariant}(#t74);
        }
    }
  } =>#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.{core::Object::==}(null))
        for (final dynamic #t77 in #t76{core::Iterable<dynamic>}) {
          final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
          #t75.{core::Set::add}{Invariant}(#t78);
        }
    }
  } =>#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.{core::Object::==}(null))
        for (final dynamic #t81 in #t80{core::Iterable<dynamic>}) {
          final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
          #t79.{core::Set::add}{Invariant}(#t82);
        }
    }
  } =>#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.{core::Object::==}(null))
        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries})
          #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}, #t85.{core::MapEntry::value});
    }
  } =>#t83, block {
    final core::Set<core::int> #t86 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
      final core::Iterable<dynamic>? #t87 = a;
      if(!#t87.{core::Object::==}(null))
        for (final dynamic #t88 in #t87{core::Iterable<dynamic>}) {
          final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
          #t86.{core::Set::add}{Invariant}(#t89);
        }
    }
  } =>#t86, block {
    final core::Set<core::int> #t90 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
      final core::Iterable<dynamic>? #t91 = b;
      if(!#t91.{core::Object::==}(null))
        for (final dynamic #t92 in #t91{core::Iterable<dynamic>}) {
          final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
          #t90.{core::Set::add}{Invariant}(#t93);
        }
    }
  } =>#t90, block {
    final core::Set<core::int> #t94 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
      final core::Iterable<dynamic>? #t95 = c;
      if(!#t95.{core::Object::==}(null))
        for (final dynamic #t96 in #t95{core::Iterable<dynamic>}) {
          final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
          #t94.{core::Set::add}{Invariant}(#t97);
        }
    }
  } =>#t94, block {
    final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
      final core::Map<core::int, core::int>? #t99 = d;
      if(!#t99.{core::Object::==}(null))
        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries})
          #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}, #t100.{core::MapEntry::value});
    }
  } =>#t98];
}
static method bar<X extends core::List<core::int>? = core::List<core::int>?, Y extends core::Set<core::int>? = core::Set<core::int>?, Z extends core::Iterable<core::int>? = core::Iterable<core::int>?, W extends core::Map<core::int, core::int>? = 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}{Invariant}(#t103);
    }
  } =>#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}{Invariant}(#t106);
    }
  } =>#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}{Invariant}(#t109);
    }
  } =>#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.
             ^");
  } =>#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}{Invariant}(#t113);
      }
  } =>#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}{Invariant}(#t116);
      }
  } =>#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}{Invariant}(#t119);
      }
  } =>#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);
  } =>#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}{Invariant}(#t123);
      }
  } =>#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}{Invariant}(#t126);
      }
  } =>#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}{Invariant}(#t129);
      }
  } =>#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);
  } =>#t130, block {
    final core::Set<core::int> #t131 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
      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}{Invariant}(#t133);
      }
  } =>#t131, block {
    final core::Set<core::int> #t134 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
      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}{Invariant}(#t136);
      }
  } =>#t134, block {
    final core::Set<core::int> #t137 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
      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}{Invariant}(#t139);
      }
  } =>#t137, block {
    final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1))
      #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);
  } =>#t140, block {
    final core::Set<core::int> #t141 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t142 = x;
    if(!#t142.{core::Object::==}(null))
      for (final dynamic #t143 in #t142{core::Iterable<dynamic>}) {
        final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
        #t141.{core::Set::add}{Invariant}(#t144);
      }
  } =>#t141, block {
    final core::Set<core::int> #t145 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t146 = y;
    if(!#t146.{core::Object::==}(null))
      for (final dynamic #t147 in #t146{core::Iterable<dynamic>}) {
        final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
        #t145.{core::Set::add}{Invariant}(#t148);
      }
  } =>#t145, block {
    final core::Set<core::int> #t149 = col::LinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t150 = z;
    if(!#t150.{core::Object::==}(null))
      for (final dynamic #t151 in #t150{core::Iterable<dynamic>}) {
        final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
        #t149.{core::Set::add}{Invariant}(#t152);
      }
  } =>#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.{core::Object::==}(null))
      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries})
        #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}, #t155.{core::MapEntry::value});
  } =>#t153, block {
    final core::Set<core::int> #t156 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t157 = x;
      if(!#t157.{core::Object::==}(null))
        for (final dynamic #t158 in #t157{core::Iterable<dynamic>}) {
          final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
          #t156.{core::Set::add}{Invariant}(#t159);
        }
    }
  } =>#t156, block {
    final core::Set<core::int> #t160 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t161 = y;
      if(!#t161.{core::Object::==}(null))
        for (final dynamic #t162 in #t161{core::Iterable<dynamic>}) {
          final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
          #t160.{core::Set::add}{Invariant}(#t163);
        }
    }
  } =>#t160, block {
    final core::Set<core::int> #t164 = col::LinkedHashSet::•<core::int>();
    if(condition) {
      final core::Iterable<dynamic>? #t165 = z;
      if(!#t165.{core::Object::==}(null))
        for (final dynamic #t166 in #t165{core::Iterable<dynamic>}) {
          final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
          #t164.{core::Set::add}{Invariant}(#t167);
        }
    }
  } =>#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.{core::Object::==}(null))
        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries})
          #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}, #t170.{core::MapEntry::value});
    }
  } =>#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.{core::Object::==}(null))
        for (final dynamic #t173 in #t172{core::Iterable<dynamic>}) {
          final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
          #t171.{core::Set::add}{Invariant}(#t174);
        }
    }
  } =>#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.{core::Object::==}(null))
        for (final dynamic #t177 in #t176{core::Iterable<dynamic>}) {
          final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
          #t175.{core::Set::add}{Invariant}(#t178);
        }
    }
  } =>#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.{core::Object::==}(null))
        for (final dynamic #t181 in #t180{core::Iterable<dynamic>}) {
          final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
          #t179.{core::Set::add}{Invariant}(#t182);
        }
    }
  } =>#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.{core::Object::==}(null))
        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries})
          #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}, #t185.{core::MapEntry::value});
    }
  } =>#t183, block {
    final core::Set<core::int> #t186 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
      final core::Iterable<dynamic>? #t187 = x;
      if(!#t187.{core::Object::==}(null))
        for (final dynamic #t188 in #t187{core::Iterable<dynamic>}) {
          final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
          #t186.{core::Set::add}{Invariant}(#t189);
        }
    }
  } =>#t186, block {
    final core::Set<core::int> #t190 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
      final core::Iterable<dynamic>? #t191 = y;
      if(!#t191.{core::Object::==}(null))
        for (final dynamic #t192 in #t191{core::Iterable<dynamic>}) {
          final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
          #t190.{core::Set::add}{Invariant}(#t193);
        }
    }
  } =>#t190, block {
    final core::Set<core::int> #t194 = col::LinkedHashSet::•<core::int>();
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
      final core::Iterable<dynamic>? #t195 = z;
      if(!#t195.{core::Object::==}(null))
        for (final dynamic #t196 in #t195{core::Iterable<dynamic>}) {
          final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
          #t194.{core::Set::add}{Invariant}(#t197);
        }
    }
  } =>#t194, block {
    final core::Map<core::int, core::int> #t198 = <core::int, core::int>{};
    for (core::int i = 0; i.{core::num::<}(42); i = i.{core::num::+}(1)) {
      final core::Map<core::int, core::int>? #t199 = w;
      if(!#t199.{core::Object::==}(null))
        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries})
          #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}, #t200.{core::MapEntry::value});
    }
  } =>#t198];
}
static method main() → dynamic {}
