library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: 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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.dart:88:28: 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_inference.dart:89:43: 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_inference.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_inference.dart:91:32: 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_inference.dart:92:47: 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_inference.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_inference.dart:94: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, null};
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: 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_inference.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_inference.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_inference.dart:97: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, null};
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97: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, null};
//                                       ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: 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_inference.dart:98:61: 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_inference.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_inference.dart:100: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, null};
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: 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_inference.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_inference.dart:103: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, null};
//                               ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: 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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.dart:230:14: Error: Setter not found: 'i'.
//   <int>[for (i in <int>[1]) i];
//              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Setter not found: 'i'.
//   <int>{for (i in <int>[1]) i, null};
//              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Setter not found: 'i'.
// 	<String, int>{for (i in <int>[1]) "bar": i, "baz": null};
// 	                   ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.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_inference.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_inference.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_inference.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_inference.dart:211: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", null};
//                                             ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: 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_inference.dart:212:57: 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_inference.dart:212:64: 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_inference.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_inference.dart:214: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"], null};
//                                                 ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: 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_inference.dart:215:61: 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_inference.dart:215:69: 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_inference.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_inference.dart:217: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, null};
//                                                ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: 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_inference.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_inference.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_inference.dart:220: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, null};
//                                                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220: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, null};
//                                                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: 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_inference.dart:221:92: 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_inference.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_inference.dart:223: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, null};
//                                                              ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: 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_inference.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_inference.dart:226: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, null};
//                                                                      ^
//
// pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: 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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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_inference.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;

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::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t1.{core::List::add}(42);
  } =>#t1;
  core::Set<core::int*>* set10 = block {
    final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t2.{core::Set::add}(42);
    #t2.{core::Set::add}(null);
  } =>#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} core::bool*)
      #t3.{core::Map::[]=}("bar", 42);
    #t3.{core::Map::[]=}("baz", null);
  } =>#t3;
  core::List<dynamic>* list11 = block {
    final core::List<dynamic>* #t4 = <dynamic>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t4.{core::List::add}(dynVar);
  } =>#t4;
  core::Set<dynamic>* set11 = block {
    final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t5.{core::Set::add}(dynVar);
    #t5.{core::Set::add}(null);
  } =>#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} core::bool*)
      #t6.{core::Map::[]=}("bar", dynVar);
    #t6.{core::Map::[]=}("baz", null);
  } =>#t6;
  core::List<core::List<core::int*>*>* list12 = block {
    final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t7.{core::List::add}(<core::int*>[42]);
  } =>#t7;
  core::Set<core::List<core::int*>*>* set12 = block {
    final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t8.{core::Set::add}(<core::int*>[42]);
    #t8.{core::Set::add}(null);
  } =>#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} core::bool*)
      #t9.{core::Map::[]=}("bar", <core::int*>[42]);
    #t9.{core::Map::[]=}("baz", null);
  } =>#t9;
  core::List<core::int*>* list20 = block {
    final core::List<core::int*>* #t10 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::int* #t11 in <core::int*>[42])
        #t10.{core::List::add}(#t11);
  } =>#t10;
  core::Set<core::int*>* set20 = block {
    final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::int* #t13 in <core::int*>[42])
        #t12.{core::Set::add}(#t13);
    #t12.{core::Set::add}(null);
  } =>#t12;
  core::Map<core::String*, core::int*>* map20 = block {
    final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<core::String*, core::int*>* #t15 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
        #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}, #t15.{core::MapEntry::value});
    #t14.{core::Map::[]=}("baz", null);
  } =>#t14;
  core::List<dynamic>* list21 = block {
    final core::List<dynamic>* #t16 = <dynamic>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final dynamic #t17 in <dynamic>[dynVar])
        #t16.{core::List::add}(#t17);
  } =>#t16;
  core::Set<dynamic>* set21 = block {
    final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final dynamic #t19 in <dynamic>[dynVar])
        #t18.{core::Set::add}(#t19);
    #t18.{core::Set::add}(null);
  } =>#t18;
  core::Map<core::String*, dynamic>* map21 = block {
    final core::Map<core::String*, dynamic>* #t20 = <core::String*, dynamic>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<core::String*, dynamic>* #t21 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
        #t20.{core::Map::[]=}(#t21.{core::MapEntry::key}, #t21.{core::MapEntry::value});
    #t20.{core::Map::[]=}("baz", null);
  } =>#t20;
  core::List<core::List<core::int*>*>* list22 = block {
    final core::List<core::List<core::int*>*>* #t22 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::List<core::int*>* #t23 in <core::List<core::int*>*>[<core::int*>[42]])
        #t22.{core::List::add}(#t23);
  } =>#t22;
  core::Set<core::List<core::int*>*>* set22 = block {
    final core::Set<core::List<core::int*>*>* #t24 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::List<core::int*>* #t25 in <core::List<core::int*>*>[<core::int*>[42]])
        #t24.{core::Set::add}(#t25);
    #t24.{core::Set::add}(null);
  } =>#t24;
  core::Map<core::String*, core::List<core::int*>*>* map22 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t26 = <core::String*, core::List<core::int*>*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
        #t26.{core::Map::[]=}(#t27.{core::MapEntry::key}, #t27.{core::MapEntry::value});
    #t26.{core::Map::[]=}("baz", null);
  } =>#t26;
  core::List<core::int*>* list30 = block {
    final core::List<core::int*>* #t28 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::int* #t29 in <core::int*>[42])
          #t28.{core::List::add}(#t29);
  } =>#t28;
  core::Set<core::int*>* set30 = block {
    final core::Set<core::int*>* #t30 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::int* #t31 in <core::int*>[42])
          #t30.{core::Set::add}(#t31);
    #t30.{core::Set::add}(null);
  } =>#t30;
  core::Map<core::String*, core::int*>* map30 = block {
    final core::Map<core::String*, core::int*>* #t32 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::int*>* #t33 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
          #t32.{core::Map::[]=}(#t33.{core::MapEntry::key}, #t33.{core::MapEntry::value});
    #t32.{core::Map::[]=}("baz", null);
  } =>#t32;
  core::List<dynamic>* list31 = block {
    final core::List<dynamic>* #t34 = <dynamic>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final dynamic #t35 in <dynamic>[dynVar])
          #t34.{core::List::add}(#t35);
  } =>#t34;
  core::Set<dynamic>* set31 = block {
    final core::Set<dynamic>* #t36 = col::LinkedHashSet::•<dynamic>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final dynamic #t37 in <dynamic>[dynVar])
          #t36.{core::Set::add}(#t37);
    #t36.{core::Set::add}(null);
  } =>#t36;
  core::Map<core::String*, dynamic>* map31 = block {
    final core::Map<core::String*, dynamic>* #t38 = <core::String*, dynamic>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, dynamic>* #t39 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
          #t38.{core::Map::[]=}(#t39.{core::MapEntry::key}, #t39.{core::MapEntry::value});
    #t38.{core::Map::[]=}("baz", null);
  } =>#t38;
  core::List<core::List<core::int*>*>* list33 = block {
    final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t41 in <core::List<core::int*>*>[<core::int*>[42]])
          #t40.{core::List::add}(#t41);
  } =>#t40;
  core::Set<core::List<core::int*>*>* set33 = block {
    final core::Set<core::List<core::int*>*>* #t42 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t43 in <core::List<core::int*>*>[<core::int*>[42]])
          #t42.{core::Set::add}(#t43);
    #t42.{core::Set::add}(null);
  } =>#t42;
  core::Map<core::String*, core::List<core::int*>*>* map33 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t44 = <core::String*, core::List<core::int*>*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
          #t44.{core::Map::[]=}(#t45.{core::MapEntry::key}, #t45.{core::MapEntry::value});
    #t44.{core::Map::[]=}("baz", null);
  } =>#t44;
  core::List<core::List<core::int*>*>* list40 = block {
    final core::List<core::List<core::int*>*>* #t46 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::List<core::int*>* #t47 in <core::List<core::int*>*>[<core::int*>[]])
        #t46.{core::List::add}(#t47);
  } =>#t46;
  core::Set<core::List<core::int*>*>* set40 = block {
    final core::Set<core::List<core::int*>*>* #t48 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::List<core::int*>* #t49 in <core::List<core::int*>*>[<core::int*>[]])
        #t48.{core::Set::add}(#t49);
    #t48.{core::Set::add}(null);
  } =>#t48;
  core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: 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*>*>* #t50 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::List<core::int*>* #t51 in let final core::Set<core::List<core::int*>*>* #t52 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t53 = #t52.{core::Set::add}(<core::int*>[]) in #t52)
        #t50.{core::List::add}(#t51);
  } =>#t50;
  core::Set<core::List<core::int*>*>* set41 = block {
    final core::Set<core::List<core::int*>*>* #t54 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::List<core::int*>* #t55 in let final core::Set<core::List<core::int*>*>* #t56 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t57 = #t56.{core::Set::add}(<core::int*>[]) in #t56)
        #t54.{core::Set::add}(#t55);
    #t54.{core::Set::add}(null);
  } =>#t54;
  core::List<core::List<core::int*>*>* list42 = block {
    final core::List<core::List<core::int*>*>* #t58 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t59 in <core::List<core::int*>*>[<core::int*>[]])
          #t58.{core::List::add}(#t59);
  } =>#t58;
  core::Set<core::List<core::int*>*>* set42 = block {
    final core::Set<core::List<core::int*>*>* #t60 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t61 in <core::List<core::int*>*>[<core::int*>[]])
          #t60.{core::Set::add}(#t61);
    #t60.{core::Set::add}(null);
  } =>#t60;
  core::Map<core::String*, core::List<core::int*>*>* map42 = 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} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
          #t62.{core::Map::[]=}(#t63.{core::MapEntry::key}, #t63.{core::MapEntry::value});
    #t62.{core::Map::[]=}("baz", null);
  } =>#t62;
  core::List<core::int*>* list50 = block {
    final core::List<core::int*>* #t64 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::int* #t65 in <core::int*>[])
        #t64.{core::List::add}(#t65);
  } =>#t64;
  core::Set<core::int*>* set50 = block {
    final core::Set<core::int*>* #t66 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::int* #t67 in <core::int*>[])
        #t66.{core::Set::add}(#t67);
    #t66.{core::Set::add}(null);
  } =>#t66;
  core::Map<core::String*, core::int*>* map50 = block {
    final core::Map<core::String*, core::int*>* #t68 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<core::String*, core::int*>* #t69 in <core::String*, core::int*>{}.{core::Map::entries})
        #t68.{core::Map::[]=}(#t69.{core::MapEntry::key}, #t69.{core::MapEntry::value});
    #t68.{core::Map::[]=}("baz", null);
  } =>#t68;
  core::List<core::int*>* list51 = block {
    final core::List<core::int*>* #t70 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::int* #t71 in let final core::Set<core::int*>* #t72 = col::LinkedHashSet::•<core::int*>() in #t72)
        #t70.{core::List::add}(#t71);
  } =>#t70;
  core::Set<core::int*>* set51 = block {
    final core::Set<core::int*>* #t73 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::int* #t74 in let final core::Set<core::int*>* #t75 = col::LinkedHashSet::•<core::int*>() in #t75)
        #t73.{core::Set::add}(#t74);
    #t73.{core::Set::add}(null);
  } =>#t73;
  core::List<core::int*>* list52 = block {
    final core::List<core::int*>* #t76 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::int* #t77 in <core::int*>[])
          #t76.{core::List::add}(#t77);
  } =>#t76;
  core::Set<core::int*>* set52 = block {
    final core::Set<core::int*>* #t78 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::int* #t79 in <core::int*>[])
          #t78.{core::Set::add}(#t79);
    #t78.{core::Set::add}(null);
  } =>#t78;
  core::Map<core::String*, core::int*>* map52 = block {
    final core::Map<core::String*, core::int*>* #t80 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::int*>* #t81 in <core::String*, core::int*>{}.{core::Map::entries})
          #t80.{core::Map::[]=}(#t81.{core::MapEntry::key}, #t81.{core::MapEntry::value});
    #t80.{core::Map::[]=}("baz", null);
  } =>#t80;
  core::List<core::List<core::int*>*>* list60 = block {
    final core::List<core::List<core::int*>*>* #t82 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::List<core::int*>* #t83 in <core::List<core::int*>*>[<core::int*>[]])
        #t82.{core::List::add}(#t83);
  } =>#t82;
  core::Set<core::List<core::int*>*>* set60 = block {
    final core::Set<core::List<core::int*>*>* #t84 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::List<core::int*>* #t85 in <core::List<core::int*>*>[<core::int*>[]])
        #t84.{core::Set::add}(#t85);
    #t84.{core::Set::add}(null);
  } =>#t84;
  core::Map<core::String*, core::List<core::int*>*>* map60 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t86 = <core::String*, core::List<core::int*>*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
        #t86.{core::Map::[]=}(#t87.{core::MapEntry::key}, #t87.{core::MapEntry::value});
    #t86.{core::Map::[]=}("baz", null);
  } =>#t86;
  core::List<core::List<core::int*>*>* list61 = block {
    final core::List<core::List<core::int*>*>* #t88 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t89 in <core::List<core::int*>*>[<core::int*>[]])
          #t88.{core::List::add}(#t89);
  } =>#t88;
  core::Set<core::List<core::int*>*>* set61 = block {
    final core::Set<core::List<core::int*>*>* #t90 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t91 in <core::List<core::int*>*>[<core::int*>[]])
          #t90.{core::Set::add}(#t91);
    #t90.{core::Set::add}(null);
  } =>#t90;
  core::Map<core::String*, core::List<core::int*>*>* map61 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t92 = <core::String*, core::List<core::int*>*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
          #t92.{core::Map::[]=}(#t93.{core::MapEntry::key}, #t93.{core::MapEntry::value});
    #t92.{core::Map::[]=}("baz", null);
  } =>#t92;
  core::List<core::List<core::int*>*>* list70 = block {
    final core::List<core::List<core::int*>*>* #t94 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t94.{core::List::add}(<core::int*>[]);
  } =>#t94;
  core::Set<core::List<core::int*>*>* set70 = block {
    final core::Set<core::List<core::int*>*>* #t95 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t95.{core::Set::add}(<core::int*>[]);
    #t95.{core::Set::add}(null);
  } =>#t95;
  core::List<core::List<core::int*>*>* list71 = block {
    final core::List<core::List<core::int*>*>* #t96 = <core::List<core::int*>*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t96.{core::List::add}(<core::int*>[]);
  } =>#t96;
  core::Set<core::List<core::int*>*>* set71 = block {
    final core::Set<core::List<core::int*>*>* #t97 = col::LinkedHashSet::•<core::List<core::int*>*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t97.{core::Set::add}(<core::int*>[]);
    #t97.{core::Set::add}(null);
  } =>#t97;
  core::List<core::num*>* list80 = block {
    final core::List<core::num*>* #t98 = <core::num*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t98.{core::List::add}(42);
    else
      #t98.{core::List::add}(3.14);
  } =>#t98;
  core::Set<core::num*>* set80 = block {
    final core::Set<core::num*>* #t99 = col::LinkedHashSet::•<core::num*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t99.{core::Set::add}(42);
    else
      #t99.{core::Set::add}(3.14);
    #t99.{core::Set::add}(null);
  } =>#t99;
  core::Map<core::String*, core::num*>* map80 = block {
    final core::Map<core::String*, core::num*>* #t100 = <core::String*, core::num*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t100.{core::Map::[]=}("bar", 42);
    else
      #t100.{core::Map::[]=}("bar", 3.14);
    #t100.{core::Map::[]=}("baz", null);
  } =>#t100;
  core::List<core::num*>* list81 = block {
    final core::List<core::num*>* #t101 = <core::num*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::num* #t102 in listInt)
        #t101.{core::List::add}(#t102);
    else
      for (final core::num* #t103 in listDouble)
        #t101.{core::List::add}(#t103);
  } =>#t101;
  core::Set<core::num*>* set81 = block {
    final core::Set<core::num*>* #t104 = col::LinkedHashSet::•<core::num*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::num* #t105 in listInt)
        #t104.{core::Set::add}(#t105);
    else
      for (final core::num* #t106 in listDouble)
        #t104.{core::Set::add}(#t106);
    #t104.{core::Set::add}(null);
  } =>#t104;
  core::Map<core::String*, core::num*>* map81 = block {
    final core::Map<core::String*, core::num*>* #t107 = <core::String*, core::num*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<core::String*, core::num*>* #t108 in mapToInt.{core::Map::entries})
        #t107.{core::Map::[]=}(#t108.{core::MapEntry::key}, #t108.{core::MapEntry::value});
    else
      for (final core::MapEntry<core::String*, core::num*>* #t109 in mapToDouble.{core::Map::entries})
        #t107.{core::Map::[]=}(#t109.{core::MapEntry::key}, #t109.{core::MapEntry::value});
    #t107.{core::Map::[]=}("baz", null);
  } =>#t107;
  core::List<dynamic>* list82 = block {
    final core::List<dynamic>* #t110 = <dynamic>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final dynamic #t111 in listInt)
        #t110.{core::List::add}(#t111);
    else
      for (final dynamic #t112 in dynVar as{TypeError} core::Iterable<dynamic>*)
        #t110.{core::List::add}(#t112);
  } =>#t110;
  core::Set<dynamic>* set82 = block {
    final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final dynamic #t114 in listInt)
        #t113.{core::Set::add}(#t114);
    else
      for (final dynamic #t115 in dynVar as{TypeError} core::Iterable<dynamic>*)
        #t113.{core::Set::add}(#t115);
    #t113.{core::Set::add}(null);
  } =>#t113;
  core::Set<dynamic>* map82 = block {
    final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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};
                                     ^");
    else
      for (final dynamic #t117 in dynVar as{TypeError} core::Iterable<dynamic>*)
        #t116.{core::Set::add}(#t117);
    #t116.{core::Set::add}(null);
  } =>#t116;
  core::List<core::num*>* list83 = block {
    final core::List<core::num*>* #t118 = <core::num*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t118.{core::List::add}(42);
    else
      for (final core::num* #t119 in listDouble)
        #t118.{core::List::add}(#t119);
  } =>#t118;
  core::Set<core::num*>* set83 = block {
    final core::Set<core::num*>* #t120 = col::LinkedHashSet::•<core::num*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::num* #t121 in listInt)
        #t120.{core::Set::add}(#t121);
    else
      #t120.{core::Set::add}(3.14);
    #t120.{core::Set::add}(null);
  } =>#t120;
  core::Map<core::String*, core::num*>* map83 = block {
    final core::Map<core::String*, core::num*>* #t122 = <core::String*, core::num*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<core::String*, core::num*>* #t123 in mapToInt.{core::Map::entries})
        #t122.{core::Map::[]=}(#t123.{core::MapEntry::key}, #t123.{core::MapEntry::value});
    else
      #t122.{core::Map::[]=}("bar", 3.14);
    #t122.{core::Map::[]=}("baz", null);
  } =>#t122;
  core::List<core::int*>* list90 = block {
    final core::List<core::int*>* #t124 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t124.{core::List::add}(dynVar as{TypeError} core::int*);
  } =>#t124;
  core::Set<core::int*>* set90 = block {
    final core::Set<core::int*>* #t125 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t125.{core::Set::add}(dynVar as{TypeError} core::int*);
    #t125.{core::Set::add}(null);
  } =>#t125;
  core::Map<core::String*, core::int*>* map90 = block {
    final core::Map<core::String*, core::int*>* #t126 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t126.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
    #t126.{core::Map::[]=}("baz", null);
  } =>#t126;
  core::List<core::int*>* list91 = block {
    final core::List<core::int*>* #t127 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final dynamic #t128 in dynVar as{TypeError} core::Iterable<dynamic>*) {
        final core::int* #t129 = #t128 as{TypeError} core::int*;
        #t127.{core::List::add}(#t129);
      }
  } =>#t127;
  core::Set<core::int*>* set91 = block {
    final core::Set<core::int*>* #t130 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final dynamic #t131 in dynVar as{TypeError} core::Iterable<dynamic>*) {
        final core::int* #t132 = #t131 as{TypeError} core::int*;
        #t130.{core::Set::add}(#t132);
      }
    #t130.{core::Set::add}(null);
  } =>#t130;
  core::Map<core::String*, core::int*>* map91 = block {
    final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
        final core::String* #t135 = #t134.{core::MapEntry::key} as{TypeError} core::String*;
        final core::int* #t136 = #t134.{core::MapEntry::value} as{TypeError} core::int*;
        #t133.{core::Map::[]=}(#t135, #t136);
      }
    #t133.{core::Map::[]=}("baz", null);
  } =>#t133;
  core::List<core::int*>* list100 = block {
    final core::List<core::int*>* #t137 = <core::int*>[];
    if(dynVar as{TypeError} core::bool*)
      #t137.{core::List::add}(42);
  } =>#t137;
  core::Set<core::int*>* set100 = block {
    final core::Set<core::int*>* #t138 = col::LinkedHashSet::•<core::int*>();
    if(dynVar as{TypeError} core::bool*)
      #t138.{core::Set::add}(42);
  } =>#t138;
  core::Map<core::int*, core::int*>* map100 = block {
    final core::Map<core::int*, core::int*>* #t139 = <core::int*, core::int*>{};
    if(dynVar as{TypeError} core::bool*)
      #t139.{core::Map::[]=}(42, 42);
  } =>#t139;
}
static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
  block {
    final core::List<core::int*>* #t140 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*);
  } =>#t140;
  block {
    final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: 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} core::int*);
    #t142.{core::Set::add}(null);
  } =>#t142;
  block {
    final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: 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} core::int*);
    #t144.{core::Map::[]=}("baz", null);
  } =>#t144;
  block {
    final core::List<core::int*>* #t146 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::int* #t147 in <core::int*>[let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*])
        #t146.{core::List::add}(#t147);
  } =>#t146;
  block {
    final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::int* #t150 in <core::int*>[let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: 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} core::int*])
        #t149.{core::Set::add}(#t150);
    #t149.{core::Set::add}(null);
  } =>#t149;
  block {
    final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      for (final core::MapEntry<core::String*, core::int*>* #t153 in <core::String*, core::int*>{"bar": let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: 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} core::int*}.{core::Map::entries})
        #t152.{core::Map::[]=}(#t153.{core::MapEntry::key}, #t153.{core::MapEntry::value});
    #t152.{core::Map::[]=}("baz", null);
  } =>#t152;
  block {
    final core::List<core::int*>* #t155 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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];
                              ^");
  } =>#t155;
  block {
    final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94: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, null};
                              ^");
    #t156.{core::Set::add}(null);
  } =>#t156;
  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: 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_inference.dart:95:39: 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*>* #t157 = <core::String*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
    else
      #t157.{core::List::add}(let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
  } =>#t157;
  block {
    final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97: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, null};
                              ^" in 42 as{TypeError} core::String*);
    else
      #t160.{core::Set::add}(let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97: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, null};
                                      ^" in 3.14 as{TypeError} core::String*);
    #t160.{core::Set::add}(null);
  } =>#t160;
  block {
    final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: 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} core::String*);
    else
      #t163.{core::Map::[]=}("baz", let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: 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} core::String*);
    #t163.{core::Map::[]=}("baz", null);
  } =>#t163;
  block {
    final core::List<core::int*>* #t166 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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];
                              ^");
    else
      #t166.{core::List::add}(42);
  } =>#t166;
  block {
    final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100: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, null};
                              ^");
    else
      #t167.{core::Set::add}(42);
    #t167.{core::Set::add}(null);
  } =>#t167;
  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: 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_inference.dart:101:39: 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*>* #t168 = <core::int*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t168.{core::List::add}(42);
    else
      #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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];
                                      ^");
  } =>#t168;
  block {
    final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103: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, null};
                              ^");
    else
      #t169.{core::Set::add}(42);
    #t169.{core::Set::add}(null);
  } =>#t169;
  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: 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_inference.dart:104:54: 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_inference.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_inference.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_inference.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_inference.dart:109:70: Error: Expected ':' after this.
  Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                                     ^": null};
  core::Map<dynamic, core::Null?>* map12 = <dynamic, core::Null?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
  var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                  ^": null};
  core::Map<dynamic, core::Null?>* map13 = <dynamic, core::Null?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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*>* #t170 = <core::int*>[];
    if(let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::bool*)
      #t170.{core::List::add}(42);
  } =>#t170;
  core::Set<core::int*>* set20 = block {
    final core::Set<core::int*>* #t172 = col::LinkedHashSet::•<core::int*>();
    if(let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::bool*)
      #t172.{core::Set::add}(42);
  } =>#t172;
  core::Map<core::int*, core::int*>* map30 = block {
    final core::Map<core::int*, core::int*>* #t174 = <core::int*, core::int*>{};
    if(let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::bool*)
      #t174.{core::Map::[]=}(42, 42);
  } =>#t174;
  core::List<core::String*>* list40 = block {
    final core::List<core::String*>* #t176 = <core::String*>[];
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
    else
      #t176.{core::List::add}(let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
  } =>#t176;
  core::Set<core::String*>* set40 = block {
    final core::Set<core::String*>* #t179 = col::LinkedHashSet::•<core::String*>();
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
    else
      #t179.{core::Set::add}(let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
  } =>#t179;
  core::Map<core::String*, core::int*>* map40 = block {
    final core::Map<core::String*, core::int*>* #t182 = <core::String*, core::int*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*, 42);
    else
      #t182.{core::Map::[]=}(let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*, 42);
  } =>#t182;
  core::Map<core::int*, core::String*>* map41 = block {
    final core::Map<core::int*, core::String*>* #t185 = <core::int*, core::String*>{};
    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
      #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
    else
      #t185.{core::Map::[]=}(42, let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
  } =>#t185;
}
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*>* #t188 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t188.{core::List::add}(42);
  } =>#t188;
  core::Set<core::int*>* set10 = block {
    final core::Set<core::int*>* #t189 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t189.{core::Set::add}(42);
    #t189.{core::Set::add}(null);
  } =>#t189;
  core::Map<core::String*, core::int*>* map10 = block {
    final core::Map<core::String*, core::int*>* #t190 = <core::String*, core::int*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t190.{core::Map::[]=}("bar", 42);
    #t190.{core::Map::[]=}("baz", null);
  } =>#t190;
  core::List<dynamic>* list11 = block {
    final core::List<dynamic>* #t191 = <dynamic>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t191.{core::List::add}(dynVar);
  } =>#t191;
  core::Set<dynamic>* set11 = block {
    final core::Set<dynamic>* #t192 = col::LinkedHashSet::•<dynamic>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t192.{core::Set::add}(dynVar);
    #t192.{core::Set::add}(null);
  } =>#t192;
  core::Map<core::String*, dynamic>* map11 = block {
    final core::Map<core::String*, dynamic>* #t193 = <core::String*, dynamic>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t193.{core::Map::[]=}("bar", dynVar);
    #t193.{core::Map::[]=}("baz", null);
  } =>#t193;
  core::List<core::List<core::int*>*>* list12 = block {
    final core::List<core::List<core::int*>*>* #t194 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t194.{core::List::add}(<core::int*>[42]);
  } =>#t194;
  core::Set<core::List<core::int*>*>* set12 = block {
    final core::Set<core::List<core::int*>*>* #t195 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t195.{core::Set::add}(<core::int*>[42]);
    #t195.{core::Set::add}(null);
  } =>#t195;
  core::Map<core::String*, core::List<core::int*>*>* map12 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t196 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t196.{core::Map::[]=}("bar", <core::int*>[42]);
    #t196.{core::Map::[]=}("baz", null);
  } =>#t196;
  core::List<core::int*>* list20 = block {
    final core::List<core::int*>* #t197 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::int* #t198 in <core::int*>[42])
        #t197.{core::List::add}(#t198);
  } =>#t197;
  core::Set<core::int*>* set20 = block {
    final core::Set<core::int*>* #t199 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::int* #t200 in <core::int*>[42])
        #t199.{core::Set::add}(#t200);
    #t199.{core::Set::add}(null);
  } =>#t199;
  core::Map<core::String*, core::int*>* map20 = block {
    final core::Map<core::String*, core::int*>* #t201 = <core::String*, core::int*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::MapEntry<core::String*, core::int*>* #t202 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
        #t201.{core::Map::[]=}(#t202.{core::MapEntry::key}, #t202.{core::MapEntry::value});
    #t201.{core::Map::[]=}("baz", null);
  } =>#t201;
  core::List<dynamic>* list21 = block {
    final core::List<dynamic>* #t203 = <dynamic>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final dynamic #t204 in <dynamic>[dynVar])
        #t203.{core::List::add}(#t204);
  } =>#t203;
  core::Set<dynamic>* set21 = block {
    final core::Set<dynamic>* #t205 = col::LinkedHashSet::•<dynamic>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final dynamic #t206 in <dynamic>[dynVar])
        #t205.{core::Set::add}(#t206);
    #t205.{core::Set::add}(null);
  } =>#t205;
  core::Map<core::String*, dynamic>* map21 = block {
    final core::Map<core::String*, dynamic>* #t207 = <core::String*, dynamic>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::MapEntry<core::String*, dynamic>* #t208 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
        #t207.{core::Map::[]=}(#t208.{core::MapEntry::key}, #t208.{core::MapEntry::value});
    #t207.{core::Map::[]=}("baz", null);
  } =>#t207;
  core::List<core::List<core::int*>*>* list22 = block {
    final core::List<core::List<core::int*>*>* #t209 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::List<core::int*>* #t210 in <core::List<core::int*>*>[<core::int*>[42]])
        #t209.{core::List::add}(#t210);
  } =>#t209;
  core::Set<core::List<core::int*>*>* set22 = block {
    final core::Set<core::List<core::int*>*>* #t211 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::List<core::int*>* #t212 in <core::List<core::int*>*>[<core::int*>[42]])
        #t211.{core::Set::add}(#t212);
    #t211.{core::Set::add}(null);
  } =>#t211;
  core::Map<core::String*, core::List<core::int*>*>* map22 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t213 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
        #t213.{core::Map::[]=}(#t214.{core::MapEntry::key}, #t214.{core::MapEntry::value});
    #t213.{core::Map::[]=}("baz", null);
  } =>#t213;
  core::List<core::int*>* list30 = block {
    final core::List<core::int*>* #t215 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::int* #t216 in <core::int*>[42])
          #t215.{core::List::add}(#t216);
  } =>#t215;
  core::Set<core::int*>* set30 = block {
    final core::Set<core::int*>* #t217 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::int* #t218 in <core::int*>[42])
          #t217.{core::Set::add}(#t218);
    #t217.{core::Set::add}(null);
  } =>#t217;
  core::Map<core::String*, core::int*>* map30 = block {
    final core::Map<core::String*, core::int*>* #t219 = <core::String*, core::int*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::int*>* #t220 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries})
          #t219.{core::Map::[]=}(#t220.{core::MapEntry::key}, #t220.{core::MapEntry::value});
    #t219.{core::Map::[]=}("baz", null);
  } =>#t219;
  core::List<dynamic>* list31 = block {
    final core::List<dynamic>* #t221 = <dynamic>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final dynamic #t222 in <dynamic>[dynVar])
          #t221.{core::List::add}(#t222);
  } =>#t221;
  core::Set<dynamic>* set31 = block {
    final core::Set<dynamic>* #t223 = col::LinkedHashSet::•<dynamic>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final dynamic #t224 in <dynamic>[dynVar])
          #t223.{core::Set::add}(#t224);
    #t223.{core::Set::add}(null);
  } =>#t223;
  core::Map<core::String*, dynamic>* map31 = block {
    final core::Map<core::String*, dynamic>* #t225 = <core::String*, dynamic>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, dynamic>* #t226 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries})
          #t225.{core::Map::[]=}(#t226.{core::MapEntry::key}, #t226.{core::MapEntry::value});
    #t225.{core::Map::[]=}("baz", null);
  } =>#t225;
  core::List<core::List<core::int*>*>* list33 = block {
    final core::List<core::List<core::int*>*>* #t227 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t228 in <core::List<core::int*>*>[<core::int*>[42]])
          #t227.{core::List::add}(#t228);
  } =>#t227;
  core::Set<core::List<core::int*>*>* set33 = block {
    final core::Set<core::List<core::int*>*>* #t229 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t230 in <core::List<core::int*>*>[<core::int*>[42]])
          #t229.{core::Set::add}(#t230);
    #t229.{core::Set::add}(null);
  } =>#t229;
  core::Map<core::String*, core::List<core::int*>*>* map33 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t231 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries})
          #t231.{core::Map::[]=}(#t232.{core::MapEntry::key}, #t232.{core::MapEntry::value});
    #t231.{core::Map::[]=}("baz", null);
  } =>#t231;
  core::List<core::List<core::int*>*>* list40 = block {
    final core::List<core::List<core::int*>*>* #t233 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::List<core::int*>* #t234 in <core::List<core::int*>*>[<core::int*>[]])
        #t233.{core::List::add}(#t234);
  } =>#t233;
  core::Set<core::List<core::int*>*>* set40 = block {
    final core::Set<core::List<core::int*>*>* #t235 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::List<core::int*>* #t236 in <core::List<core::int*>*>[<core::int*>[]])
        #t235.{core::Set::add}(#t236);
    #t235.{core::Set::add}(null);
  } =>#t235;
  core::Map<core::String*, core::List<core::int*>*>* map40 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t237 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
        #t237.{core::Map::[]=}(#t238.{core::MapEntry::key}, #t238.{core::MapEntry::value});
    #t237.{core::Map::[]=}("baz", null);
  } =>#t237;
  core::List<core::List<core::int*>*>* list41 = block {
    final core::List<core::List<core::int*>*>* #t239 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::List<core::int*>* #t240 in let final core::Set<core::List<core::int*>*>* #t241 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t242 = #t241.{core::Set::add}(<core::int*>[]) in #t241)
        #t239.{core::List::add}(#t240);
  } =>#t239;
  core::Set<core::List<core::int*>*>* set41 = block {
    final core::Set<core::List<core::int*>*>* #t243 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::List<core::int*>* #t244 in let final core::Set<core::List<core::int*>*>* #t245 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final dynamic #t246 = #t245.{core::Set::add}(<core::int*>[]) in #t245)
        #t243.{core::Set::add}(#t244);
    #t243.{core::Set::add}(null);
  } =>#t243;
  core::List<core::List<core::int*>*>* list42 = block {
    final core::List<core::List<core::int*>*>* #t247 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t248 in <core::List<core::int*>*>[<core::int*>[]])
          #t247.{core::List::add}(#t248);
  } =>#t247;
  core::Set<core::List<core::int*>*>* set42 = block {
    final core::Set<core::List<core::int*>*>* #t249 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t250 in <core::List<core::int*>*>[<core::int*>[]])
          #t249.{core::Set::add}(#t250);
    #t249.{core::Set::add}(null);
  } =>#t249;
  core::Map<core::String*, core::List<core::int*>*>* map42 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t251 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
          #t251.{core::Map::[]=}(#t252.{core::MapEntry::key}, #t252.{core::MapEntry::value});
    #t251.{core::Map::[]=}("baz", null);
  } =>#t251;
  core::List<core::int*>* list50 = block {
    final core::List<core::int*>* #t253 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::int* #t254 in <core::int*>[])
        #t253.{core::List::add}(#t254);
  } =>#t253;
  core::Set<core::int*>* set50 = block {
    final core::Set<core::int*>* #t255 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::int* #t256 in <core::int*>[])
        #t255.{core::Set::add}(#t256);
    #t255.{core::Set::add}(null);
  } =>#t255;
  core::Map<core::String*, core::int*>* map50 = block {
    final core::Map<core::String*, core::int*>* #t257 = <core::String*, core::int*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::MapEntry<core::String*, core::int*>* #t258 in <core::String*, core::int*>{}.{core::Map::entries})
        #t257.{core::Map::[]=}(#t258.{core::MapEntry::key}, #t258.{core::MapEntry::value});
    #t257.{core::Map::[]=}("baz", null);
  } =>#t257;
  core::List<core::int*>* list51 = block {
    final core::List<core::int*>* #t259 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::int* #t260 in let final core::Set<core::int*>* #t261 = col::LinkedHashSet::•<core::int*>() in #t261)
        #t259.{core::List::add}(#t260);
  } =>#t259;
  core::Set<core::int*>* set51 = block {
    final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::int* #t263 in let final core::Set<core::int*>* #t264 = col::LinkedHashSet::•<core::int*>() in #t264)
        #t262.{core::Set::add}(#t263);
    #t262.{core::Set::add}(null);
  } =>#t262;
  core::List<core::int*>* list52 = block {
    final core::List<core::int*>* #t265 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::int* #t266 in <core::int*>[])
          #t265.{core::List::add}(#t266);
  } =>#t265;
  core::Set<core::int*>* set52 = block {
    final core::Set<core::int*>* #t267 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::int* #t268 in <core::int*>[])
          #t267.{core::Set::add}(#t268);
    #t267.{core::Set::add}(null);
  } =>#t267;
  core::List<core::List<core::int*>*>* list60 = block {
    final core::List<core::List<core::int*>*>* #t269 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::List<core::int*>* #t270 in <core::List<core::int*>*>[<core::int*>[]])
        #t269.{core::List::add}(#t270);
  } =>#t269;
  core::Set<core::List<core::int*>*>* set60 = block {
    final core::Set<core::List<core::int*>*>* #t271 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::List<core::int*>* #t272 in <core::List<core::int*>*>[<core::int*>[]])
        #t271.{core::Set::add}(#t272);
    #t271.{core::Set::add}(null);
  } =>#t271;
  core::Map<core::String*, core::List<core::int*>*>* map60 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t273 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
        #t273.{core::Map::[]=}(#t274.{core::MapEntry::key}, #t274.{core::MapEntry::value});
    #t273.{core::Map::[]=}("baz", null);
  } =>#t273;
  core::List<core::List<core::int*>*>* list61 = block {
    final core::List<core::List<core::int*>*>* #t275 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t276 in <core::List<core::int*>*>[<core::int*>[]])
          #t275.{core::List::add}(#t276);
  } =>#t275;
  core::Set<core::List<core::int*>*>* set61 = block {
    final core::Set<core::List<core::int*>*>* #t277 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::List<core::int*>* #t278 in <core::List<core::int*>*>[<core::int*>[]])
          #t277.{core::Set::add}(#t278);
    #t277.{core::Set::add}(null);
  } =>#t277;
  core::Map<core::String*, core::List<core::int*>*>* map61 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t279 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries})
          #t279.{core::Map::[]=}(#t280.{core::MapEntry::key}, #t280.{core::MapEntry::value});
    #t279.{core::Map::[]=}("baz", null);
  } =>#t279;
  core::List<core::List<core::int*>*>* list70 = block {
    final core::List<core::List<core::int*>*>* #t281 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t281.{core::List::add}(<core::int*>[]);
  } =>#t281;
  core::Set<core::List<core::int*>*>* set70 = block {
    final core::Set<core::List<core::int*>*>* #t282 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t282.{core::Set::add}(<core::int*>[]);
    #t282.{core::Set::add}(null);
  } =>#t282;
  core::Map<core::String*, core::List<core::int*>*>* map70 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t283 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t283.{core::Map::[]=}("bar", <core::int*>[]);
    #t283.{core::Map::[]=}("baz", null);
  } =>#t283;
  core::List<core::List<core::int*>*>* list71 = block {
    final core::List<core::List<core::int*>*>* #t284 = <core::List<core::int*>*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t284.{core::List::add}(<core::int*>[]);
  } =>#t284;
  core::Set<core::List<core::int*>*>* set71 = block {
    final core::Set<core::List<core::int*>*>* #t285 = col::LinkedHashSet::•<core::List<core::int*>*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t285.{core::Set::add}(<core::int*>[]);
    #t285.{core::Set::add}(null);
  } =>#t285;
  core::Map<core::String*, core::List<core::int*>*>* map71 = block {
    final core::Map<core::String*, core::List<core::int*>*>* #t286 = <core::String*, core::List<core::int*>*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t286.{core::Map::[]=}("bar", <core::int*>[]);
    #t286.{core::Map::[]=}("baz", null);
  } =>#t286;
  core::List<core::num*>* list80 = block {
    final core::List<core::num*>* #t287 = <core::num*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t287.{core::List::add}(42);
      else
        #t287.{core::List::add}(3.14);
  } =>#t287;
  core::Set<core::num*>* set80 = block {
    final core::Set<core::num*>* #t288 = col::LinkedHashSet::•<core::num*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t288.{core::Set::add}(42);
      else
        #t288.{core::Set::add}(3.14);
    #t288.{core::Set::add}(null);
  } =>#t288;
  core::Map<core::String*, core::num*>* map80 = block {
    final core::Map<core::String*, core::num*>* #t289 = <core::String*, core::num*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t289.{core::Map::[]=}("bar", 42);
      else
        #t289.{core::Map::[]=}("bar", 3.14);
    #t289.{core::Map::[]=}("baz", null);
  } =>#t289;
  core::List<core::num*>* list81 = block {
    final core::List<core::num*>* #t290 = <core::num*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::num* #t291 in listInt)
          #t290.{core::List::add}(#t291);
      else
        for (final core::num* #t292 in listDouble)
          #t290.{core::List::add}(#t292);
  } =>#t290;
  core::Set<core::num*>* set81 = block {
    final core::Set<core::num*>* #t293 = col::LinkedHashSet::•<core::num*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::num* #t294 in listInt)
          #t293.{core::Set::add}(#t294);
      else
        for (final core::num* #t295 in listDouble)
          #t293.{core::Set::add}(#t295);
    #t293.{core::Set::add}(null);
  } =>#t293;
  core::Map<core::String*, core::num*>* map81 = block {
    final core::Map<core::String*, core::num*>* #t296 = <core::String*, core::num*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::num*>* #t297 in mapStringInt.{core::Map::entries})
          #t296.{core::Map::[]=}(#t297.{core::MapEntry::key}, #t297.{core::MapEntry::value});
      else
        for (final core::MapEntry<core::String*, core::num*>* #t298 in mapStringDouble.{core::Map::entries})
          #t296.{core::Map::[]=}(#t298.{core::MapEntry::key}, #t298.{core::MapEntry::value});
    #t296.{core::Map::[]=}("baz", null);
  } =>#t296;
  core::List<dynamic>* list82 = block {
    final core::List<dynamic>* #t299 = <dynamic>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final dynamic #t300 in listInt)
          #t299.{core::List::add}(#t300);
      else
        for (final dynamic #t301 in dynVar as{TypeError} core::Iterable<dynamic>*)
          #t299.{core::List::add}(#t301);
  } =>#t299;
  core::Set<dynamic>* set82 = block {
    final core::Set<dynamic>* #t302 = col::LinkedHashSet::•<dynamic>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final dynamic #t303 in listInt)
          #t302.{core::Set::add}(#t303);
      else
        for (final dynamic #t304 in dynVar as{TypeError} core::Iterable<dynamic>*)
          #t302.{core::Set::add}(#t304);
    #t302.{core::Set::add}(null);
  } =>#t302;
  core::Map<dynamic, dynamic>* map82 = block {
    final core::Map<dynamic, dynamic>* #t305 = <dynamic, dynamic>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<dynamic, dynamic>* #t306 in mapStringInt.{core::Map::entries})
          #t305.{core::Map::[]=}(#t306.{core::MapEntry::key}, #t306.{core::MapEntry::value});
      else
        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
          #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
    #t305.{core::Map::[]=}("baz", null);
  } =>#t305;
  core::List<core::num*>* list83 = block {
    final core::List<core::num*>* #t308 = <core::num*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t308.{core::List::add}(42);
      else
        for (final core::num* #t309 in listDouble)
          #t308.{core::List::add}(#t309);
  } =>#t308;
  core::Set<core::num*>* set83 = block {
    final core::Set<core::num*>* #t310 = col::LinkedHashSet::•<core::num*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::num* #t311 in listInt)
          #t310.{core::Set::add}(#t311);
      else
        #t310.{core::Set::add}(3.14);
    #t310.{core::Set::add}(null);
  } =>#t310;
  core::Map<core::String*, core::num*>* map83 = block {
    final core::Map<core::String*, core::num*>* #t312 = <core::String*, core::num*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        for (final core::MapEntry<core::String*, core::num*>* #t313 in mapStringInt.{core::Map::entries})
          #t312.{core::Map::[]=}(#t313.{core::MapEntry::key}, #t313.{core::MapEntry::value});
      else
        #t312.{core::Map::[]=}("bar", 3.14);
    #t312.{core::Map::[]=}("baz", null);
  } =>#t312;
  core::List<core::int*>* list90 = block {
    final core::List<core::int*>* #t314 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t314.{core::List::add}(dynVar as{TypeError} core::int*);
  } =>#t314;
  core::Set<core::int*>* set90 = block {
    final core::Set<core::int*>* #t315 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t315.{core::Set::add}(dynVar as{TypeError} core::int*);
    #t315.{core::Set::add}(null);
  } =>#t315;
  core::Map<core::String*, core::int*>* map90 = block {
    final core::Map<core::String*, core::int*>* #t316 = <core::String*, core::int*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t316.{core::Map::[]=}("bar", dynVar as{TypeError} core::int*);
    #t316.{core::Map::[]=}("baz", null);
  } =>#t316;
  core::List<core::int*>* list91 = block {
    final core::List<core::int*>* #t317 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final dynamic #t318 in dynVar as{TypeError} core::Iterable<dynamic>*) {
        final core::int* #t319 = #t318 as{TypeError} core::int*;
        #t317.{core::List::add}(#t319);
      }
  } =>#t317;
  core::Set<core::int*>* set91 = block {
    final core::Set<core::int*>* #t320 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final dynamic #t321 in dynVar as{TypeError} core::Iterable<dynamic>*) {
        final core::int* #t322 = #t321 as{TypeError} core::int*;
        #t320.{core::Set::add}(#t322);
      }
    #t320.{core::Set::add}(null);
  } =>#t320;
  core::Map<core::String*, core::int*>* map91 = block {
    final core::Map<core::String*, core::int*>* #t323 = <core::String*, core::int*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
        final core::String* #t325 = #t324.{core::MapEntry::key} as{TypeError} core::String*;
        final core::int* #t326 = #t324.{core::MapEntry::value} as{TypeError} core::int*;
        #t323.{core::Map::[]=}(#t325, #t326);
      }
    #t323.{core::Map::[]=}("baz", null);
  } =>#t323;
  core::List<core::int*>* list100 = block {
    final core::List<core::int*>* #t327 = <core::int*>[];
    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
      #t327.{core::List::add}(42);
  } =>#t327;
  core::Set<core::int*>* set100 = block {
    final core::Set<core::int*>* #t329 = col::LinkedHashSet::•<core::int*>();
    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
      #t329.{core::Set::add}(42);
  } =>#t329;
  core::Map<core::String*, core::int*>* map100 = block {
    final core::Map<core::String*, core::int*>* #t331 = <core::String*, core::int*>{};
    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; index = index.{core::num::+}(1))
      #t331.{core::Map::[]=}("bar", 42);
  } =>#t331;
  core::List<core::int*>* list110 = block {
    final core::List<core::int*>* #t333 = <core::int*>[];
    for (core::int* i in <core::int*>[1, 2, 3])
      #t333.{core::List::add}(i);
  } =>#t333;
  core::Set<core::int*>* set110 = block {
    final core::Set<core::int*>* #t334 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i in <core::int*>[1, 2, 3])
      #t334.{core::Set::add}(i);
    #t334.{core::Set::add}(null);
  } =>#t334;
  core::Map<core::String*, core::int*>* map110 = block {
    final core::Map<core::String*, core::int*>* #t335 = <core::String*, core::int*>{};
    for (core::int* i in <core::int*>[1, 2, 3])
      #t335.{core::Map::[]=}("bar", i);
    #t335.{core::Map::[]=}("baz", null);
  } =>#t335;
  core::List<core::int*>* list120 = block {
    final core::List<core::int*>* #t336 = <core::int*>[];
    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
      #t336.{core::List::add}(i as{TypeError} core::int*);
  } =>#t336;
  core::Set<core::int*>* set120 = block {
    final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
      #t337.{core::Set::add}(i as{TypeError} core::int*);
    #t337.{core::Set::add}(null);
  } =>#t337;
  core::Map<core::String*, core::int*>* map120 = block {
    final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
    for (dynamic i in dynVar as{TypeError} core::Iterable<dynamic>*)
      #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
    #t338.{core::Map::[]=}("baz", null);
  } =>#t338;
  core::List<core::int*>* list130 = block {
    final core::List<core::int*>* #t339 = <core::int*>[];
    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
      #t339.{core::List::add}(i);
  } =>#t339;
  core::Set<core::int*>* set130 = block {
    final core::Set<core::int*>* #t340 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
      #t340.{core::Set::add}(i);
  } =>#t340;
  core::Map<core::int*, core::int*>* map130 = block {
    final core::Map<core::int*, core::int*>* #t341 = <core::int*, core::int*>{};
    for (core::int* i = 1; i.{core::num::<}(2); i = i.{core::num::+}(1))
      #t341.{core::Map::[]=}(i, i);
  } =>#t341;
}
static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
  block {
    final core::List<core::int*>* #t342 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*);
  } =>#t342;
  block {
    final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211: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\", null};
                                            ^" in "bar" as{TypeError} core::int*);
    #t344.{core::Set::add}(null);
  } =>#t344;
  block {
    final core::Map<core::int*, core::int*>* #t346 = <core::int*, core::int*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: 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} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: 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} core::int*);
    #t346.{core::Map::[]=}(let final<BottomType> #t349 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: 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} core::int*, null);
  } =>#t346;
  block {
    final core::List<core::int*>* #t350 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::int* #t351 in <core::int*>[let final<BottomType> #t352 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*])
        #t350.{core::List::add}(#t351);
  } =>#t350;
  block {
    final core::Set<core::int*>* #t353 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::int* #t354 in <core::int*>[let final<BottomType> #t355 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214: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\"], null};
                                                ^" in "bar" as{TypeError} core::int*])
        #t353.{core::Set::add}(#t354);
    #t353.{core::Set::add}(null);
  } =>#t353;
  block {
    final core::Map<core::int*, core::int*>* #t356 = <core::int*, core::int*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      for (final core::MapEntry<core::int*, core::int*>* #t357 in <core::int*, core::int*>{let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: 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} core::int*: let final<BottomType> #t359 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: 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} core::int*}.{core::Map::entries})
        #t356.{core::Map::[]=}(#t357.{core::MapEntry::key}, #t357.{core::MapEntry::value});
    #t356.{core::Map::[]=}(let final<BottomType> #t360 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: 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} core::int*, null);
  } =>#t356;
  block {
    final core::List<core::int*>* #t361 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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];
                                               ^");
  } =>#t361;
  block {
    final core::Set<core::int*>* #t362 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217: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, null};
                                               ^");
    #t362.{core::Set::add}(null);
  } =>#t362;
  <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: 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_inference.dart:218:53: 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*>* #t363 = <core::String*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
      else
        #t363.{core::List::add}(let final<BottomType> #t365 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::String*);
  } =>#t363;
  block {
    final core::Set<core::String*>* #t366 = col::LinkedHashSet::•<core::String*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220: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, null};
                                                             ^" in 42 as{TypeError} core::String*);
      else
        #t366.{core::Set::add}(let final<BottomType> #t368 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220: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, null};
                                                                     ^" in 3.14 as{TypeError} core::String*);
    #t366.{core::Set::add}(null);
  } =>#t366;
  block {
    final core::Map<core::String*, core::String*>* #t369 = <core::String*, core::String*>{};
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: 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} core::String*);
      else
        #t369.{core::Map::[]=}("bar", let final<BottomType> #t371 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: 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} core::String*);
    #t369.{core::Map::[]=}("baz", null);
  } =>#t369;
  block {
    final core::List<core::int*>* #t372 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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];
                                                             ^");
      else
        #t372.{core::List::add}(42);
  } =>#t372;
  block {
    final core::Set<core::int*>* #t373 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223: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, null};
                                                             ^");
      else
        #t373.{core::Set::add}(42);
    #t373.{core::Set::add}(null);
  } =>#t373;
  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: 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_inference.dart:224:70: 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*>* #t374 = <core::int*>[];
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t374.{core::List::add}(42);
      else
        #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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];
                                                                     ^");
  } =>#t374;
  block {
    final core::Set<core::int*>* #t375 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
      if(self::oracle<dynamic>() as{TypeError} core::bool*)
        #t375.{core::Set::add}(42);
      else
        #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226: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, null};
                                                                     ^");
    #t375.{core::Set::add}(null);
  } =>#t375;
  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: 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_inference.dart:227:85: 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*>* #t376 = <core::int*>[];
    for (final core::int* #t377 in <core::int*>[1]) {
      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Setter not found: 'i'.
  <int>[for (i in <int>[1]) i];
             ^";
      #t376.{core::List::add}(i);
    }
  } =>#t376;
  block {
    final core::Set<core::int*>* #t378 = col::LinkedHashSet::•<core::int*>();
    for (final core::int* #t379 in <core::int*>[1]) {
      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Setter not found: 'i'.
  <int>{for (i in <int>[1]) i, null};
             ^";
      #t378.{core::Set::add}(i);
    }
    #t378.{core::Set::add}(null);
  } =>#t378;
  block {
    final core::Map<core::String*, core::int*>* #t380 = <core::String*, core::int*>{};
    for (final core::int* #t381 in <core::int*>[1]) {
      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Setter not found: 'i'.
\t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
\t                   ^";
      #t380.{core::Map::[]=}("bar", i);
    }
    #t380.{core::Map::[]=}("baz", null);
  } =>#t380;
  core::List<dynamic>* list10 = block {
    final core::List<dynamic>* #t382 = <dynamic>[];
    for (dynamic i in let final<BottomType> #t383 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::Iterable<dynamic>*)
      #t382.{core::List::add}(i);
  } =>#t382;
  core::Set<dynamic>* set10 = block {
    final core::Set<dynamic>* #t384 = col::LinkedHashSet::•<dynamic>();
    for (dynamic i in let final<BottomType> #t385 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::Iterable<dynamic>*)
      #t384.{core::Set::add}(i);
    #t384.{core::Set::add}(null);
  } =>#t384;
  core::Map<core::String*, dynamic>* map10 = block {
    final core::Map<core::String*, dynamic>* #t386 = <core::String*, dynamic>{};
    for (dynamic i in let final<BottomType> #t387 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::Iterable<dynamic>*)
      #t386.{core::Map::[]=}("bar", i);
    #t386.{core::Map::[]=}("baz", null);
  } =>#t386;
  core::List<core::int*>* list20 = block {
    final core::List<core::int*>* #t388 = <core::int*>[];
    for (core::int* i in <core::int*>[let final<BottomType> #t389 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*, let final<BottomType> #t390 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*])
      #t388.{core::List::add}(i);
  } =>#t388;
  core::Set<core::int*>* set20 = block {
    final core::Set<core::int*>* #t391 = col::LinkedHashSet::•<core::int*>();
    for (core::int* i in <core::int*>[let final<BottomType> #t392 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*, let final<BottomType> #t393 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*])
      #t391.{core::Set::add}(i);
    #t391.{core::Set::add}(null);
  } =>#t391;
  core::Map<core::String*, core::int*>* map20 = block {
    final core::Map<core::String*, core::int*>* #t394 = <core::String*, core::int*>{};
    for (core::int* i in <core::int*>[let final<BottomType> #t395 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*, let final<BottomType> #t396 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*])
      #t394.{core::Map::[]=}("bar", i);
    #t394.{core::Map::[]=}("baz", null);
  } =>#t394;
  core::List<dynamic>* list30 = block {
    final core::List<dynamic>* #t397 = <dynamic>[];
    await for (dynamic i in let final<BottomType> #t398 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} asy::Stream<dynamic>*)
      #t397.{core::List::add}(i);
  } =>#t397;
  core::Set<dynamic>* set30 = block {
    final core::Set<dynamic>* #t399 = col::LinkedHashSet::•<dynamic>();
    await for (dynamic i in let final<BottomType> #t400 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} asy::Stream<dynamic>*)
      #t399.{core::Set::add}(i);
    #t399.{core::Set::add}(null);
  } =>#t399;
  core::Map<core::String*, dynamic>* map30 = block {
    final core::Map<core::String*, dynamic>* #t401 = <core::String*, dynamic>{};
    await for (dynamic i in let final<BottomType> #t402 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} asy::Stream<dynamic>*)
      #t401.{core::Map::[]=}("bar", i);
    #t401.{core::Map::[]=}("baz", null);
  } =>#t401;
  core::List<core::int*>* list40 = block {
    final core::List<core::int*>* #t403 = <core::int*>[];
    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[let final<BottomType> #t404 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*, let final<BottomType> #t405 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*]))
      #t403.{core::List::add}(i);
  } =>#t403;
  core::Set<core::int*>* set40 = block {
    final core::Set<core::int*>* #t406 = col::LinkedHashSet::•<core::int*>();
    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[let final<BottomType> #t407 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*, let final<BottomType> #t408 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*]))
      #t406.{core::Set::add}(i);
    #t406.{core::Set::add}(null);
  } =>#t406;
  core::Map<core::String*, core::int*>* map40 = block {
    final core::Map<core::String*, core::int*>* #t409 = <core::String*, core::int*>{};
    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[let final<BottomType> #t410 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*, let final<BottomType> #t411 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::int*]))
      #t409.{core::Map::[]=}("bar", i);
    #t409.{core::Map::[]=}("baz", null);
  } =>#t409;
  core::List<core::int*>* list50 = block {
    final core::List<core::int*>* #t412 = <core::int*>[];
    for (; ; )
      #t412.{core::List::add}(42);
  } =>#t412;
  core::Set<core::int*>* set50 = block {
    final core::Set<core::int*>* #t413 = col::LinkedHashSet::•<core::int*>();
    for (; ; )
      #t413.{core::Set::add}(42);
    #t413.{core::Set::add}(null);
  } =>#t413;
  core::Map<core::String*, core::int*>* map50 = block {
    final core::Map<core::String*, core::int*>* #t414 = <core::String*, core::int*>{};
    for (; ; )
      #t414.{core::Map::[]=}("bar", 42);
    #t414.{core::Map::[]=}("baz", null);
  } =>#t414;
  core::List<core::int*>* list60 = block {
    final core::List<core::int*>* #t415 = <core::int*>[];
    for (; let final<BottomType> #t416 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::bool*; )
      #t415.{core::List::add}(42);
  } =>#t415;
  core::Set<core::int*>* set60 = block {
    final core::Set<core::int*>* #t417 = col::LinkedHashSet::•<core::int*>();
    for (; let final<BottomType> #t418 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::bool*; )
      #t417.{core::Set::add}(42);
    #t417.{core::Set::add}(null);
  } =>#t417;
  core::Map<core::String*, core::int*>* map60 = block {
    final core::Map<core::String*, core::int*>* #t419 = <core::String*, core::int*>{};
    for (; let final<BottomType> #t420 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.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} core::bool*; )
      #t419.{core::Map::[]=}("bar", 42);
    #t419.{core::Map::[]=}("baz", null);
  } =>#t419;
}
static method testForElementErrorsNotAsync(asy::Stream<core::int*>* stream) → dynamic {
  block {
    final core::List<core::int*>* #t421 = <core::int*>[];
    await for (core::int* i in stream)
      #t421.{core::List::add}(i);
  } =>#t421;
  block {
    final core::Set<core::int*>* #t422 = col::LinkedHashSet::•<core::int*>();
    await for (core::int* i in stream)
      #t422.{core::Set::add}(i);
  } =>#t422;
  block {
    final core::Map<core::String*, core::int*>* #t423 = <core::String*, core::int*>{};
    await for (core::int* i in stream)
      #t423.{core::Map::[]=}("bar", i);
  } =>#t423;
}
static method testPromotion(self::A* a) → dynamic {
  core::List<core::int*>* list10 = block {
    final core::List<core::int*>* #t424 = <core::int*>[];
    if(a is self::B*)
      #t424.{core::List::add}(a{self::B*}.{self::B::foo});
  } =>#t424;
  core::Set<core::int*>* set10 = block {
    final core::Set<core::int*>* #t425 = col::LinkedHashSet::•<core::int*>();
    if(a is self::B*)
      #t425.{core::Set::add}(a{self::B*}.{self::B::foo});
  } =>#t425;
  core::Map<core::int*, core::int*>* map10 = block {
    final core::Map<core::int*, core::int*>* #t426 = <core::int*, core::int*>{};
    if(a is self::B*)
      #t426.{core::Map::[]=}(a{self::B*}.{self::B::foo}, a{self::B*}.{self::B::foo});
  } =>#t426;
}
static method main() → dynamic {}

constants  {
  #C1 = null
}
