[cfe] Initial support for compiling if in collections

Support compiling if elements and map entries by constructing
IfElement or IfMapEntry when they are seen.  There is no support for
lowering them to block expressions yet.

Change-Id: I74c2492fefc9703e9e2f639baad7f737bbe63721
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96786
Commit-Queue: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index c72f97c..7655108 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -3655,13 +3655,10 @@
   @override
   void endIfControlFlow(Token token) {
     debugEvent("endIfControlFlow");
-    // TODO(danrubel) implement control flow support
-
     var entry = pop();
-    pop(); // parenthesized expression
+    var condition = pop(); // parenthesized expression
     Token ifToken = pop();
-    if (entry != invalidCollectionElement) {
-      // TODO(danrubel): Replace this with control flow structure
+    if (!library.loader.target.enableControlFlowCollections) {
       // TODO(danrubel): Report a more user friendly error message
       // when an experiment is not enabled
       handleRecoverableError(
@@ -3669,24 +3666,28 @@
           ifToken,
           ifToken);
       push(invalidCollectionElement);
-    } else {
-      // TODO(danrubel): Remove this when unified collections enabled
+      return;
+    }
+    if (entry == invalidCollectionElement) {
       push(invalidCollectionElement);
+      return;
+    }
+    transformCollections = true;
+    if (entry is MapEntry) {
+      push(forest.ifMapEntry(toValue(condition), entry, null, ifToken));
+    } else {
+      push(forest.ifElement(toValue(condition), toValue(entry), null, ifToken));
     }
   }
 
   @override
   void endIfElseControlFlow(Token token) {
     debugEvent("endIfElseControlFlow");
-    // TODO(danrubel) implement control flow support
-
     var elseEntry = pop(); // else entry
     var thenEntry = pop(); // then entry
-    pop(); // parenthesized expression
+    var condition = pop(); // parenthesized expression
     Token ifToken = pop();
-    if (thenEntry != invalidCollectionElement &&
-        elseEntry != invalidCollectionElement) {
-      // TODO(danrubel): Replace this with control flow support
+    if (!library.loader.target.enableControlFlowCollections) {
       // TODO(danrubel): Report a more user friendly error message
       // when an experiment is not enabled
       handleRecoverableError(
@@ -3694,23 +3695,57 @@
           ifToken,
           ifToken);
       push(invalidCollectionElement);
-    } else {
-      // TODO(danrubel): Remove when unified collections enabled
+      return;
+    }
+    if (thenEntry == invalidCollectionElement ||
+        elseEntry == invalidCollectionElement) {
       push(invalidCollectionElement);
+      return;
+    }
+    transformCollections = true;
+    if (thenEntry is MapEntry) {
+      if (elseEntry is MapEntry) {
+        push(forest.ifMapEntry(
+            toValue(condition), thenEntry, elseEntry, ifToken));
+      } else if (elseEntry is SpreadElement) {
+        push(forest.ifMapEntry(
+            toValue(condition),
+            thenEntry,
+            new SpreadMapEntry(elseEntry.expression, elseEntry.isNullAware),
+            ifToken));
+      } else {
+        push(invalidCollectionElement);
+      }
+    } else if (elseEntry is MapEntry) {
+      if (thenEntry is SpreadElement) {
+        push(forest.ifMapEntry(
+            toValue(condition),
+            new SpreadMapEntry(thenEntry.expression, thenEntry.isNullAware),
+            elseEntry,
+            ifToken));
+      } else {
+        push(invalidCollectionElement);
+      }
+    } else {
+      push(forest.ifElement(
+          toValue(condition), toValue(thenEntry), toValue(elseEntry), ifToken));
     }
   }
 
   @override
   void handleSpreadExpression(Token spreadToken) {
     debugEvent("SpreadExpression");
+    var expression = pop();
     if (!library.loader.target.enableSpreadCollections) {
-      return handleRecoverableError(
+      handleRecoverableError(
           fasta.templateUnexpectedToken.withArguments(spreadToken),
           spreadToken,
           spreadToken);
+      push(invalidCollectionElement);
+      return;
     }
     transformCollections = true;
-    push(forest.spreadElement(popForValue(), spreadToken));
+    push(forest.spreadElement(toValue(expression), spreadToken));
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index eee9401..005376d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -53,7 +53,7 @@
 
 import 'body_builder.dart' show LabelTarget;
 
-import 'collections.dart' show SpreadElement;
+import 'collections.dart' show IfElement, IfMapEntry, SpreadElement;
 
 import 'kernel_expression_generator.dart'
     show
@@ -283,6 +283,20 @@
   }
 
   @override
+  Expression ifElement(Expression condition, Expression then,
+      Expression otherwise, Token token) {
+    return new IfElement(condition, then, otherwise)
+      ..fileOffset = offsetForToken(token);
+  }
+
+  @override
+  MapEntry ifMapEntry(
+      Expression condition, MapEntry then, MapEntry otherwise, Token token) {
+    return new IfMapEntry(condition, then, otherwise)
+      ..fileOffset = offsetForToken(token);
+  }
+
+  @override
   AssertInitializer assertInitializer(
       Token assertKeyword,
       Token leftParenthesis,
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index e024458..8cf916f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -190,6 +190,12 @@
 
   Expression spreadElement(Expression expression, Token token);
 
+  Expression ifElement(
+      Expression condition, Expression then, Expression otherwise, Token token);
+
+  MapEntry ifMapEntry(
+      Expression condition, MapEntry then, MapEntry otherwise, Token token);
+
   /// Return a representation of an assert that appears in a constructor's
   /// initializer list.
   Object assertInitializer(Token assertKeyword, Token leftParenthesis,
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 0fc7dd4..a678e10 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -11,6 +11,10 @@
 
   @override
   void defaultExpression(Expression node, DartType typeContext) {
+    if (node is IfElement) {
+      visitIfElement(node, typeContext);
+      return;
+    }
     unhandled("${node.runtimeType}", "InferenceVisitor", node.fileOffset,
         inferrer.helper.uri);
   }
@@ -21,6 +25,11 @@
         inferrer.helper.uri);
   }
 
+  visitIfElement(IfElement node, DartType typeContext) {
+    node.parent.replaceChild(node,
+        new InvalidExpression('unhandled if element in collection literal'));
+  }
+
   @override
   void visitInvalidExpression(InvalidExpression node, DartType typeContext) {}
 
@@ -885,7 +894,7 @@
         typeChecksNeeded ? new List<DartType>(node.entries.length) : null;
     for (int i = 0; i < node.entries.length; i++) {
       MapEntry entry = node.entries[i];
-      if (entry is! SpreadMapEntry) {
+      if (entry is! SpreadMapEntry && entry is! IfMapEntry) {
         cachedKeys[i] = node.entries[i].key;
         cachedValues[i] = node.entries[i].value;
       }
@@ -936,6 +945,13 @@
           actualTypes.add(const DynamicType());
           storeSpreadMapEntryElementTypes(
               spreadMapEntryType, entry.isNullAware, actualTypes, length);
+        } else if (entry is IfMapEntry) {
+          node.entries[i] = new MapEntry(
+              new InvalidExpression('unimplemented spread entry')
+                ..fileOffset = node.fileOffset,
+              new NullLiteral());
+          actualTypes.add(const DynamicType());
+          actualTypes.add(const DynamicType());
         } else {
           Expression key = entry.key;
           inferrer.inferExpression(key, inferredKeyType, true,
@@ -1093,14 +1109,16 @@
           }
         } else {
           Expression keyJudgment = cachedKeys[i];
-          inferrer.ensureAssignable(node.keyType, actualTypes[2 * i],
-              keyJudgment, keyJudgment.fileOffset,
-              isVoidAllowed: node.keyType is VoidType);
+          if (keyJudgment != null) {
+            inferrer.ensureAssignable(node.keyType, actualTypes[2 * i],
+                keyJudgment, keyJudgment.fileOffset,
+                isVoidAllowed: node.keyType is VoidType);
 
-          Expression valueJudgment = cachedValues[i];
-          inferrer.ensureAssignable(node.valueType, actualTypes[2 * i + 1],
-              valueJudgment, valueJudgment.fileOffset,
-              isVoidAllowed: node.valueType is VoidType);
+            Expression valueJudgment = cachedValues[i];
+            inferrer.ensureAssignable(node.valueType, actualTypes[2 * i + 1],
+                valueJudgment, valueJudgment.fileOffset,
+                isVoidAllowed: node.valueType is VoidType);
+          }
         }
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/inferred_type_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inferred_type_visitor.dart
index 05513ad..91ae51b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inferred_type_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inferred_type_visitor.dart
@@ -28,11 +28,18 @@
 
   @override
   DartType defaultExpression(Expression node, TypeInferrerImpl inferrer) {
+    if (node is IfElement) {
+      return visitIfElement(node, inferrer);
+    }
     unhandled("${node.runtimeType}", "getInferredType", node.fileOffset,
         inferrer.uri);
     return const InvalidType();
   }
 
+  DartType visitIfElement(IfElement node, TypeInferrerImpl inferrer) {
+    return const BottomType();
+  }
+
   @override
   DartType visitIntLiteral(IntLiteral node, TypeInferrerImpl inferrer) {
     return inferrer.coreTypes.intClass.rawType;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 79e908d..56c6840 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -82,7 +82,8 @@
 
 import 'body_builder.dart' show combineStatements;
 
-import 'collections.dart' show SpreadElement, SpreadMapEntry;
+import 'collections.dart'
+    show IfElement, SpreadElement, IfMapEntry, SpreadMapEntry;
 
 import 'implicit_type_argument.dart' show ImplicitTypeArgument;
 
diff --git a/pkg/front_end/testcases/spread_collection.dart.legacy.expect b/pkg/front_end/testcases/spread_collection.dart.legacy.expect
index 4872fd1..ce54701 100644
--- a/pkg/front_end/testcases/spread_collection.dart.legacy.expect
+++ b/pkg/front_end/testcases/spread_collection.dart.legacy.expect
@@ -18,14 +18,6 @@
 //   final aMap = <int, int>{1: 1, ...{2: 2}, ...?{3: 3}};
 //                                            ^^^^
 //
-// pkg/front_end/testcases/spread_collection.dart:7:36: Error: Expected ':' after this.
-//   final aMap = <int, int>{1: 1, ...{2: 2}, ...?{3: 3}};
-//                                    ^
-//
-// pkg/front_end/testcases/spread_collection.dart:7:48: Error: Expected ':' after this.
-//   final aMap = <int, int>{1: 1, ...{2: 2}, ...?{3: 3}};
-//                                                ^
-//
 // pkg/front_end/testcases/spread_collection.dart:8:25: Error: Unexpected token '...'.
 //   final aSet = <int>{1, ...[2], ...?[3]};
 //                         ^^^
@@ -38,17 +30,13 @@
 //   final aSetOrMap = {...foo()};
 //                      ^^^
 //
-// pkg/front_end/testcases/spread_collection.dart:9:25: Error: Expected ':' after this.
-//   final aSetOrMap = {...foo()};
-//                         ^
-//
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  final dynamic aList = <core::int>[1, <dynamic>[2], <dynamic>[3]];
+  final dynamic aList = <core::int>[1];
   final dynamic aMap = <core::int, core::int>{1: 1};
-  final dynamic aSet = <core::int>{1, <dynamic>[2], <dynamic>[3]};
+  final dynamic aSet = <core::int>{1};
   final dynamic aSetOrMap = <dynamic, dynamic>{};
   core::print(aList);
   core::print(aSet);
diff --git a/pkg/front_end/testcases/spread_collection.dart.legacy.transformed.expect b/pkg/front_end/testcases/spread_collection.dart.legacy.transformed.expect
index 4872fd1..ce54701 100644
--- a/pkg/front_end/testcases/spread_collection.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/spread_collection.dart.legacy.transformed.expect
@@ -18,14 +18,6 @@
 //   final aMap = <int, int>{1: 1, ...{2: 2}, ...?{3: 3}};
 //                                            ^^^^
 //
-// pkg/front_end/testcases/spread_collection.dart:7:36: Error: Expected ':' after this.
-//   final aMap = <int, int>{1: 1, ...{2: 2}, ...?{3: 3}};
-//                                    ^
-//
-// pkg/front_end/testcases/spread_collection.dart:7:48: Error: Expected ':' after this.
-//   final aMap = <int, int>{1: 1, ...{2: 2}, ...?{3: 3}};
-//                                                ^
-//
 // pkg/front_end/testcases/spread_collection.dart:8:25: Error: Unexpected token '...'.
 //   final aSet = <int>{1, ...[2], ...?[3]};
 //                         ^^^
@@ -38,17 +30,13 @@
 //   final aSetOrMap = {...foo()};
 //                      ^^^
 //
-// pkg/front_end/testcases/spread_collection.dart:9:25: Error: Expected ':' after this.
-//   final aSetOrMap = {...foo()};
-//                         ^
-//
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  final dynamic aList = <core::int>[1, <dynamic>[2], <dynamic>[3]];
+  final dynamic aList = <core::int>[1];
   final dynamic aMap = <core::int, core::int>{1: 1};
-  final dynamic aSet = <core::int>{1, <dynamic>[2], <dynamic>[3]};
+  final dynamic aSet = <core::int>{1};
   final dynamic aSetOrMap = <dynamic, dynamic>{};
   core::print(aList);
   core::print(aSet);
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
index f28dc7f..b419aeb 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.expect
@@ -14,18 +14,10 @@
 //   var /*@type=Map<dynamic, dynamic>*/ map10 = <dynamic, dynamic>{...
 //                                                                  ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:22:36: Error: Expected ':' after this.
-//     /*@typeArgs=dynamic, dynamic*/ {}};
-//                                    ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:25:37: Error: Unexpected token '...'.
 //     /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
 //                                     ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:25:73: Error: Expected ':' after this.
-//     /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
-//                                                                         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:27:54: Error: Unexpected token '...'.
 //   var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
 //                                                      ^^^
@@ -38,26 +30,14 @@
 //   var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
 //                                                              ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:31:65: Error: Expected ':' after this.
-//   var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
-//                                                                 ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:34:6: Error: Unexpected token '...'.
 //     {...mapSpread, "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:34:9: Error: Expected ':' after this.
-//     {...mapSpread, "baz": 42};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:37:6: Error: Unexpected token '...'.
 //     {...mapSpread};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:37:9: Error: Expected ':' after this.
-//     {...mapSpread};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:39:62: Error: Unexpected token '...'.
 //   var /*@type=List<dynamic>*/ lhs21 = /*@typeArgs=dynamic*/ [...(spread as
 //                                                              ^^^
@@ -70,18 +50,10 @@
 //     {...(mapSpread as dynamic), "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:46:20: Error: Expected ':' after this.
-//     {...(mapSpread as dynamic), "baz": 42};
-//                    ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:48:77: Error: Unexpected token '...'.
 //   dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
 //                                                                             ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:49:16: Error: Expected ':' after this.
-//     (mapSpread as dynamic)};
-//                ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:51:40: Error: Unexpected token '...'.
 //   List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
 //                                        ^^^
@@ -94,18 +66,10 @@
 //   Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
 //                                                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:55:70: Error: Expected ':' after this.
-//   Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
-//                                                                      ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:58:6: Error: Unexpected token '...'.
 //     {... /*@typeArgs=String, int*/ {}};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:58:36: Error: Expected ':' after this.
-//     {... /*@typeArgs=String, int*/ {}};
-//                                    ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:60:52: Error: Unexpected token '...'.
 //   List<List<int>> lhs23 = /*@typeArgs=List<int>*/ [... /*@typeArgs=List<int>*/
 //                                                    ^^^
@@ -118,18 +82,10 @@
 //     {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:67:34: Error: Expected ':' after this.
-//     {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
-//                                  ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:70:6: Error: Unexpected token '...'.
 //     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:70:42: Error: Expected ':' after this.
-//     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
-//                                          ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:72:77: Error: Unexpected token '...'.
 //   dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
 //                                                                             ^^^
@@ -138,14 +94,6 @@
 //     spread, ...mapSpread};
 //             ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Expected ':' after this.
-//     spread, ...mapSpread};
-//     ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Error: Expected ':' after this.
-//     spread, ...mapSpread};
-//                ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:75:63: Error: Unexpected token '...'.
 //   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
 //                                                               ^^^
@@ -158,26 +106,14 @@
 //     {...spread};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:80:9: Error: Expected ':' after this.
-//     {...spread};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:83:6: Error: Unexpected token '...'.
 //     {...mapSpread, "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:83:9: Error: Expected ':' after this.
-//     {...mapSpread, "baz": 42};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:86:6: Error: Unexpected token '...'.
 //     {...mapSpread};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:86:9: Error: Expected ':' after this.
-//     {...mapSpread};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:88:35: Error: Unexpected token '...'.
 //   List<dynamic> lhs40 = <dynamic>[... /*@error=SpreadTypeMismatch*/
 //                                   ^^^
@@ -190,10 +126,6 @@
 //   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Expected ':' after this.
-//     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
-//                                           ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:97:36: Error: Unexpected token '...'.
 //   List<dynamic> lhs50 = <dynamic> [... /*@error=SpreadTypeMismatch*/
 //                                    ^^^
@@ -206,10 +138,6 @@
 //   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Expected ':' after this.
-//     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
-//                                           ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:106:33: Error: Unexpected token '...'.
 //   List<String> lhs60 = <String>[... /*@error=SpreadElementTypeMismatch*/
 //                                 ^^^
@@ -222,18 +150,10 @@
 //   Map<int, int> map60 = <int, int>{...
 //                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Expected ':' after this.
-//     /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
-//                                                     ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:114:48: Error: Unexpected token '...'.
 //   Map<String, String> map61 = <String, String>{...
 //                                                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Expected ':' after this.
-//     /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
-//                                                       ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:117:27: Error: Unexpected token '...'.
 //   List<int> lhs70 = <int>[... /*@error=NonNullAwareSpreadIsNull*/ null];
 //                           ^^^
@@ -250,22 +170,10 @@
 //     {... /*@error=NonNullAwareSpreadIsNull*/ null, ... /*@typeArgs=dynamic*/
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:122:46: Error: Expected ':' after this.
-//     {... /*@error=NonNullAwareSpreadIsNull*/ null, ... /*@typeArgs=dynamic*/
-//                                              ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:123:7: Error: Expected ':' after this.
-//       []};
-//       ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:125:42: Error: Unexpected token '...'.
 //   Map<String, int> map70 = <String, int>{... /*@error=NonNullAwareSpreadIsNull*/
 //                                          ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:126:5: Error: Expected ':' after this.
-//     null};
-//     ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:128:27: Error: Unexpected token '...?'.
 //   List<int> lhs80 = <int>[...?null];
 //                           ^^^^
@@ -282,22 +190,10 @@
 //     {...?null, ... /*@typeArgs=dynamic*/ []};
 //                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:133:10: Error: Expected ':' after this.
-//     {...?null, ... /*@typeArgs=dynamic*/ []};
-//          ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:133:42: Error: Expected ':' after this.
-//     {...?null, ... /*@typeArgs=dynamic*/ []};
-//                                          ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:135:42: Error: Unexpected token '...?'.
 //   Map<String, int> map80 = <String, int>{...?null};
 //                                          ^^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:135:46: Error: Expected ':' after this.
-//   Map<String, int> map80 = <String, int>{...?null};
-//                                              ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -306,49 +202,49 @@
   core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
   core::int notSpreadInt = 42;
   () → core::int notSpreadFunction = null;
-  dynamic lhs10 = <dynamic>[<dynamic>[]];
-  dynamic set10 = <dynamic>{<dynamic>[]};
+  dynamic lhs10 = <dynamic>[];
+  dynamic set10 = <dynamic>{};
   dynamic map10 = <dynamic, dynamic>{};
   dynamic map10ambiguous = <dynamic, dynamic>{};
-  dynamic lhs20 = <dynamic>[spread];
-  dynamic set20 = <dynamic>{spread, 42};
+  dynamic lhs20 = <dynamic>[];
+  dynamic set20 = <dynamic>{42};
   dynamic set20ambiguous = <dynamic, dynamic>{};
   dynamic map20 = <dynamic, dynamic>{"baz": 42};
   dynamic map20ambiguous = <dynamic, dynamic>{};
-  dynamic lhs21 = <dynamic>[spread as dynamic];
-  dynamic set21 = <dynamic>{spread as dynamic, 42};
+  dynamic lhs21 = <dynamic>[];
+  dynamic set21 = <dynamic>{42};
   dynamic map21 = <dynamic, dynamic>{"baz": 42};
   dynamic map21ambiguous = <dynamic, dynamic>{};
-  core::List<core::int> lhs22 = <dynamic>[<dynamic>[]];
-  core::Set<core::int> set22 = <dynamic>{<dynamic>[], 42};
+  core::List<core::int> lhs22 = <dynamic>[];
+  core::Set<core::int> set22 = <dynamic>{42};
   core::Set<core::int> set22ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::int> map22 = <dynamic, dynamic>{};
-  core::List<core::List<core::int>> lhs23 = <dynamic>[<dynamic>[<dynamic>[]]];
-  core::Set<core::List<core::int>> set23 = <dynamic>{<dynamic>[<dynamic>[]], <core::int>[42]};
+  core::List<core::List<core::int>> lhs23 = <dynamic>[];
+  core::Set<core::List<core::int>> set23 = <dynamic>{<core::int>[42]};
   core::Set<core::List<core::int>> set23ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::List<core::int>> map23 = <dynamic, dynamic>{};
   dynamic map24ambiguous = <dynamic, dynamic>{};
-  core::int lhs30 = <dynamic>[spread];
-  core::int set30 = <dynamic>{spread, 42};
+  core::int lhs30 = <dynamic>[];
+  core::int set30 = <dynamic>{42};
   core::int set30ambiguous = <dynamic, dynamic>{};
   core::int map30 = <dynamic, dynamic>{"baz": 42};
   core::int map30ambiguous = <dynamic, dynamic>{};
-  core::List<dynamic> lhs40 = <dynamic>[notSpreadInt];
-  core::Set<dynamic> set40 = <dynamic>{notSpreadInt};
+  core::List<dynamic> lhs40 = <dynamic>[];
+  core::Set<dynamic> set40 = <dynamic>{};
   core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{};
-  core::List<dynamic> lhs50 = <dynamic>[notSpreadFunction];
-  core::Set<dynamic> set50 = <dynamic>{notSpreadFunction};
+  core::List<dynamic> lhs50 = <dynamic>[];
+  core::Set<dynamic> set50 = <dynamic>{};
   core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{};
-  core::List<core::String> lhs60 = <core::String>[spread];
-  core::Set<core::String> set60 = <core::String>{spread};
+  core::List<core::String> lhs60 = <core::String>[];
+  core::Set<core::String> set60 = <core::String>{};
   core::Map<core::int, core::int> map60 = <core::int, core::int>{};
   core::Map<core::String, core::String> map61 = <core::String, core::String>{};
-  core::List<core::int> lhs70 = <core::int>[null];
-  core::Set<core::int> set70 = <core::int>{null};
+  core::List<core::int> lhs70 = <core::int>[];
+  core::Set<core::int> set70 = <core::int>{};
   dynamic set71ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::int> map70 = <core::String, core::int>{};
-  core::List<core::int> lhs80 = <core::int>[null];
-  core::Set<core::int> set80 = <core::int>{null};
+  core::List<core::int> lhs80 = <core::int>[];
+  core::Set<core::int> set80 = <core::int>{};
   dynamic set81ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::int> map80 = <core::String, core::int>{};
 }
diff --git a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
index f28dc7f..b419aeb 100644
--- a/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/spread_collection_inference.dart.legacy.transformed.expect
@@ -14,18 +14,10 @@
 //   var /*@type=Map<dynamic, dynamic>*/ map10 = <dynamic, dynamic>{...
 //                                                                  ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:22:36: Error: Expected ':' after this.
-//     /*@typeArgs=dynamic, dynamic*/ {}};
-//                                    ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:25:37: Error: Unexpected token '...'.
 //     /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
 //                                     ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:25:73: Error: Expected ':' after this.
-//     /*@typeArgs=dynamic, dynamic*/ {...  /*@typeArgs=dynamic, dynamic*/ {}};
-//                                                                         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:27:54: Error: Unexpected token '...'.
 //   var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
 //                                                      ^^^
@@ -38,26 +30,14 @@
 //   var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
 //                                                              ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:31:65: Error: Expected ':' after this.
-//   var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
-//                                                                 ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:34:6: Error: Unexpected token '...'.
 //     {...mapSpread, "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:34:9: Error: Expected ':' after this.
-//     {...mapSpread, "baz": 42};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:37:6: Error: Unexpected token '...'.
 //     {...mapSpread};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:37:9: Error: Expected ':' after this.
-//     {...mapSpread};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:39:62: Error: Unexpected token '...'.
 //   var /*@type=List<dynamic>*/ lhs21 = /*@typeArgs=dynamic*/ [...(spread as
 //                                                              ^^^
@@ -70,18 +50,10 @@
 //     {...(mapSpread as dynamic), "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:46:20: Error: Expected ':' after this.
-//     {...(mapSpread as dynamic), "baz": 42};
-//                    ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:48:77: Error: Unexpected token '...'.
 //   dynamic map21ambiguous = /*@error=CantDisambiguateNotEnoughInformation*/ {...
 //                                                                             ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:49:16: Error: Expected ':' after this.
-//     (mapSpread as dynamic)};
-//                ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:51:40: Error: Unexpected token '...'.
 //   List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
 //                                        ^^^
@@ -94,18 +66,10 @@
 //   Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
 //                                                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:55:70: Error: Expected ':' after this.
-//   Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
-//                                                                      ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:58:6: Error: Unexpected token '...'.
 //     {... /*@typeArgs=String, int*/ {}};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:58:36: Error: Expected ':' after this.
-//     {... /*@typeArgs=String, int*/ {}};
-//                                    ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:60:52: Error: Unexpected token '...'.
 //   List<List<int>> lhs23 = /*@typeArgs=List<int>*/ [... /*@typeArgs=List<int>*/
 //                                                    ^^^
@@ -118,18 +82,10 @@
 //     {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:67:34: Error: Expected ':' after this.
-//     {... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]};
-//                                  ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:70:6: Error: Unexpected token '...'.
 //     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:70:42: Error: Expected ':' after this.
-//     {... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ []}};
-//                                          ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:72:77: Error: Unexpected token '...'.
 //   dynamic map24ambiguous = /*@error=CantDisambiguateAmbiguousInformation*/ {...
 //                                                                             ^^^
@@ -138,14 +94,6 @@
 //     spread, ...mapSpread};
 //             ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:73:5: Error: Expected ':' after this.
-//     spread, ...mapSpread};
-//     ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:73:16: Error: Expected ':' after this.
-//     spread, ...mapSpread};
-//                ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:75:63: Error: Unexpected token '...'.
 //   int lhs30 = /*@error=InvalidAssignment*/ /*@typeArgs=int*/ [...spread];
 //                                                               ^^^
@@ -158,26 +106,14 @@
 //     {...spread};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:80:9: Error: Expected ':' after this.
-//     {...spread};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:83:6: Error: Unexpected token '...'.
 //     {...mapSpread, "baz": 42};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:83:9: Error: Expected ':' after this.
-//     {...mapSpread, "baz": 42};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:86:6: Error: Unexpected token '...'.
 //     {...mapSpread};
 //      ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:86:9: Error: Expected ':' after this.
-//     {...mapSpread};
-//         ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:88:35: Error: Unexpected token '...'.
 //   List<dynamic> lhs40 = <dynamic>[... /*@error=SpreadTypeMismatch*/
 //                                   ^^^
@@ -190,10 +126,6 @@
 //   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:95:43: Error: Expected ':' after this.
-//     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadInt};
-//                                           ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:97:36: Error: Unexpected token '...'.
 //   List<dynamic> lhs50 = <dynamic> [... /*@error=SpreadTypeMismatch*/
 //                                    ^^^
@@ -206,10 +138,6 @@
 //   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:104:43: Error: Expected ':' after this.
-//     /*@error=SpreadMapEntryTypeMismatch*/ notSpreadFunction};
-//                                           ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:106:33: Error: Unexpected token '...'.
 //   List<String> lhs60 = <String>[... /*@error=SpreadElementTypeMismatch*/
 //                                 ^^^
@@ -222,18 +150,10 @@
 //   Map<int, int> map60 = <int, int>{...
 //                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:112:53: Error: Expected ':' after this.
-//     /*@error=SpreadMapEntryElementKeyTypeMismatch*/ mapSpread};
-//                                                     ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:114:48: Error: Unexpected token '...'.
 //   Map<String, String> map61 = <String, String>{...
 //                                                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:115:55: Error: Expected ':' after this.
-//     /*@error=SpreadMapEntryElementValueTypeMismatch*/ mapSpread};
-//                                                       ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:117:27: Error: Unexpected token '...'.
 //   List<int> lhs70 = <int>[... /*@error=NonNullAwareSpreadIsNull*/ null];
 //                           ^^^
@@ -250,22 +170,10 @@
 //     {... /*@error=NonNullAwareSpreadIsNull*/ null, ... /*@typeArgs=dynamic*/
 //                                                    ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:122:46: Error: Expected ':' after this.
-//     {... /*@error=NonNullAwareSpreadIsNull*/ null, ... /*@typeArgs=dynamic*/
-//                                              ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:123:7: Error: Expected ':' after this.
-//       []};
-//       ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:125:42: Error: Unexpected token '...'.
 //   Map<String, int> map70 = <String, int>{... /*@error=NonNullAwareSpreadIsNull*/
 //                                          ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:126:5: Error: Expected ':' after this.
-//     null};
-//     ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:128:27: Error: Unexpected token '...?'.
 //   List<int> lhs80 = <int>[...?null];
 //                           ^^^^
@@ -282,22 +190,10 @@
 //     {...?null, ... /*@typeArgs=dynamic*/ []};
 //                ^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:133:10: Error: Expected ':' after this.
-//     {...?null, ... /*@typeArgs=dynamic*/ []};
-//          ^
-//
-// pkg/front_end/testcases/spread_collection_inference.dart:133:42: Error: Expected ':' after this.
-//     {...?null, ... /*@typeArgs=dynamic*/ []};
-//                                          ^
-//
 // pkg/front_end/testcases/spread_collection_inference.dart:135:42: Error: Unexpected token '...?'.
 //   Map<String, int> map80 = <String, int>{...?null};
 //                                          ^^^^
 //
-// pkg/front_end/testcases/spread_collection_inference.dart:135:46: Error: Expected ':' after this.
-//   Map<String, int> map80 = <String, int>{...?null};
-//                                              ^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -306,49 +202,49 @@
   core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
   core::int notSpreadInt = 42;
   () → core::int notSpreadFunction = null;
-  dynamic lhs10 = <dynamic>[<dynamic>[]];
-  dynamic set10 = <dynamic>{<dynamic>[]};
+  dynamic lhs10 = <dynamic>[];
+  dynamic set10 = <dynamic>{};
   dynamic map10 = <dynamic, dynamic>{};
   dynamic map10ambiguous = <dynamic, dynamic>{};
-  dynamic lhs20 = <dynamic>[spread];
-  dynamic set20 = <dynamic>{spread, 42};
+  dynamic lhs20 = <dynamic>[];
+  dynamic set20 = <dynamic>{42};
   dynamic set20ambiguous = <dynamic, dynamic>{};
   dynamic map20 = <dynamic, dynamic>{"baz": 42};
   dynamic map20ambiguous = <dynamic, dynamic>{};
-  dynamic lhs21 = <dynamic>[spread as dynamic];
-  dynamic set21 = <dynamic>{spread as dynamic, 42};
+  dynamic lhs21 = <dynamic>[];
+  dynamic set21 = <dynamic>{42};
   dynamic map21 = <dynamic, dynamic>{"baz": 42};
   dynamic map21ambiguous = <dynamic, dynamic>{};
-  core::List<core::int> lhs22 = <dynamic>[<dynamic>[]];
-  core::Set<core::int> set22 = <dynamic>{<dynamic>[], 42};
+  core::List<core::int> lhs22 = <dynamic>[];
+  core::Set<core::int> set22 = <dynamic>{42};
   core::Set<core::int> set22ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::int> map22 = <dynamic, dynamic>{};
-  core::List<core::List<core::int>> lhs23 = <dynamic>[<dynamic>[<dynamic>[]]];
-  core::Set<core::List<core::int>> set23 = <dynamic>{<dynamic>[<dynamic>[]], <core::int>[42]};
+  core::List<core::List<core::int>> lhs23 = <dynamic>[];
+  core::Set<core::List<core::int>> set23 = <dynamic>{<core::int>[42]};
   core::Set<core::List<core::int>> set23ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::List<core::int>> map23 = <dynamic, dynamic>{};
   dynamic map24ambiguous = <dynamic, dynamic>{};
-  core::int lhs30 = <dynamic>[spread];
-  core::int set30 = <dynamic>{spread, 42};
+  core::int lhs30 = <dynamic>[];
+  core::int set30 = <dynamic>{42};
   core::int set30ambiguous = <dynamic, dynamic>{};
   core::int map30 = <dynamic, dynamic>{"baz": 42};
   core::int map30ambiguous = <dynamic, dynamic>{};
-  core::List<dynamic> lhs40 = <dynamic>[notSpreadInt];
-  core::Set<dynamic> set40 = <dynamic>{notSpreadInt};
+  core::List<dynamic> lhs40 = <dynamic>[];
+  core::Set<dynamic> set40 = <dynamic>{};
   core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{};
-  core::List<dynamic> lhs50 = <dynamic>[notSpreadFunction];
-  core::Set<dynamic> set50 = <dynamic>{notSpreadFunction};
+  core::List<dynamic> lhs50 = <dynamic>[];
+  core::Set<dynamic> set50 = <dynamic>{};
   core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{};
-  core::List<core::String> lhs60 = <core::String>[spread];
-  core::Set<core::String> set60 = <core::String>{spread};
+  core::List<core::String> lhs60 = <core::String>[];
+  core::Set<core::String> set60 = <core::String>{};
   core::Map<core::int, core::int> map60 = <core::int, core::int>{};
   core::Map<core::String, core::String> map61 = <core::String, core::String>{};
-  core::List<core::int> lhs70 = <core::int>[null];
-  core::Set<core::int> set70 = <core::int>{null};
+  core::List<core::int> lhs70 = <core::int>[];
+  core::Set<core::int> set70 = <core::int>{};
   dynamic set71ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::int> map70 = <core::String, core::int>{};
-  core::List<core::int> lhs80 = <core::int>[null];
-  core::Set<core::int> set80 = <core::int>{null};
+  core::List<core::int> lhs80 = <core::int>[];
+  core::Set<core::int> set80 = <core::int>{};
   dynamic set81ambiguous = <dynamic, dynamic>{};
   core::Map<core::String, core::int> map80 = <core::String, core::int>{};
 }
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index eeac955..fc237e4 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -137,6 +137,49 @@
 Language/Statements/For/syntax_t13: Crash # Assertion error: kernel_shadow_ast.dart: 'receiver == null': is not true.
 Language/Statements/For/syntax_t20: Crash # Assertion error: kernel_shadow_ast.dart: 'receiver == null': is not true.
 LanguageFeatures/Constant_update2018/ShortCircuitOperators_A03_t03: Crash
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/01: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/02: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/03: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/04: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/05: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/06: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/07: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/08: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/09: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/10: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/11: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/12: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/const_collections_A03_t02/14: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A01_t01/01: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A01_t01/02: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A01_t01/03: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A02_t01/01: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A02_t01/02: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A02_t01/03: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A03_t01/01: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A03_t01/02: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A03_t01/03: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A04_t01/01: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A04_t01/02: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A04_t01/03: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_errors_A04_t01/04: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A01_t02/01: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A01_t02/02: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A01_t02/05: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A01_t02/06: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A01_t02/09: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A01_t02/10: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A01_t02/11: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A01_t02/12: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A02_t02/17: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A02_t02/18: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A02_t02/19: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A02_t02/20: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A02_t02/21: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A02_t02/22: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A02_t02/23: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/static_semantics_A02_t02/24: MissingCompileTimeError
+LanguageFeatures/Control-flow-collections/syntax_A03_t01/02: MissingCompileTimeError
 LanguageFeatures/Spread-collections/Ambiguity_A02_t02/01: MissingCompileTimeError
 LanguageFeatures/Spread-collections/Ambiguity_A02_t03: CompileTimeError
 LanguageFeatures/Spread-collections/ConstSpreads_A04_t01/01: MissingCompileTimeError
@@ -389,7 +432,6 @@
 LanguageFeatures/Constant_update2018/TypeTestOperator_A03_t04/none: CompileTimeError
 LanguageFeatures/Constant_update2018/TypeTestOperator_A04_t01/none: CompileTimeError
 LanguageFeatures/Constant_update2018/TypeTestOperator_A04_t02/none: CompileTimeError
-LanguageFeatures/Control-flow-collections/const_collections_A01_t02: CompileTimeError
 LanguageFeatures/Control-flow-collections/const_collections_A02_t03: CompileTimeError
 LanguageFeatures/Control-flow-collections/const_collections_A02_t04: CompileTimeError
 LanguageFeatures/Control-flow-collections/const_collections_A04_t02: CompileTimeError
@@ -397,12 +439,9 @@
 LanguageFeatures/Control-flow-collections/const_collections_A06_t02: CompileTimeError
 LanguageFeatures/Control-flow-collections/const_collections_A07_t01: CompileTimeError
 LanguageFeatures/Control-flow-collections/const_collections_A07_t02: CompileTimeError
-LanguageFeatures/Control-flow-collections/const_collections_A07_t03: CompileTimeError
-LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A01_t01: CompileTimeError
 LanguageFeatures/Control-flow-collections/dynamic_semantics_list_A04_t02: CompileTimeError
 LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A01_t01: CompileTimeError
 LanguageFeatures/Control-flow-collections/dynamic_semantics_map_A04_t02: CompileTimeError
-LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A01_t01: CompileTimeError
 LanguageFeatures/Control-flow-collections/dynamic_semantics_set_A04_t02: CompileTimeError
 LanguageFeatures/Control-flow-collections/scoping_A01_t01: CompileTimeError, Crash, Pass # This feature is not implemented yet
 LanguageFeatures/Control-flow-collections/scoping_A02_t01: CompileTimeError, Crash, Pass # This feature is not implemented yet
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 94e9d50..d301edb 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -221,14 +221,43 @@
 control_flow_collections/for_inference_test: CompileTimeError
 control_flow_collections/for_test: CompileTimeError
 control_flow_collections/for_variable_test: CompileTimeError
-control_flow_collections/if_await_test: CompileTimeError
+control_flow_collections/if_const_error_test/02: MissingCompileTimeError
+control_flow_collections/if_const_error_test/07: MissingCompileTimeError
+control_flow_collections/if_const_error_test/08: MissingCompileTimeError
+control_flow_collections/if_const_error_test/10: MissingCompileTimeError
+control_flow_collections/if_const_error_test/19: MissingCompileTimeError
+control_flow_collections/if_const_error_test/20: MissingCompileTimeError
+control_flow_collections/if_const_error_test/21: MissingCompileTimeError
+control_flow_collections/if_const_error_test/22: MissingCompileTimeError
+control_flow_collections/if_const_error_test/26: MissingCompileTimeError
+control_flow_collections/if_const_error_test/28: MissingCompileTimeError
+control_flow_collections/if_const_error_test/33: MissingCompileTimeError
+control_flow_collections/if_const_error_test/34: MissingCompileTimeError
+control_flow_collections/if_const_error_test/38: MissingCompileTimeError
+control_flow_collections/if_const_error_test/39: MissingCompileTimeError
 control_flow_collections/if_const_test: CompileTimeError
 control_flow_collections/if_inference_test: CompileTimeError
+control_flow_collections/if_promotion_test/04: MissingCompileTimeError
+control_flow_collections/if_promotion_test/05: MissingCompileTimeError
+control_flow_collections/if_promotion_test/06: MissingCompileTimeError
+control_flow_collections/if_promotion_test/07: MissingCompileTimeError
+control_flow_collections/if_promotion_test/08: MissingCompileTimeError
 control_flow_collections/if_test: CompileTimeError
 control_flow_collections/map_set_ambiguity_test: CompileTimeError
 control_flow_collections/syntax_error_test/09: Crash
 control_flow_collections/syntax_error_test/10: Crash
 control_flow_collections/syntax_test: CompileTimeError
+control_flow_collections/type_error_test/00: MissingCompileTimeError
+control_flow_collections/type_error_test/01: MissingCompileTimeError
+control_flow_collections/type_error_test/02: MissingCompileTimeError
+control_flow_collections/type_error_test/06: MissingCompileTimeError
+control_flow_collections/type_error_test/07: MissingCompileTimeError
+control_flow_collections/type_error_test/08: MissingCompileTimeError
+control_flow_collections/type_error_test/09: MissingCompileTimeError
+control_flow_collections/type_error_test/10: MissingCompileTimeError
+control_flow_collections/type_error_test/11: MissingCompileTimeError
+control_flow_collections/type_error_test/12: MissingCompileTimeError
+control_flow_collections/type_error_test/13: MissingCompileTimeError
 implicit_creation/implicit_const_not_default_values_test/e1: MissingCompileTimeError
 implicit_creation/implicit_const_not_default_values_test/e10: MissingCompileTimeError
 implicit_creation/implicit_const_not_default_values_test/e11: MissingCompileTimeError
@@ -278,8 +307,6 @@
 const_cast2_test/01: CompileTimeError # Issue 32517
 const_cast2_test/none: CompileTimeError # Issue 32517
 control_flow_collections/for_await_test: CompileTimeError
-control_flow_collections/if_await_test: CompileTimeError
-control_flow_collections/if_promotion_test/none: CompileTimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.