library;
//
// Problems in library:
//
// pkg/front_end/testcases/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/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/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/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/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/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/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/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/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int>[if (oracle("foo")) "bar"];
//                            ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int>{if (oracle("foo")) "bar", null};
//                            ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <String, int>{if (oracle("foo")) "bar": "bar", "baz": null};
//                                           ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int>[if (oracle("foo")) ...["bar"]];
//                                ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int>{if (oracle("foo")) ...["bar"], null};
//                                ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <String, int>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
//                                               ^
//
// pkg/front_end/testcases/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/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/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/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String>[if (oracle("foo")) 42 else 3.14];
//                               ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String>[if (oracle("foo")) 42 else 3.14];
//                                       ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String>{if (oracle("foo")) 42 else 3.14, null};
//                               ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String>{if (oracle("foo")) 42 else 3.14, null};
//                                       ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
//                                              ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
//                                                             ^
//
// pkg/front_end/testcases/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/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/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/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/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/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/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/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/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
// Try changing the type of the left hand side, or casting the right hand side to 'bool'.
//   List<int> list20 = [if (42) 42];
//                           ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
// Try changing the type of the left hand side, or casting the right hand side to 'bool'.
//   Set<int> set20 = {if (42) 42};
//                         ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
// Try changing the type of the left hand side, or casting the right hand side to 'bool'.
//   Map<int, int> map30 = {if (42) 42: 42};
//                              ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
//                                                     ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
//                                                               ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
//                                                   ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
//                                                             ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
//                                                             ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
//                                                                           ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
//                                                                 ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
//                                                                               ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:230:14: Error: Setter not found: 'i'.
//   <int>[for (i in <int>[1]) i];
//              ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:231:14: Error: Setter not found: 'i'.
//   <int>{for (i in <int>[1]) i, null};
//              ^
//
// pkg/front_end/testcases/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/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/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/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/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
//                                             ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int>{for (int i = 0; oracle("foo"); i++) "bar", null};
//                                             ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
//                                                  ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
//                                                         ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
//                                                                ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
//                                                 ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
//                                                 ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
//                                                      ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
//                                                             ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
//                                                                     ^
//
// pkg/front_end/testcases/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/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/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/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
//                                                              ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
//                                                                      ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
//                                                              ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
//                                                                      ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
//                                                                             ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
// Try changing the type of the left hand side, or casting the right hand side to 'String'.
//   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
//                                                                                            ^
//
// pkg/front_end/testcases/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/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/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/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/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/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/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/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/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/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var list20 = [for (int i in ["not", "int"]) i];
//                                ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var list20 = [for (int i in ["not", "int"]) i];
//                                       ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var set20 = {for (int i in ["not", "int"]) i, null};
//                               ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var set20 = {for (int i in ["not", "int"]) i, null};
//                                      ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
//                               ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
//                                      ^
//
// pkg/front_end/testcases/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/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/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/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
//                                                          ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
//                                                                 ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
//                                                         ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
//                                                                ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
//                                                         ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
//                                                                ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
// Try changing the type of the left hand side, or casting the right hand side to 'bool'.
//   var list60 = [for (; "not bool";) 42];
//                        ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
// Try changing the type of the left hand side, or casting the right hand side to 'bool'.
//   var set60 = {for (; "not bool";) 42, null};
//                       ^
//
// pkg/front_end/testcases/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
// Try changing the type of the left hand side, or casting the right hand side to 'bool'.
//   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
//                       ^
//
// pkg/front_end/testcases/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/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/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 = null]) → 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/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/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/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/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/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/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/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/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/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/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/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/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/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/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/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/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/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/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/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/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<<BottomType>, core::Null> map12 = <<BottomType>, core::Null>{invalid-expression "pkg/front_end/testcases/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
  var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                  ^": null};
  core::Map<<BottomType>, core::Null> map13 = <<BottomType>, core::Null>{invalid-expression "pkg/front_end/testcases/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/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/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/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/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/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/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to '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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/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/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/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/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
Try changing the type of the left hand side, or casting the right hand side to '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/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
Try changing the type of the left hand side, or casting the right hand side to '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 {}
