library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:39:35: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
//   Map<String, List<int>?> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
//                                   ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
//                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:44: Error: Expected ':' after this.
//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
//                                            ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:107:53: Error: Expected ':' after this.
//   Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
//                                                     ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:61: Error: Expected ':' after this.
//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
//                                                             ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:109:70: Error: Expected ':' after this.
//   Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
//                                                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:110:35: Error: Expected ':' after this.
//   var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
//                                   ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:111:52: Error: Expected ':' after this.
//   var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
//                                                    ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   <int>[if (oracle("foo")) "bar"];
//                            ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:88:29: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
//   <int?>{if (oracle("foo")) "bar", null};
//                             ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:89:44: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
//   <String, int?>{if (oracle("foo")) "bar": "bar", "baz": null};
//                                            ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   <int>[if (oracle("foo")) ...["bar"]];
//                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:91:33: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
//   <int?>{if (oracle("foo")) ...["bar"], null};
//                                 ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
//   <String, int?>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
//                                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int>[if (oracle("foo")) ...map];
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:94:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int?>{if (oracle("foo")) ...map, null};
//                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
//  - 'List' is from 'dart:core'.
//   <String, int?>{if (oracle("foo")) ...["bar"], "baz": null};
//                                        ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
//   <String>[if (oracle("foo")) 42 else 3.14];
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
//   <String>[if (oracle("foo")) 42 else 3.14];
//                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:32: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
//   <String?>{if (oracle("foo")) 42 else 3.14, null};
//                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:40: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
//   <String?>{if (oracle("foo")) 42 else 3.14, null};
//                                        ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:47: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
//   <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
//                                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:62: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
//   <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
//                                                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int>[if (oracle("foo")) ...map else 42];
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:100:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int?>{if (oracle("foo")) ...map else 42, null};
//                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
//  - 'List' is from 'dart:core'.
//   <String, int?>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
//                                        ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int>[if (oracle("foo")) 42 else ...map];
//                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:103:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int?>{if (oracle("foo")) ...map else 42, null};
//                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
//  - 'List' is from 'dart:core'.
//   <String, int?>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
//                                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
//                        ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
//                        ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
//   List<int> list20 = [if (42) 42];
//                           ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
//   Set<int> set20 = {if (42) 42};
//                         ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
//   Map<int, int> map30 = {if (42) 42: 42};
//                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
//                                                     ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
//                                                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
//                                                   ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
//                                                             ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
//                                                             ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
//                                                                           ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
//                                                                 ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
//                                                                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
//   <int>[for (i in <int>[1]) i];
//              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
//   <int?>{for (i in <int>[1]) i, null};
//               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
//   <String, int?>{for (i in <int>[1]) "bar": i, "baz": null};
//                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:246:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
// Try removing the keyword, or use a for-each statement.
//   var list50 = [await for (;;) 42];
//                 ^^^^^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:247:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
// Try removing the keyword, or use a for-each statement.
//   var set50 = {await for (;;) 42, null};
//                ^^^^^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:248:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
// Try removing the keyword, or use a for-each statement.
//   var map50 = {await for (;;) "bar": 42, "baz": null};
//                ^^^^^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
//                                             ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
//   <int?>{for (int i = 0; oracle("foo"); i++) "bar", null};
//                                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
//                                                   ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
//                                                          ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
//                                                                 ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
//                                                 ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
//   <int?>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
//                                                  ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
//                                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
//                                                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
//                                                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int>[for (int i = 0; oracle("foo"); i++) ...map];
//                                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int?>{for (int i = 0; oracle("foo"); i++) ...map, null};
//                                                 ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
//  - 'List' is from 'dart:core'.
//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
//                                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
//                                                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
//                                                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
//   <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
//                                                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
//   <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
//                                                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
//   <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
//                                                                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
//   <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
//                                                                                             ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
//                                                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
//                                                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
//  - 'List' is from 'dart:core'.
//   <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
//                                                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
//                                                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
//   <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
//                                                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
//  - 'List' is from 'dart:core'.
//   <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
//                                                                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
//  - 'Iterable' is from 'dart:core'.
//   var list10 = [for (var i in "not iterable") i];
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
//  - 'Iterable' is from 'dart:core'.
//   var set10 = {for (var i in "not iterable") i, null};
//                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
//  - 'Iterable' is from 'dart:core'.
//   var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
//                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var list20 = [for (int i in ["not", "int"]) i];
//                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var list20 = [for (int i in ["not", "int"]) i];
//                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var set20 = {for (int i in ["not", "int"]) i, null};
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var set20 = {for (int i in ["not", "int"]) i, null};
//                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
//                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
//  - 'Stream' is from 'dart:async'.
//   var list30 = [await for (var i in "not stream") i];
//                                     ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
//  - 'Stream' is from 'dart:async'.
//   var set30 = {await for (var i in "not stream") i, null};
//                                    ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
//  - 'Stream' is from 'dart:async'.
//   var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
//                                    ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
//                                                          ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
//                                                                 ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
//                                                         ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
//                                                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
//                                                         ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
//                                                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
//   var list60 = [for (; "not bool";) 42];
//                        ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
//   var set60 = {for (; "not bool";) 42, null};
//                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
//   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
//                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:255:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
//   <int>[await for (int i in stream) i];
//                          ^^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:256:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
//   <int>{await for (int i in stream) i};
//                          ^^
//
// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:257:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
//   <String, int>{await for (int i in stream) "bar": i};
//                                  ^^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;
import "dart:async" as asy;
import "dart:_internal" as _in;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
  get foo() → core::int
    return 42;
}
static method oracle<T extends core::Object? = dynamic>([self::oracle::T? t = #C1]) → dynamic
  return true;
static method testIfElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::Map<core::String, core::int> mapToInt, core::Map<core::String, core::double> mapToDouble) → dynamic {
  core::List<core::int> list10 = block {
    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t1.{core::List::add}{Invariant}(42){(core::int) → void};
  } =>#t1;
  core::Set<core::int?> set10 = block {
    final core::Set<core::int?> #t2 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t2.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
    #t2.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t2;
  core::Map<core::String, core::int?> map10 = block {
    final core::Map<core::String, core::int?> #t3 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t3.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
    #t3.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t3;
  core::List<dynamic> list11 = block {
    final core::List<dynamic> #t4 = core::_GrowableList::•<dynamic>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t4.{core::List::add}{Invariant}(dynVar){(dynamic) → void};
  } =>#t4;
  core::Set<dynamic> set11 = block {
    final core::Set<dynamic> #t5 = new col::_CompactLinkedHashSet::•<dynamic>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t5.{core::Set::add}{Invariant}(dynVar){(dynamic) → core::bool};
    #t5.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t5;
  core::Map<core::String, dynamic> map11 = block {
    final core::Map<core::String, dynamic> #t6 = <core::String, dynamic>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t6.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String, dynamic) → void};
    #t6.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
  } =>#t6;
  core::List<core::List<core::int>> list12 = block {
    final core::List<core::List<core::int>> #t7 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t7.{core::List::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>) → void};
  } =>#t7;
  core::Set<core::List<core::int>?> set12 = block {
    final core::Set<core::List<core::int>?> #t8 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t8.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>?) → core::bool};
    #t8.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t8;
  core::Map<core::String, core::List<core::int>?> map12 = block {
    final core::Map<core::String, core::List<core::int>?> #t9 = <core::String, core::List<core::int>?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t9.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::_literal1<core::int>(42)){(core::String, core::List<core::int>?) → void};
    #t9.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t9;
  core::List<core::int> list20 = block {
    final core::List<core::int> #t10 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t10.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int>) → void};
  } =>#t10;
  core::Set<core::int?> set20 = block {
    final core::Set<core::int?> #t11 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t11.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int?>) → void};
    #t11.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t11;
  core::Map<core::String, core::int?> map20 = block {
    final core::Map<core::String, core::int?> #t12 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::int?> #t13 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String}, #t13.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
      }
    }
    #t12.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t12;
  core::List<dynamic> list21 = block {
    final core::List<dynamic> #t14 = core::_GrowableList::•<dynamic>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t14.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
  } =>#t14;
  core::Set<dynamic> set21 = block {
    final core::Set<dynamic> #t15 = new col::_CompactLinkedHashSet::•<dynamic>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t15.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
    #t15.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t15;
  core::Map<core::String, dynamic> map21 = block {
    final core::Map<core::String, dynamic> #t16 = <core::String, dynamic>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, dynamic>> :sync-for-iterator = <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, dynamic>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, dynamic> #t17 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, dynamic>};
        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String}, #t17.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
      }
    }
    #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
  } =>#t16;
  core::List<core::List<core::int>> list22 = block {
    final core::List<core::List<core::int>> #t18 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t18.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t18;
  core::Set<core::List<core::int>?> set22 = block {
    final core::Set<core::List<core::int>?> #t19 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t19.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>?>) → void};
    #t19.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t19;
  core::Map<core::String, core::List<core::int>?> map22 = block {
    final core::Map<core::String, core::List<core::int>?> #t20 = <core::String, core::List<core::int>?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>>{"bar": core::_GrowableList::_literal1<core::int>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::List<core::int>?> #t21 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String}, #t21.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
      }
    }
    #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t20;
  core::List<core::int> list30 = block {
    final core::List<core::int> #t22 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t22.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int>) → void};
  } =>#t22;
  core::Set<core::int?> set30 = block {
    final core::Set<core::int?> #t23 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t23.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int?>) → void};
    #t23.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t23;
  core::Map<core::String, core::int?> map30 = block {
    final core::Map<core::String, core::int?> #t24 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::int?> #t25 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
          #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String}, #t25.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
        }
      }
    #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t24;
  core::List<dynamic> list31 = block {
    final core::List<dynamic> #t26 = core::_GrowableList::•<dynamic>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t26.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
  } =>#t26;
  core::Set<dynamic> set31 = block {
    final core::Set<dynamic> #t27 = new col::_CompactLinkedHashSet::•<dynamic>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t27.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
    #t27.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t27;
  core::Map<core::String, dynamic> map31 = block {
    final core::Map<core::String, dynamic> #t28 = <core::String, dynamic>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, dynamic>> :sync-for-iterator = <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, dynamic>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, dynamic> #t29 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, dynamic>};
          #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String}, #t29.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
        }
      }
    #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
  } =>#t28;
  core::List<core::List<core::int>> list33 = block {
    final core::List<core::List<core::int>> #t30 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t30.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t30;
  core::Set<core::List<core::int>?> set33 = block {
    final core::Set<core::List<core::int>?> #t31 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t31.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>?>) → void};
    #t31.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t31;
  core::Map<core::String, core::List<core::int>?> map33 = block {
    final core::Map<core::String, core::List<core::int>?> #t32 = <core::String, core::List<core::int>?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>>{"bar": core::_GrowableList::_literal1<core::int>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::List<core::int>?> #t33 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
          #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String}, #t33.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
        }
      }
    #t32.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t32;
  core::List<core::List<core::int>> list40 = block {
    final core::List<core::List<core::int>> #t34 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t34.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t34;
  core::Set<core::List<core::int>?> set40 = block {
    final core::Set<core::List<core::int>?> #t35 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t35.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
    #t35.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t35;
  core::Map<core::String, core::List<core::int>?> map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:39:35: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
  Map<String, List<int>?> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
                                  ^";
  core::List<core::List<core::int>> list41 = block {
    final core::List<core::List<core::int>> #t36 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t36.{core::List::addAll}{Invariant}( block {
        final core::Set<core::List<core::int>> #t37 = new col::_CompactLinkedHashSet::•<core::List<core::int>>();
        #t37.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → core::bool};
      } =>#t37){(core::Iterable<core::List<core::int>>) → void};
  } =>#t36;
  core::Set<core::List<core::int>?> set41 = block {
    final core::Set<core::List<core::int>?> #t38 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t38.{core::Set::addAll}{Invariant}( block {
        final core::Set<core::List<core::int>?> #t39 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
        #t39.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
      } =>#t39){(core::Iterable<core::List<core::int>?>) → void};
    #t38.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t38;
  core::List<core::List<core::int>> list42 = block {
    final core::List<core::List<core::int>> #t40 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t40.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t40;
  core::Set<core::List<core::int>?> set42 = block {
    final core::Set<core::List<core::int>?> #t41 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t41.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
    #t41.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t41;
  core::Map<core::String, core::List<core::int>?> map42 = block {
    final core::Map<core::String, core::List<core::int>?> #t42 = <core::String, core::List<core::int>?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": core::_GrowableList::•<core::int>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::List<core::int>?> #t43 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
          #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String}, #t43.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
        }
      }
    #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t42;
  core::List<core::int> list50 = block {
    final core::List<core::int> #t44 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t44.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::Iterable<core::int>) → void};
  } =>#t44;
  core::Set<core::int?> set50 = block {
    final core::Set<core::int?> #t45 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t45.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int?>(0)){(core::Iterable<core::int?>) → void};
    #t45.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t45;
  core::Map<core::String, core::int?> map50 = block {
    final core::Map<core::String, core::int?> #t46 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::int?> #t47 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String}, #t47.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
      }
    }
    #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t46;
  core::List<core::int> list51 = block {
    final core::List<core::int> #t48 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t48.{core::List::addAll}{Invariant}( block {
        final core::Set<core::int> #t49 = new col::_CompactLinkedHashSet::•<core::int>();
      } =>#t49){(core::Iterable<core::int>) → void};
  } =>#t48;
  core::Set<core::int?> set51 = block {
    final core::Set<core::int?> #t50 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t50.{core::Set::addAll}{Invariant}( block {
        final core::Set<core::int?> #t51 = new col::_CompactLinkedHashSet::•<core::int?>();
      } =>#t51){(core::Iterable<core::int?>) → void};
    #t50.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t50;
  core::List<core::int> list52 = block {
    final core::List<core::int> #t52 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t52.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::Iterable<core::int>) → void};
  } =>#t52;
  core::Set<core::int?> set52 = block {
    final core::Set<core::int?> #t53 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t53.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int?>(0)){(core::Iterable<core::int?>) → void};
    #t53.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t53;
  core::Map<core::String, core::int?> map52 = block {
    final core::Map<core::String, core::int?> #t54 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::int?> #t55 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
          #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String}, #t55.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
        }
      }
    #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t54;
  core::List<core::List<core::int>> list60 = block {
    final core::List<core::List<core::int>> #t56 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t56.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t56;
  core::Set<core::List<core::int>?> set60 = block {
    final core::Set<core::List<core::int>?> #t57 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t57.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
    #t57.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t57;
  core::Map<core::String, core::List<core::int>?> map60 = block {
    final core::Map<core::String, core::List<core::int>?> #t58 = <core::String, core::List<core::int>?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": core::_GrowableList::•<core::int>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::List<core::int>?> #t59 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
        #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String}, #t59.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
      }
    }
    #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t58;
  core::List<core::List<core::int>> list61 = block {
    final core::List<core::List<core::int>> #t60 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t60.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t60;
  core::Set<core::List<core::int>?> set61 = block {
    final core::Set<core::List<core::int>?> #t61 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t61.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
    #t61.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t61;
  core::Map<core::String, core::List<core::int>?> map61 = block {
    final core::Map<core::String, core::List<core::int>?> #t62 = <core::String, core::List<core::int>?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": core::_GrowableList::•<core::int>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::List<core::int>?> #t63 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
          #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String}, #t63.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
        }
      }
    #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t62;
  core::List<core::List<core::int>> list70 = block {
    final core::List<core::List<core::int>> #t64 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t64.{core::List::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → void};
  } =>#t64;
  core::Set<core::List<core::int>?> set70 = block {
    final core::Set<core::List<core::int>?> #t65 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t65.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
    #t65.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t65;
  core::List<core::List<core::int>> list71 = block {
    final core::List<core::List<core::int>> #t66 = core::_GrowableList::•<core::List<core::int>>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t66.{core::List::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → void};
  } =>#t66;
  core::Set<core::List<core::int>?> set71 = block {
    final core::Set<core::List<core::int>?> #t67 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t67.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
    #t67.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t67;
  core::List<core::num> list80 = block {
    final core::List<core::num> #t68 = core::_GrowableList::•<core::num>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t68.{core::List::add}{Invariant}(42){(core::num) → void};
    else
      #t68.{core::List::add}{Invariant}(3.14){(core::num) → void};
  } =>#t68;
  core::Set<core::num?> set80 = block {
    final core::Set<core::num?> #t69 = new col::_CompactLinkedHashSet::•<core::num?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t69.{core::Set::add}{Invariant}(42){(core::num?) → core::bool};
    else
      #t69.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
    #t69.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
  } =>#t69;
  core::Map<core::String, core::num?> map80 = block {
    final core::Map<core::String, core::num?> #t70 = <core::String, core::num?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t70.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::num?) → void};
    else
      #t70.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
    #t70.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
  } =>#t70;
  core::List<core::num> list81 = block {
    final core::List<core::num> #t71 = core::_GrowableList::•<core::num>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t71.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num>) → void};
    else
      #t71.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
  } =>#t71;
  core::Set<core::num?> set81 = block {
    final core::Set<core::num?> #t72 = new col::_CompactLinkedHashSet::•<core::num?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t72.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
    else
      #t72.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num?>) → void};
    #t72.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
  } =>#t72;
  core::Map<core::String, core::num?> map81 = block {
    final core::Map<core::String, core::num?> #t73 = <core::String, core::num?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::num?> #t74 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
        #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String}, #t74.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
      }
    }
    else {
      core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::num?> #t75 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
        #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String}, #t75.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
      }
    }
    #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
  } =>#t73;
  core::List<dynamic> list82 = block {
    final core::List<dynamic> #t76 = core::_GrowableList::•<dynamic>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t76.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
    else
      #t76.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
  } =>#t76;
  core::Set<dynamic> set82 = block {
    final core::Set<dynamic> #t77 = new col::_CompactLinkedHashSet::•<dynamic>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t77.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
    else
      #t77.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
    #t77.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t77;
  core::Set<dynamic> map82 = block {
    final core::Set<dynamic> #t78 = new col::_CompactLinkedHashSet::•<dynamic>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                     ^"){(dynamic) → core::bool};
    else
      #t78.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
    #t78.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t78;
  core::List<core::num> list83 = block {
    final core::List<core::num> #t79 = core::_GrowableList::•<core::num>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t79.{core::List::add}{Invariant}(42){(core::num) → void};
    else
      #t79.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
  } =>#t79;
  core::Set<core::num?> set83 = block {
    final core::Set<core::num?> #t80 = new col::_CompactLinkedHashSet::•<core::num?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t80.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
    else
      #t80.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
    #t80.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
  } =>#t80;
  core::Map<core::String, core::num?> map83 = block {
    final core::Map<core::String, core::num?> #t81 = <core::String, core::num?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::num?> #t82 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
        #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String}, #t82.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
      }
    }
    else
      #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
    #t81.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
  } =>#t81;
  core::List<core::int> list90 = block {
    final core::List<core::int> #t83 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t83.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
  } =>#t83;
  core::Set<core::int?> set90 = block {
    final core::Set<core::int?> #t84 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t84.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
    #t84.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t84;
  core::Map<core::String, core::int?> map90 = block {
    final core::Map<core::String, core::int?> #t85 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t85.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
    #t85.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t85;
  core::List<core::int> list91 = block {
    final core::List<core::int> #t86 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t87 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final core::int #t88 = #t87 as{TypeError,ForNonNullableByDefault} core::int;
          #t86.{core::List::add}{Invariant}(#t88){(core::int) → void};
        }
      }
    }
  } =>#t86;
  core::Set<core::int?> set91 = block {
    final core::Set<core::int?> #t89 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t90 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final core::int? #t91 = #t90 as{TypeError,ForNonNullableByDefault} core::int?;
          #t89.{core::Set::add}{Invariant}(#t91){(core::int?) → core::bool};
        }
      }
    }
    #t89.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t89;
  core::Map<core::String, core::int?> map91 = block {
    final core::Map<core::String, core::int?> #t92 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<dynamic, dynamic> #t93 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
        {
          final core::String #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
          final core::int? #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
          #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String, core::int?) → void};
        }
      }
    }
    #t92.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t92;
  core::List<core::int> list100 = block {
    final core::List<core::int> #t96 = core::_GrowableList::•<core::int>(0);
    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t96.{core::List::add}{Invariant}(42){(core::int) → void};
  } =>#t96;
  core::Set<core::int> set100 = block {
    final core::Set<core::int> #t97 = new col::_CompactLinkedHashSet::•<core::int>();
    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t97.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
  } =>#t97;
  core::Map<core::int, core::int> map100 = block {
    final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t98.{core::Map::[]=}{Invariant}(42, 42){(core::int, core::int) → void};
  } =>#t98;
}
static method testIfElementErrors(core::Map<core::int, core::int> map) → dynamic {
  block {
    final core::List<core::int> #t99 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  <int>[if (oracle(\"foo\")) \"bar\"];
                           ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
  } =>#t99;
  block {
    final core::Set<core::int?> #t100 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:88:29: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
  <int?>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
    #t100.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t100;
  block {
    final core::Map<core::String, core::int?> #t101 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:89:44: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
  <String, int?>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
    #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t101;
  block {
    final core::List<core::int> #t102 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t102.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                               ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int)){(core::Iterable<core::int>) → void};
  } =>#t102;
  block {
    final core::Set<core::int?> #t103 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t103.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int?>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:91:33: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
  <int?>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?)){(core::Iterable<core::int?>) → void};
    #t103.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t103;
  block {
    final core::Map<core::String, core::int?> #t104 = <core::String, core::int?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int?>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
  <String, int?>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::int?> #t105 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
        #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String}, #t105.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
      }
    }
    #t104.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t104;
  block {
    final core::List<core::int> #t106 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int>[if (oracle(\"foo\")) ...map];
                              ^"){(core::int) → void};
  } =>#t106;
  block {
    final core::Set<core::int?> #t107 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:94:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int?>{if (oracle(\"foo\")) ...map, null};
                               ^"){(core::int?) → core::bool};
    #t107.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t107;
  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
                                       ^": null};
  block {
    final core::List<core::String> #t108 = core::_GrowableList::•<core::String>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  <String>[if (oracle(\"foo\")) 42 else 3.14];
                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
    else
      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
  <String>[if (oracle(\"foo\")) 42 else 3.14];
                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
  } =>#t108;
  block {
    final core::Set<core::String?> #t109 = new col::_CompactLinkedHashSet::•<core::String?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:32: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
  <String?>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
    else
      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:40: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
  <String?>{if (oracle(\"foo\")) 42 else 3.14, null};
                                       ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
    #t109.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
  } =>#t109;
  block {
    final core::Map<core::String, core::String?> #t110 = <core::String, core::String?>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:47: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
  <String, String?>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
    else
      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:62: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
  <String, String?>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                                             ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
    #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
  } =>#t110;
  block {
    final core::List<core::int> #t111 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int>[if (oracle(\"foo\")) ...map else 42];
                              ^"){(core::int) → void};
    else
      #t111.{core::List::add}{Invariant}(42){(core::int) → void};
  } =>#t111;
  block {
    final core::Set<core::int?> #t112 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:100:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int?>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int?) → core::bool};
    else
      #t112.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
    #t112.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t112;
  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
                                       ^": null};
  block {
    final core::List<core::int> #t113 = core::_GrowableList::•<core::int>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t113.{core::List::add}{Invariant}(42){(core::int) → void};
    else
      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int>[if (oracle(\"foo\")) 42 else ...map];
                                      ^"){(core::int) → void};
  } =>#t113;
  block {
    final core::Set<core::int?> #t114 = new col::_CompactLinkedHashSet::•<core::int?>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:103:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int?>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int?) → core::bool};
    else
      #t114.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
    #t114.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t114;
  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
                                                      ^": null};
  core::Set<dynamic> set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
  Set<dynamic> set10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                       ^";
  core::Map<dynamic, dynamic> map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:107:53: Error: Expected ':' after this.
  Map<dynamic, dynamic> map10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                                    ^": null};
  core::Set<dynamic> set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
  Set<dynamic> set11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                       ^";
  core::Map<dynamic, dynamic> map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:109:70: Error: Expected ':' after this.
  Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                                     ^": null};
  core::Map<dynamic, Null> map12 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:110:35: Error: Expected ':' after this.
  var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                  ^": null};
  core::Map<dynamic, Null> map13 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:111:52: Error: Expected ':' after this.
  var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                   ^": null};
  core::List<core::int> list20 = block {
    final core::List<core::int> #t115 = core::_GrowableList::•<core::int>(0);
    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
  List<int> list20 = [if (42) 42];
                          ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
      #t115.{core::List::add}{Invariant}(42){(core::int) → void};
  } =>#t115;
  core::Set<core::int> set20 = block {
    final core::Set<core::int> #t116 = new col::_CompactLinkedHashSet::•<core::int>();
    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
  Set<int> set20 = {if (42) 42};
                        ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
      #t116.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
  } =>#t116;
  core::Map<core::int, core::int> map30 = block {
    final core::Map<core::int, core::int> #t117 = <core::int, core::int>{};
    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
  Map<int, int> map30 = {if (42) 42: 42};
                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
      #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int, core::int) → void};
  } =>#t117;
  core::List<core::String> list40 = block {
    final core::List<core::String> #t118 = core::_GrowableList::•<core::String>(0);
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                    ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
    else
      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
  } =>#t118;
  core::Set<core::String> set40 = block {
    final core::Set<core::String> #t119 = new col::_CompactLinkedHashSet::•<core::String>();
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                  ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::String) → core::bool};
    else
      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → core::bool};
  } =>#t119;
  core::Map<core::String, core::int> map40 = block {
    final core::Map<core::String, core::int> #t120 = <core::String, core::int>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                            ^" in true as{TypeError,ForNonNullableByDefault} core::String, 42){(core::String, core::int) → void};
    else
      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                                          ^" in 42 as{TypeError,ForNonNullableByDefault} core::String, 42){(core::String, core::int) → void};
  } =>#t120;
  core::Map<core::int, core::String> map41 = block {
    final core::Map<core::int, core::String> #t121 = <core::int, core::String>{};
    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
    else
      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
  } =>#t121;
}
static method testForElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::int index, core::Map<core::String, core::int> mapStringInt, core::Map<core::String, core::double> mapStringDouble) → dynamic {
  core::List<core::int> list10 = block {
    final core::List<core::int> #t122 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t122.{core::List::add}{Invariant}(42){(core::int) → void};
  } =>#t122;
  core::Set<core::int?> set10 = block {
    final core::Set<core::int?> #t123 = new col::_CompactLinkedHashSet::•<core::int?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t123.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
    #t123.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t123;
  core::Map<core::String, core::int?> map10 = block {
    final core::Map<core::String, core::int?> #t124 = <core::String, core::int?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t124.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
    #t124.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t124;
  core::List<dynamic> list11 = block {
    final core::List<dynamic> #t125 = core::_GrowableList::•<dynamic>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t125.{core::List::add}{Invariant}(dynVar){(dynamic) → void};
  } =>#t125;
  core::Set<dynamic> set11 = block {
    final core::Set<dynamic> #t126 = new col::_CompactLinkedHashSet::•<dynamic>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t126.{core::Set::add}{Invariant}(dynVar){(dynamic) → core::bool};
    #t126.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t126;
  core::Map<core::String, dynamic> map11 = block {
    final core::Map<core::String, dynamic> #t127 = <core::String, dynamic>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t127.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String, dynamic) → void};
    #t127.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
  } =>#t127;
  core::List<core::List<core::int>> list12 = block {
    final core::List<core::List<core::int>> #t128 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t128.{core::List::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>) → void};
  } =>#t128;
  core::Set<core::List<core::int>?> set12 = block {
    final core::Set<core::List<core::int>?> #t129 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t129.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>?) → core::bool};
    #t129.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t129;
  core::Map<core::String, core::List<core::int>?> map12 = block {
    final core::Map<core::String, core::List<core::int>?> #t130 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t130.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::_literal1<core::int>(42)){(core::String, core::List<core::int>?) → void};
    #t130.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t130;
  core::List<core::int> list20 = block {
    final core::List<core::int> #t131 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t131.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int>) → void};
  } =>#t131;
  core::Set<core::int?> set20 = block {
    final core::Set<core::int?> #t132 = new col::_CompactLinkedHashSet::•<core::int?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t132.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int?>) → void};
    #t132.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t132;
  core::Map<core::String, core::int?> map20 = block {
    final core::Map<core::String, core::int?> #t133 = <core::String, core::int?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::int?> #t134 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
        #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String}, #t134.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
      }
    }
    #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t133;
  core::List<dynamic> list21 = block {
    final core::List<dynamic> #t135 = core::_GrowableList::•<dynamic>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t135.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
  } =>#t135;
  core::Set<dynamic> set21 = block {
    final core::Set<dynamic> #t136 = new col::_CompactLinkedHashSet::•<dynamic>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t136.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
    #t136.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t136;
  core::Map<core::String, dynamic> map21 = block {
    final core::Map<core::String, dynamic> #t137 = <core::String, dynamic>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<core::MapEntry<core::String, dynamic>> :sync-for-iterator = <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, dynamic>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, dynamic> #t138 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, dynamic>};
        #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String}, #t138.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
      }
    }
    #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
  } =>#t137;
  core::List<core::List<core::int>> list22 = block {
    final core::List<core::List<core::int>> #t139 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t139.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t139;
  core::Set<core::List<core::int>?> set22 = block {
    final core::Set<core::List<core::int>?> #t140 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t140.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>?>) → void};
    #t140.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t140;
  core::Map<core::String, core::List<core::int>?> map22 = block {
    final core::Map<core::String, core::List<core::int>?> #t141 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>>{"bar": core::_GrowableList::_literal1<core::int>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::List<core::int>?> #t142 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
        #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String}, #t142.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
      }
    }
    #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t141;
  core::List<core::int> list30 = block {
    final core::List<core::int> #t143 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t143.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int>) → void};
  } =>#t143;
  core::Set<core::int?> set30 = block {
    final core::Set<core::int?> #t144 = new col::_CompactLinkedHashSet::•<core::int?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t144.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int?>) → void};
    #t144.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t144;
  core::Map<core::String, core::int?> map30 = block {
    final core::Map<core::String, core::int?> #t145 = <core::String, core::int?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::int?> #t146 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
          #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String}, #t146.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
        }
      }
    #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t145;
  core::List<dynamic> list31 = block {
    final core::List<dynamic> #t147 = core::_GrowableList::•<dynamic>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t147.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
  } =>#t147;
  core::Set<dynamic> set31 = block {
    final core::Set<dynamic> #t148 = new col::_CompactLinkedHashSet::•<dynamic>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t148.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
    #t148.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t148;
  core::Map<core::String, dynamic> map31 = block {
    final core::Map<core::String, dynamic> #t149 = <core::String, dynamic>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, dynamic>> :sync-for-iterator = <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, dynamic>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, dynamic> #t150 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, dynamic>};
          #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String}, #t150.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
        }
      }
    #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
  } =>#t149;
  core::List<core::List<core::int>> list33 = block {
    final core::List<core::List<core::int>> #t151 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t151.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t151;
  core::Set<core::List<core::int>?> set33 = block {
    final core::Set<core::List<core::int>?> #t152 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t152.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>?>) → void};
    #t152.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t152;
  core::Map<core::String, core::List<core::int>?> map33 = block {
    final core::Map<core::String, core::List<core::int>?> #t153 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>>{"bar": core::_GrowableList::_literal1<core::int>(42)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::List<core::int>?> #t154 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
          #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String}, #t154.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
        }
      }
    #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t153;
  core::List<core::List<core::int>> list40 = block {
    final core::List<core::List<core::int>> #t155 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t155.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t155;
  core::Set<core::List<core::int>?> set40 = block {
    final core::Set<core::List<core::int>?> #t156 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t156.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
    #t156.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t156;
  core::Map<core::String, core::List<core::int>?> map40 = block {
    final core::Map<core::String, core::List<core::int>?> #t157 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": core::_GrowableList::•<core::int>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::List<core::int>?> #t158 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
        #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String}, #t158.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
      }
    }
    #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t157;
  core::List<core::List<core::int>> list41 = block {
    final core::List<core::List<core::int>> #t159 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t159.{core::List::addAll}{Invariant}( block {
        final core::Set<core::List<core::int>> #t160 = new col::_CompactLinkedHashSet::•<core::List<core::int>>();
        #t160.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → core::bool};
      } =>#t160){(core::Iterable<core::List<core::int>>) → void};
  } =>#t159;
  core::Set<core::List<core::int>?> set41 = block {
    final core::Set<core::List<core::int>?> #t161 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t161.{core::Set::addAll}{Invariant}( block {
        final core::Set<core::List<core::int>?> #t162 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
        #t162.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
      } =>#t162){(core::Iterable<core::List<core::int>?>) → void};
    #t161.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t161;
  core::List<core::List<core::int>> list42 = block {
    final core::List<core::List<core::int>> #t163 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t163.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t163;
  core::Set<core::List<core::int>?> set42 = block {
    final core::Set<core::List<core::int>?> #t164 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t164.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
    #t164.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t164;
  core::Map<core::String, core::List<core::int>?> map42 = block {
    final core::Map<core::String, core::List<core::int>?> #t165 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": core::_GrowableList::•<core::int>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::List<core::int>?> #t166 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
          #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String}, #t166.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
        }
      }
    #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t165;
  core::List<core::int> list50 = block {
    final core::List<core::int> #t167 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t167.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::Iterable<core::int>) → void};
  } =>#t167;
  core::Set<core::int?> set50 = block {
    final core::Set<core::int?> #t168 = new col::_CompactLinkedHashSet::•<core::int?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t168.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int?>(0)){(core::Iterable<core::int?>) → void};
    #t168.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t168;
  core::Map<core::String, core::int?> map50 = block {
    final core::Map<core::String, core::int?> #t169 = <core::String, core::int?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::int?> #t170 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
        #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String}, #t170.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
      }
    }
    #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t169;
  core::List<core::int> list51 = block {
    final core::List<core::int> #t171 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t171.{core::List::addAll}{Invariant}( block {
        final core::Set<core::int> #t172 = new col::_CompactLinkedHashSet::•<core::int>();
      } =>#t172){(core::Iterable<core::int>) → void};
  } =>#t171;
  core::Set<core::int?> set51 = block {
    final core::Set<core::int?> #t173 = new col::_CompactLinkedHashSet::•<core::int?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t173.{core::Set::addAll}{Invariant}( block {
        final core::Set<core::int?> #t174 = new col::_CompactLinkedHashSet::•<core::int?>();
      } =>#t174){(core::Iterable<core::int?>) → void};
    #t173.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t173;
  core::List<core::int> list52 = block {
    final core::List<core::int> #t175 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t175.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::Iterable<core::int>) → void};
  } =>#t175;
  core::Set<core::int?> set52 = block {
    final core::Set<core::int?> #t176 = new col::_CompactLinkedHashSet::•<core::int?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t176.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int?>(0)){(core::Iterable<core::int?>) → void};
    #t176.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t176;
  core::List<core::List<core::int>> list60 = block {
    final core::List<core::List<core::int>> #t177 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t177.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t177;
  core::Set<core::List<core::int>?> set60 = block {
    final core::Set<core::List<core::int>?> #t178 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t178.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
    #t178.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t178;
  core::Map<core::String, core::List<core::int>?> map60 = block {
    final core::Map<core::String, core::List<core::int>?> #t179 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": core::_GrowableList::•<core::int>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<core::String, core::List<core::int>?> #t180 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
        #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String}, #t180.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
      }
    }
    #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t179;
  core::List<core::List<core::int>> list61 = block {
    final core::List<core::List<core::int>> #t181 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t181.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
  } =>#t181;
  core::Set<core::List<core::int>?> set61 = block {
    final core::Set<core::List<core::int>?> #t182 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t182.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
    #t182.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t182;
  core::Map<core::String, core::List<core::int>?> map61 = block {
    final core::Map<core::String, core::List<core::int>?> #t183 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": core::_GrowableList::•<core::int>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::List<core::int>?> #t184 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
          #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String}, #t184.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
        }
      }
    #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t183;
  core::List<core::List<core::int>> list70 = block {
    final core::List<core::List<core::int>> #t185 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t185.{core::List::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → void};
  } =>#t185;
  core::Set<core::List<core::int>?> set70 = block {
    final core::Set<core::List<core::int>?> #t186 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t186.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
    #t186.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t186;
  core::Map<core::String, core::List<core::int>?> map70 = block {
    final core::Map<core::String, core::List<core::int>?> #t187 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t187.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int>(0)){(core::String, core::List<core::int>?) → void};
    #t187.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t187;
  core::List<core::List<core::int>> list71 = block {
    final core::List<core::List<core::int>> #t188 = core::_GrowableList::•<core::List<core::int>>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t188.{core::List::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → void};
  } =>#t188;
  core::Set<core::List<core::int>?> set71 = block {
    final core::Set<core::List<core::int>?> #t189 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t189.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
    #t189.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
  } =>#t189;
  core::Map<core::String, core::List<core::int>?> map71 = block {
    final core::Map<core::String, core::List<core::int>?> #t190 = <core::String, core::List<core::int>?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t190.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int>(0)){(core::String, core::List<core::int>?) → void};
    #t190.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
  } =>#t190;
  core::List<core::num> list80 = block {
    final core::List<core::num> #t191 = core::_GrowableList::•<core::num>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t191.{core::List::add}{Invariant}(42){(core::num) → void};
      else
        #t191.{core::List::add}{Invariant}(3.14){(core::num) → void};
  } =>#t191;
  core::Set<core::num?> set80 = block {
    final core::Set<core::num?> #t192 = new col::_CompactLinkedHashSet::•<core::num?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t192.{core::Set::add}{Invariant}(42){(core::num?) → core::bool};
      else
        #t192.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
    #t192.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
  } =>#t192;
  core::Map<core::String, core::num?> map80 = block {
    final core::Map<core::String, core::num?> #t193 = <core::String, core::num?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t193.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::num?) → void};
      else
        #t193.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
    #t193.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
  } =>#t193;
  core::List<core::num> list81 = block {
    final core::List<core::num> #t194 = core::_GrowableList::•<core::num>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t194.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num>) → void};
      else
        #t194.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
  } =>#t194;
  core::Set<core::num?> set81 = block {
    final core::Set<core::num?> #t195 = new col::_CompactLinkedHashSet::•<core::num?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t195.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
      else
        #t195.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num?>) → void};
    #t195.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
  } =>#t195;
  core::Map<core::String, core::num?> map81 = block {
    final core::Map<core::String, core::num?> #t196 = <core::String, core::num?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::num?> #t197 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
          #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String}, #t197.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
        }
      }
      else {
        core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::num?> #t198 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
          #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String}, #t198.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
        }
      }
    #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
  } =>#t196;
  core::List<dynamic> list82 = block {
    final core::List<dynamic> #t199 = core::_GrowableList::•<dynamic>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t199.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
      else
        #t199.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
  } =>#t199;
  core::Set<dynamic> set82 = block {
    final core::Set<dynamic> #t200 = new col::_CompactLinkedHashSet::•<dynamic>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t200.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
      else
        #t200.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
    #t200.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
  } =>#t200;
  core::Map<dynamic, dynamic> map82 = block {
    final core::Map<dynamic, dynamic> #t201 = <dynamic, dynamic>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<dynamic, dynamic> #t202 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
          #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
        }
      }
      else {
        core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<dynamic, dynamic> #t203 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
          #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
        }
      }
    #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) → void};
  } =>#t201;
  core::List<core::num> list83 = block {
    final core::List<core::num> #t204 = core::_GrowableList::•<core::num>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t204.{core::List::add}{Invariant}(42){(core::num) → void};
      else
        #t204.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
  } =>#t204;
  core::Set<core::num?> set83 = block {
    final core::Set<core::num?> #t205 = new col::_CompactLinkedHashSet::•<core::num?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
        #t205.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
      else
        #t205.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
    #t205.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
  } =>#t205;
  core::Map<core::String, core::num?> map83 = block {
    final core::Map<core::String, core::num?> #t206 = <core::String, core::num?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
        core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
          final core::MapEntry<core::String, core::num?> #t207 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String}, #t207.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
        }
      }
      else
        #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
  } =>#t206;
  core::List<core::int> list90 = block {
    final core::List<core::int> #t208 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t208.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
  } =>#t208;
  core::Set<core::int?> set90 = block {
    final core::Set<core::int?> #t209 = new col::_CompactLinkedHashSet::•<core::int?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t209.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
    #t209.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t209;
  core::Map<core::String, core::int?> map90 = block {
    final core::Map<core::String, core::int?> #t210 = <core::String, core::int?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
      #t210.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t210;
  core::List<core::int> list91 = block {
    final core::List<core::int> #t211 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t212 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final core::int #t213 = #t212 as{TypeError,ForNonNullableByDefault} core::int;
          #t211.{core::List::add}{Invariant}(#t213){(core::int) → void};
        }
      }
    }
  } =>#t211;
  core::Set<core::int?> set91 = block {
    final core::Set<core::int?> #t214 = new col::_CompactLinkedHashSet::•<core::int?>();
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final dynamic #t215 = :sync-for-iterator.{core::Iterator::current}{dynamic};
        {
          final core::int? #t216 = #t215 as{TypeError,ForNonNullableByDefault} core::int?;
          #t214.{core::Set::add}{Invariant}(#t216){(core::int?) → core::bool};
        }
      }
    }
    #t214.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t214;
  core::Map<core::String, core::int?> map91 = block {
    final core::Map<core::String, core::int?> #t217 = <core::String, core::int?>{};
    for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int?>>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        final core::MapEntry<dynamic, dynamic> #t218 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
        {
          final core::String #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
          final core::int? #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
          #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String, core::int?) → void};
        }
      }
    }
    #t217.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t217;
  core::List<core::int> list100 = block {
    final core::List<core::int> #t221 = core::_GrowableList::•<core::int>(0);
    for (final core::int #t222 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
      #t221.{core::List::add}{Invariant}(42){(core::int) → void};
  } =>#t221;
  core::Set<core::int> set100 = block {
    final core::Set<core::int> #t223 = new col::_CompactLinkedHashSet::•<core::int>();
    for (final core::int #t224 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
      #t223.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
  } =>#t223;
  core::Map<core::String, core::int> map100 = block {
    final core::Map<core::String, core::int> #t225 = <core::String, core::int>{};
    for (final core::int #t226 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
      #t225.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int) → void};
  } =>#t225;
  core::List<core::int> list110 = block {
    final core::List<core::int> #t227 = core::_GrowableList::•<core::int>(0);
    {
      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
        #t227.{core::List::add}{Invariant}(i){(core::int) → void};
      }
    }
  } =>#t227;
  core::Set<core::int?> set110 = block {
    final core::Set<core::int?> #t228 = new col::_CompactLinkedHashSet::•<core::int?>();
    {
      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
        #t228.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
      }
    }
    #t228.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t228;
  core::Map<core::String, core::int?> map110 = block {
    final core::Map<core::String, core::int?> #t229 = <core::String, core::int?>{};
    {
      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
        #t229.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
      }
    }
    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t229;
  core::List<core::int> list120 = block {
    final core::List<core::int> #t230 = core::_GrowableList::•<core::int>(0);
    {
      core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
        #t230.{core::List::add}{Invariant}(i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
      }
    }
  } =>#t230;
  core::Set<core::int?> set120 = block {
    final core::Set<core::int?> #t231 = new col::_CompactLinkedHashSet::•<core::int?>();
    {
      core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
        #t231.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
      }
    }
    #t231.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
  } =>#t231;
  core::Map<core::String, core::int?> map120 = block {
    final core::Map<core::String, core::int?> #t232 = <core::String, core::int?>{};
    {
      core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
        dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
        #t232.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
      }
    }
    #t232.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
  } =>#t232;
  core::List<core::int> list130 = block {
    final core::List<core::int> #t233 = core::_GrowableList::•<core::int>(0);
    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      #t233.{core::List::add}{Invariant}(i){(core::int) → void};
  } =>#t233;
  core::Set<core::int> set130 = block {
    final core::Set<core::int> #t234 = new col::_CompactLinkedHashSet::•<core::int>();
    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      #t234.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
  } =>#t234;
  core::Map<core::int, core::int> map130 = block {
    final core::Map<core::int, core::int> #t235 = <core::int, core::int>{};
    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
      #t235.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
  } =>#t235;
}
static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic /* originally async */ {
  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
  core::bool* :is_sync = false;
  dynamic :return_value;
  (dynamic) → dynamic :async_op_then;
  (core::Object, core::StackTrace) → dynamic :async_op_error;
  core::int :await_jump_var = 0;
  dynamic :await_ctx_var;
  dynamic :saved_try_context_var0;
  dynamic :saved_try_context_var1;
  dynamic :exception0;
  dynamic :stack_trace0;
  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
    try {
      #L1:
      {
        block {
          final core::List<core::int> #t236 = core::_GrowableList::•<core::int>(0);
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                            ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
        } =>#t236;
        block {
          final core::Set<core::int?> #t237 = new col::_CompactLinkedHashSet::•<core::int?>();
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
  <int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
          #t237.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t237;
        block {
          final core::Map<core::int, core::int?> #t238 = <core::int, core::int?>{};
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                         ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int, core::int?) → void};
          #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                                ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
        } =>#t238;
        block {
          final core::List<core::int> #t239 = core::_GrowableList::•<core::int>(0);
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int)){(core::Iterable<core::int>) → void};
        } =>#t239;
        block {
          final core::Set<core::int?> #t240 = new col::_CompactLinkedHashSet::•<core::int?>();
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int?>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
  <int?>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?)){(core::Iterable<core::int?>) → void};
          #t240.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t240;
        block {
          final core::Map<core::int, core::int?> #t241 = <core::int, core::int?>{};
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int}) {
            core::Iterator<core::MapEntry<core::int, core::int?>> :sync-for-iterator = <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int?>>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              final core::MapEntry<core::int, core::int?> #t242 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int?>};
              #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int}, #t242.{core::MapEntry::value}{core::int?}){(core::int, core::int?) → void};
            }
          }
          #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                                     ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
        } =>#t241;
        block {
          final core::List<core::int> #t243 = core::_GrowableList::•<core::int>(0);
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
                                               ^"){(core::int) → void};
        } =>#t243;
        block {
          final core::Set<core::int?> #t244 = new col::_CompactLinkedHashSet::•<core::int?>();
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int?>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
                                                ^"){(core::int?) → core::bool};
          #t244.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t244;
        <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null};
        block {
          final core::List<core::String> #t245 = core::_GrowableList::•<core::String>(0);
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
            else
              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                                     ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
        } =>#t245;
        block {
          final core::Set<core::String?> #t246 = new col::_CompactLinkedHashSet::•<core::String?>();
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
  <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
            else
              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
  <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
          #t246.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
        } =>#t246;
        block {
          final core::Map<core::String, core::String?> #t247 = <core::String, core::String?>{};
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
  <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
            else
              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
  <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                                            ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
          #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
        } =>#t247;
        block {
          final core::List<core::int> #t248 = core::_GrowableList::•<core::int>(0);
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
              #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
                                                             ^"){(core::int) → void};
            else
              #t248.{core::List::add}{Invariant}(42){(core::int) → void};
        } =>#t248;
        block {
          final core::Set<core::int?> #t249 = new col::_CompactLinkedHashSet::•<core::int?>();
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
              #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
                                                              ^"){(core::int?) → core::bool};
            else
              #t249.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
          #t249.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t249;
        <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null};
        block {
          final core::List<core::int> #t250 = core::_GrowableList::•<core::int>(0);
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
              #t250.{core::List::add}{Invariant}(42){(core::int) → void};
            else
              #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
                                                                     ^"){(core::int) → void};
        } =>#t250;
        block {
          final core::Set<core::int?> #t251 = new col::_CompactLinkedHashSet::•<core::int?>();
          for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
              #t251.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
            else
              #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
  <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
                                                                      ^"){(core::int?) → core::bool};
          #t251.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t251;
        <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 - 'List' is from 'dart:core'.
  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                     ^": null};
        final core::int i = 0;
        block {
          final core::List<core::int> #t252 = core::_GrowableList::•<core::int>(0);
          {
            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              final core::int #t253 = :sync-for-iterator.{core::Iterator::current}{core::int};
              {
                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
  <int>[for (i in <int>[1]) i];
             ^";
                #t252.{core::List::add}{Invariant}(i){(core::int) → void};
              }
            }
          }
        } =>#t252;
        block {
          final core::Set<core::int?> #t254 = new col::_CompactLinkedHashSet::•<core::int?>();
          {
            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              final core::int #t255 = :sync-for-iterator.{core::Iterator::current}{core::int};
              {
                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
  <int?>{for (i in <int>[1]) i, null};
              ^";
                #t254.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
              }
            }
          }
          #t254.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t254;
        block {
          final core::Map<core::String, core::int?> #t256 = <core::String, core::int?>{};
          {
            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              final core::int #t257 = :sync-for-iterator.{core::Iterator::current}{core::int};
              {
                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
  <String, int?>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
                      ^";
                #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
              }
            }
          }
          #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
        } =>#t256;
        core::List<dynamic> list10 = block {
          final core::List<dynamic> #t258 = core::_GrowableList::•<dynamic>(0);
          {
            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 - 'Iterable' is from 'dart:core'.
  var list10 = [for (var i in \"not iterable\") i];
                              ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
              #t258.{core::List::add}{Invariant}(i){(dynamic) → void};
            }
          }
        } =>#t258;
        core::Set<dynamic> set10 = block {
          final core::Set<dynamic> #t259 = new col::_CompactLinkedHashSet::•<dynamic>();
          {
            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 - 'Iterable' is from 'dart:core'.
  var set10 = {for (var i in \"not iterable\") i, null};
                             ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
              #t259.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
            }
          }
          #t259.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
        } =>#t259;
        core::Map<core::String, dynamic> map10 = block {
          final core::Map<core::String, dynamic> #t260 = <core::String, dynamic>{};
          {
            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 - 'Iterable' is from 'dart:core'.
  var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
                             ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
              #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
            }
          }
          #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
        } =>#t260;
        core::List<core::int> list20 = block {
          final core::List<core::int> #t261 = core::_GrowableList::•<core::int>(0);
          {
            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var list20 = [for (int i in [\"not\", \"int\"]) i];
                               ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var list20 = [for (int i in [\"not\", \"int\"]) i];
                                      ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{core::Iterable::iterator}{core::Iterator<core::int>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
              #t261.{core::List::add}{Invariant}(i){(core::int) → void};
            }
          }
        } =>#t261;
        core::Set<core::int?> set20 = block {
          final core::Set<core::int?> #t262 = new col::_CompactLinkedHashSet::•<core::int?>();
          {
            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                              ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                     ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{core::Iterable::iterator}{core::Iterator<core::int>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
              #t262.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
            }
          }
          #t262.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t262;
        core::Map<core::String, core::int?> map20 = block {
          final core::Map<core::String, core::int?> #t263 = <core::String, core::int?>{};
          {
            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                              ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                     ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{core::Iterable::iterator}{core::Iterator<core::int>};
            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
              core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
              #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
            }
          }
          #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
        } =>#t263;
        final core::List<dynamic> #t264 = core::_GrowableList::•<dynamic>(0);
        {
          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 - 'Stream' is from 'dart:async'.
  var list30 = [await for (var i in \"not stream\") i];
                                    ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
          try
            #L2:
            while (true) {
              dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream);
              [yield] let dynamic #t266 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                #t264.{core::List::add}{Invariant}(i){(dynamic) → void};
              }
              else
                break #L2;
            }
          finally
            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
              :result_or_exception;
            }
        }
        core::List<dynamic> list30 = block {} =>#t264;
        final core::Set<dynamic> #t268 = new col::_CompactLinkedHashSet::•<dynamic>();
        {
          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 - 'Stream' is from 'dart:async'.
  var set30 = {await for (var i in \"not stream\") i, null};
                                   ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
          try
            #L3:
            while (true) {
              dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream);
              [yield] let dynamic #t270 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                #t268.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
              }
              else
                break #L3;
            }
          finally
            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
              :result_or_exception;
            }
        }
        core::Set<dynamic> set30 = block {
          #t268.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
        } =>#t268;
        final core::Map<core::String, dynamic> #t272 = <core::String, dynamic>{};
        {
          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 - 'Stream' is from 'dart:async'.
  var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                   ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
          try
            #L4:
            while (true) {
              dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream);
              [yield] let dynamic #t274 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                #t272.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
              }
              else
                break #L4;
            }
          finally
            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
              :result_or_exception;
            }
        }
        core::Map<core::String, dynamic> map30 = block {
          #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
        } =>#t272;
        final core::List<core::int> #t276 = core::_GrowableList::•<core::int>(0);
        {
          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                         ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
          try
            #L5:
            while (true) {
              dynamic #t277 = asy::_asyncStarMoveNextHelper(:stream);
              [yield] let dynamic #t278 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
                #t276.{core::List::add}{Invariant}(i){(core::int) → void};
              }
              else
                break #L5;
            }
          finally
            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
              :result_or_exception;
            }
        }
        core::List<core::int> list40 = block {} =>#t276;
        final core::Set<core::int?> #t280 = new col::_CompactLinkedHashSet::•<core::int?>();
        {
          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                        ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                               ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
          try
            #L6:
            while (true) {
              dynamic #t281 = asy::_asyncStarMoveNextHelper(:stream);
              [yield] let dynamic #t282 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
                #t280.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
              }
              else
                break #L6;
            }
          finally
            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
              :result_or_exception;
            }
        }
        core::Set<core::int?> set40 = block {
          #t280.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t280;
        final core::Map<core::String, core::int?> #t284 = <core::String, core::int?>{};
        {
          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                        ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                               ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
          try
            #L7:
            while (true) {
              dynamic #t285 = asy::_asyncStarMoveNextHelper(:stream);
              [yield] let dynamic #t286 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
                #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
              }
              else
                break #L7;
            }
          finally
            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
              :result_or_exception;
            }
        }
        core::Map<core::String, core::int?> map40 = block {
          #t284.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
        } =>#t284;
        core::List<core::int> list50 = block {
          final core::List<core::int> #t288 = core::_GrowableList::•<core::int>(0);
          for (; ; )
            #t288.{core::List::add}{Invariant}(42){(core::int) → void};
        } =>#t288;
        core::Set<core::int?> set50 = block {
          final core::Set<core::int?> #t289 = new col::_CompactLinkedHashSet::•<core::int?>();
          for (; ; )
            #t289.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
          #t289.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t289;
        core::Map<core::String, core::int?> map50 = block {
          final core::Map<core::String, core::int?> #t290 = <core::String, core::int?>{};
          for (; ; )
            #t290.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
          #t290.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
        } =>#t290;
        core::List<core::int> list60 = block {
          final core::List<core::int> #t291 = core::_GrowableList::•<core::int>(0);
          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
  var list60 = [for (; \"not bool\";) 42];
                       ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
            #t291.{core::List::add}{Invariant}(42){(core::int) → void};
        } =>#t291;
        core::Set<core::int?> set60 = block {
          final core::Set<core::int?> #t292 = new col::_CompactLinkedHashSet::•<core::int?>();
          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
  var set60 = {for (; \"not bool\";) 42, null};
                      ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
            #t292.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
          #t292.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
        } =>#t292;
        core::Map<core::String, core::int?> map60 = block {
          final core::Map<core::String, core::int?> #t293 = <core::String, core::int?>{};
          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
  var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                      ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
            #t293.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
          #t293.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
        } =>#t293;
      }
      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
      return;
    }
    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
    }
  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
  :async_op(null, null){() → dynamic};
  :is_sync = true;
  return :async_future;
}
static method testForElementErrorsNotAsync(asy::Stream<core::int> stream) → dynamic {
  block {
    final core::List<core::int> #t294 = core::_GrowableList::•<core::int>(0);
    await for (core::int i in stream)
      #t294.{core::List::add}{Invariant}(i){(core::int) → void};
  } =>#t294;
  block {
    final core::Set<core::int> #t295 = new col::_CompactLinkedHashSet::•<core::int>();
    await for (core::int i in stream)
      #t295.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
  } =>#t295;
  block {
    final core::Map<core::String, core::int> #t296 = <core::String, core::int>{};
    await for (core::int i in stream)
      #t296.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int) → void};
  } =>#t296;
}
static method testPromotion(self::A a) → dynamic {
  core::List<core::int> list10 = block {
    final core::List<core::int> #t297 = core::_GrowableList::•<core::int>(0);
    if(a is{ForNonNullableByDefault} self::B)
      #t297.{core::List::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → void};
  } =>#t297;
  core::Set<core::int> set10 = block {
    final core::Set<core::int> #t298 = new col::_CompactLinkedHashSet::•<core::int>();
    if(a is{ForNonNullableByDefault} self::B)
      #t298.{core::Set::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → core::bool};
  } =>#t298;
  core::Map<core::int, core::int> map10 = block {
    final core::Map<core::int, core::int> #t299 = <core::int, core::int>{};
    if(a is{ForNonNullableByDefault} self::B)
      #t299.{core::Map::[]=}{Invariant}(a{self::B}.{self::B::foo}{core::int}, a{self::B}.{self::B::foo}{core::int}){(core::int, core::int) → void};
  } =>#t299;
}
static method main() → dynamic {}

constants  {
  #C1 = null
}
