library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//   if (i > 0) ...nullableMap, // error
//                 ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//   if (i > 0) ...nullableList, // error
//                 ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//   if (i > 0) ...nullableList, // error
//                 ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
//     if (i > 0) ...x, // error
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     if (i > 0) ...y, // error
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     if (i > 0) ...x, // error
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
//     if (i > 0) ...x, // error
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     if (i > 0) ...y, // error
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     if (i > 0) ...x, // error
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
//     if (i > 0) ...x, // error
//                   ^
//
// pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
//     if (i > 0) ...y, // error
//                   ^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static field core::int i = 1;
static field core::Map<core::int, core::String>? nullableMap = <core::int, core::String>{1: "Let", 2: "it", 3: "be"};
static field core::List<core::int>? nullableList = core::_GrowableList::_literal3<core::int>(1, 2, 3);
static field dynamic dynamicMap = <core::int, core::String>{1: "Let", 2: "it", 3: "be"};
static field dynamic dynamicList = core::_GrowableList::_literal3<core::int>(1, 2, 3);
static field core::Map<dynamic, dynamic> map1 = block {
  final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
  if(self::i.{core::num::>}(0){(core::num) → core::bool})
    #t1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
  if (i > 0) ...nullableMap, // error
                ^", null){(dynamic, dynamic) → void};
  if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
    core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}.{core::Iterable::iterator};
    for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
      final core::MapEntry<dynamic, dynamic> #t2 = :sync-for-iterator.{core::Iterator::current};
      #t1.{core::Map::[]=}(#t2.{core::MapEntry::key}, #t2.{core::MapEntry::value}){(dynamic, dynamic) → void};
    }
  }
  if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
    core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = self::nullableMap!.{core::Map::entries}.{core::Iterable::iterator};
    for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
      final core::MapEntry<dynamic, dynamic> #t3 = :sync-for-iterator.{core::Iterator::current};
      #t1.{core::Map::[]=}(#t3.{core::MapEntry::key}, #t3.{core::MapEntry::value}){(dynamic, dynamic) → void};
    }
  }
} =>#t1;
static field core::Set<dynamic> set1 = block {
  final core::Set<dynamic> #t4 = new col::_CompactLinkedHashSet::•<dynamic>();
  #t4.{core::Set::add}(0){(dynamic) → core::bool};
  if(self::i.{core::num::>}(0){(core::num) → core::bool})
    #t4.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
  if (i > 0) ...nullableList, // error
                ^"){(dynamic) → core::bool};
  if(self::i.{core::num::>}(0){(core::num) → core::bool})
    #t4.{core::Set::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
  if(self::i.{core::num::>}(0){(core::num) → core::bool})
    #t4.{core::Set::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
} =>#t4;
static field core::List<dynamic> list1 = block {
  final core::List<dynamic> #t5 = core::_GrowableList::•<dynamic>(0);
  if(self::i.{core::num::>}(0){(core::num) → core::bool})
    #t5.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
  if (i > 0) ...nullableList, // error
                ^"){(dynamic) → void};
  if(self::i.{core::num::>}(0){(core::num) → core::bool})
    #t5.{core::List::addAll}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
  if(self::i.{core::num::>}(0){(core::num) → core::bool})
    #t5.{core::List::addAll}(self::nullableList!){(core::Iterable<dynamic>) → void};
} =>#t5;
static method testMap<X extends dynamic, Y extends core::Map<core::int, core::String>?, Z extends core::Map<core::int, core::String>>(self::testMap::X% x, self::testMap::Y% y, self::testMap::Z z) → dynamic {
  core::Map<dynamic, dynamic> map2 = block {
    final core::Map<dynamic, dynamic> #t6 = <dynamic, dynamic>{};
    if(self::i.{core::num::>}(0){(core::num) → core::bool})
      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
    if (i > 0) ...x, // error
                  ^", null){(dynamic, dynamic) → void};
    if(self::i.{core::num::>}(0){(core::num) → core::bool})
      #t6.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    if (i > 0) ...y, // error
                  ^", null){(dynamic, dynamic) → void};
    if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
      core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = z.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<dynamic, dynamic> #t7 = :sync-for-iterator.{core::Iterator::current};
        #t6.{core::Map::[]=}(#t7.{core::MapEntry::key}, #t7.{core::MapEntry::value}){(dynamic, dynamic) → void};
      }
    }
    if(self::i.{core::num::>}(0){(core::num) → core::bool}) {
      core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = y!.{core::Map::entries}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<dynamic, dynamic> #t8 = :sync-for-iterator.{core::Iterator::current};
        #t6.{core::Map::[]=}(#t8.{core::MapEntry::key}, #t8.{core::MapEntry::value}){(dynamic, dynamic) → void};
      }
    }
  } =>#t6;
}
static method testIterables<X extends dynamic, Y extends core::List<core::int>?, Z extends core::List<core::int>>(self::testIterables::X% x, self::testIterables::Y% y, self::testIterables::Z z) → dynamic {
  core::Set<dynamic> set2 = block {
    final core::Set<dynamic> #t9 = new col::_CompactLinkedHashSet::•<dynamic>();
    #t9.{core::Set::add}(0){(dynamic) → core::bool};
    if(self::i.{core::num::>}(0){(core::num) → core::bool})
      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
    if (i > 0) ...x, // error
                  ^"){(dynamic) → core::bool};
    if(self::i.{core::num::>}(0){(core::num) → core::bool})
      #t9.{core::Set::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    if (i > 0) ...y, // error
                  ^"){(dynamic) → core::bool};
    if(self::i.{core::num::>}(0){(core::num) → core::bool})
      #t9.{core::Set::addAll}(z){(core::Iterable<dynamic>) → void};
  } =>#t9;
  core::List<dynamic> list2 = block {
    final core::List<dynamic> #t10 = core::_GrowableList::•<dynamic>(0);
    if(self::i.{core::num::>}(0){(core::num) → core::bool})
      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
    if (i > 0) ...x, // error
                  ^"){(dynamic) → void};
    if(self::i.{core::num::>}(0){(core::num) → core::bool})
      #t10.{core::List::add}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
    if (i > 0) ...y, // error
                  ^"){(dynamic) → void};
    if(self::i.{core::num::>}(0){(core::num) → core::bool})
      #t10.{core::List::addAll}(z){(core::Iterable<dynamic>) → void};
  } =>#t10;
}
static method main() → dynamic {}
