[cfe] Add new flags to AsExpression and IsExpression

Change-Id: I31eba9b4ced051a1067945fd68e60a09b1fa6ed7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133100
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/DEPS b/DEPS
index c5d3f19..a868556 100644
--- a/DEPS
+++ b/DEPS
@@ -476,7 +476,7 @@
     "packages": [
       {
         "package": "dart/cfe/dart2js_dills",
-        "version": "binary_version:29_37",
+        "version": "binary_version:38",
       }
     ],
     "dep_type": "cipd",
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 42b36d0..6dd7e15 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -210,9 +210,6 @@
   bool hasUserDefinedNoSuchMethod(
       Class klass, ClassHierarchy hierarchy, Class objectClass);
 
-  void transformProcedureToNoSuchMethodForwarder(
-      Member noSuchMethodInterface, KernelTarget target, Procedure procedure);
-
   /// Returns whether a covariant parameter was seen and more methods thus have
   /// to be checked.
   bool checkMethodOverride(Types types, Procedure declaredMember,
@@ -1006,7 +1003,6 @@
     return noSuchMethod != null && noSuchMethod.enclosingClass != objectClass;
   }
 
-  @override
   void transformProcedureToNoSuchMethodForwarder(
       Member noSuchMethodInterface, KernelTarget target, Procedure procedure) {
     String prefix =
@@ -1024,6 +1020,8 @@
     if (procedure.function.returnType is! VoidType) {
       result = new AsExpression(result, procedure.function.returnType)
         ..isTypeError = true
+        ..isForDynamic = true
+        ..isForNonNullableByDefault = library.isNonNullableByDefault
         ..fileOffset = procedure.fileOffset;
     }
     procedure.function.body = new ReturnStatement(result)
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 7aba059..39f4308 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -3174,8 +3174,9 @@
     libraryBuilder.checkBoundsInType(
         type, typeEnvironment, uri, operator.charOffset);
     Expression expression = popForValue();
-    Expression asExpression =
-        forest.createAsExpression(offsetForToken(operator), expression, type);
+    Expression asExpression = forest.createAsExpression(
+        offsetForToken(operator), expression, type,
+        forNonNullableByDefault: libraryBuilder.isNonNullableByDefault);
     push(asExpression);
   }
 
@@ -3187,6 +3188,7 @@
     bool isInverted = not != null;
     Expression isExpression = forest.createIsExpression(
         offsetForToken(isOperator), operand, type,
+        forNonNullableByDefault: libraryBuilder.isNonNullableByDefault,
         notFileOffset: not != null ? offsetForToken(not) : null);
     libraryBuilder.checkBoundsInType(
         type, typeEnvironment, uri, isOperator.charOffset);
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 6e99f5d..430f0f2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -1791,8 +1791,11 @@
   Constant visitAsExpression(AsExpression node) {
     final Constant constant = _evaluateSubexpression(node.operand);
     if (shouldBeUnevaluated) {
-      return unevaluated(node,
-          new AsExpression(extract(constant), env.substituteType(node.type)));
+      return unevaluated(
+          node,
+          new AsExpression(extract(constant), env.substituteType(node.type))
+            ..isForNonNullableByDefault =
+                _staticTypeContext.isNonNullableByDefault);
     }
     return ensureIsSubtype(constant, evaluateDartType(node, node.type), node);
   }
@@ -1801,7 +1804,11 @@
   Constant visitIsExpression(IsExpression node) {
     final Constant constant = node.operand.accept(this);
     if (shouldBeUnevaluated) {
-      return unevaluated(node, new IsExpression(extract(constant), node.type));
+      return unevaluated(
+          node,
+          new IsExpression(extract(constant), node.type)
+            ..fileOffset = node.fileOffset
+            ..flags = node.flags);
     }
     if (constant is NullConstant) {
       DartType nodeType = node.type;
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index ce53e3d..c1104f7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -201,9 +201,13 @@
   }
 
   Expression createAsExpression(
-      int fileOffset, Expression expression, DartType type) {
+      int fileOffset, Expression expression, DartType type,
+      {bool forNonNullableByDefault}) {
+    assert(forNonNullableByDefault != null);
     assert(fileOffset != null);
-    return new AsExpression(expression, type)..fileOffset = fileOffset;
+    return new AsExpression(expression, type)
+      ..fileOffset = fileOffset
+      ..isForNonNullableByDefault = forNonNullableByDefault;
   }
 
   Expression createSpreadElement(int fileOffset, Expression expression,
@@ -406,10 +410,12 @@
   /// is non-null the test is negated the that file offset.
   Expression createIsExpression(
       int fileOffset, Expression operand, DartType type,
-      {int notFileOffset}) {
+      {bool forNonNullableByDefault, int notFileOffset}) {
+    assert(forNonNullableByDefault != null);
     assert(fileOffset != null);
     Expression result = new IsExpression(operand, type)
-      ..fileOffset = fileOffset;
+      ..fileOffset = fileOffset
+      ..isForNonNullableByDefault = forNonNullableByDefault;
     if (notFileOffset != null) {
       result = createNot(notFileOffset, result);
     }
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 070a818..c5e3e53 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -3531,6 +3531,8 @@
         }
         binary = new AsExpression(binary, binaryType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
           ..fileOffset = fileOffset;
       }
     }
@@ -3616,6 +3618,8 @@
         }
         unary = new AsExpression(unary, unaryType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
           ..fileOffset = fileOffset;
       }
     }
@@ -3693,6 +3697,8 @@
         }
         read = new AsExpression(read, readType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
           ..fileOffset = fileOffset;
       }
     }
@@ -3867,6 +3873,8 @@
         }
         read = new AsExpression(read, readType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
           ..fileOffset = fileOffset;
       }
       Member member = readTarget.member;
diff --git a/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart b/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
index b9f0955..c35373e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/transform_collections.dart
@@ -776,6 +776,7 @@
     assert(fileOffset != TreeNode.noOffset);
     return new AsExpression(expression, type)
       ..isTypeError = true
+      ..isForNonNullableByDefault = _currentLibrary.isNonNullableByDefault
       ..fileOffset = fileOffset;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index f8e8790..6940aaa 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -422,7 +422,6 @@
     cls.procedures.add(cloned);
     cloned.parent = cls;
 
-    SourceLibraryBuilder library = this.library;
     library.forwardersOrigins.add(cloned);
     library.forwardersOrigins.add(procedure);
   }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index f6af169..91e493c 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -703,6 +703,8 @@
         // Insert an implicit downcast.
         result = new AsExpression(expression, initialContextType)
           ..isTypeError = true
+          ..isForNonNullableByDefault = isNonNullableByDefault
+          ..isForDynamic = expressionType is DynamicType
           ..fileOffset = fileOffset;
         break;
       case AssignabilityKind.assignableTearoff:
@@ -713,6 +715,7 @@
             _tearOffCall(expression, expressionType, fileOffset).tearoff,
             initialContextType)
           ..isTypeError = true
+          ..isForNonNullableByDefault = isNonNullableByDefault
           ..fileOffset = fileOffset;
         break;
       case AssignabilityKind.unassignable:
@@ -867,6 +870,7 @@
         // [contextType] directly here.
         hasAnyTypeVariables(contextType) ? const BottomType() : contextType)
       ..isTypeError = true
+      ..isForNonNullableByDefault = isNonNullableByDefault
       ..fileOffset = expression.fileOffset;
     if (contextType is! InvalidType && expressionType is! InvalidType) {
       errorNode = helper.wrapInProblem(
@@ -1797,6 +1801,8 @@
       case MethodContravarianceCheckKind.checkMethodReturn:
         AsExpression replacement = new AsExpression(expression, inferredType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = isNonNullableByDefault
           ..fileOffset = fileOffset;
         if (instrumentation != null) {
           int offset = arguments.fileOffset == -1
@@ -1811,6 +1817,8 @@
             desugaredInvocation.name, desugaredInvocation.interfaceTarget);
         AsExpression asExpression = new AsExpression(propertyGet, functionType)
           ..isTypeError = true
+          ..isCovarianceCheck = true
+          ..isForNonNullableByDefault = isNonNullableByDefault
           ..fileOffset = fileOffset;
         MethodInvocation replacement = new MethodInvocation(
             asExpression, callName, desugaredInvocation.arguments);
@@ -2782,6 +2790,8 @@
             ..fileOffset = fileOffset,
           result.inferredType)
         ..isTypeError = true
+        ..isCovarianceCheck = true
+        ..isForNonNullableByDefault = isNonNullableByDefault
         ..fileOffset = fileOffset;
       if (instrumentation != null) {
         int offset =
@@ -2876,6 +2886,8 @@
       PropertyGet propertyGet = new PropertyGet(receiver, getter.name, getter);
       AsExpression asExpression = new AsExpression(propertyGet, functionType)
         ..isTypeError = true
+        ..isCovarianceCheck = true
+        ..isForNonNullableByDefault = isNonNullableByDefault
         ..fileOffset = fileOffset;
       replacement = new MethodInvocation(asExpression, callName, arguments);
       if (instrumentation != null) {
@@ -2951,6 +2963,8 @@
       PropertyGet propertyGet = new PropertyGet(receiver, field.name, field);
       AsExpression asExpression = new AsExpression(propertyGet, functionType)
         ..isTypeError = true
+        ..isCovarianceCheck = true
+        ..isForNonNullableByDefault = isNonNullableByDefault
         ..fileOffset = fileOffset;
       replacement = new MethodInvocation(asExpression, callName, arguments);
       if (instrumentation != null) {
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index f898908..26cf233 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -2663,6 +2663,7 @@
 sorts
 sought
 sound
+soundness
 source
 sources
 space
diff --git a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
index 65d8f24..b00f945 100644
--- a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
@@ -4,7 +4,7 @@
               ^^^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^" as{TypeError} dart.core::num*).{dart.core::num::+}(5);
+  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Getter not found: 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^" as{TypeError,ForDynamic} dart.core::num*).{dart.core::num::+}(5);
 Errors: {
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
index 2cb613c..d89f1f9 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::id<main::A::T*>(x as{TypeError} main::A::T*);
+  return main::id<main::A::T*>(x as{TypeError,ForDynamic} main::A::T*);
diff --git a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
index 4436d62..7cde4b9 100644
--- a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
@@ -5,12 +5,12 @@
     if(!a._usedData.{dart.core::Object::==}(b._usedData) || !a._deletedKeys.{dart.core::Object::==}(b._deletedKeys) || !a._hashMask.{dart.core::Object::==}(b._hashMask) || !a._index.length.{dart.core::Object::==}(b._index.length) || !a._data.length.{dart.core::Object::==}(b._data.length)) {
       return false;
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._index.length as{TypeError} dart.core::num*); i = i.{dart.core::num::+}(1)) {
+    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._index.length as{TypeError,ForDynamic} dart.core::num*); i = i.{dart.core::num::+}(1)) {
       if(!a._index.[](i).{dart.core::Object::==}(b._index.[](i))) {
         return false;
       }
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._data.length as{TypeError} dart.core::num*); i = i.{dart.core::num::+}(1)) {
+    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._data.length as{TypeError,ForDynamic} dart.core::num*); i = i.{dart.core::num::+}(1)) {
       dynamic ad = a._data.[](i);
       dynamic bd = b._data.[](i);
       if(!dart.core::identical(ad, bd) && !(ad.{dart.core::Object::==}(a) && bd.{dart.core::Object::==}(b))) {
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
index 5b54940..66d7a12 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
-  return main::id<main::A::debugExpr::T*>(x as{TypeError} main::A::debugExpr::T*);
+  return main::id<main::A::debugExpr::T*>(x as{TypeError,ForDynamic} main::A::debugExpr::T*);
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.strong.expect b/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
index 24d7f52..c2f32b4 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.strong.expect
@@ -474,7 +474,7 @@
   self::expect(n0, let final self::IntClass* #t372 = v in #t372.{core::Object::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t372), v.{core::Object::==}(null));
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
-  if(expectNull as{TypeError} core::bool*) {
+  if(expectNull as{TypeError,ForDynamic} core::bool*) {
     expected = null;
   }
   if(!expected.{core::Object::==}(actual)) {
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
index 24d7f52..c2f32b4 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.strong.transformed.expect
@@ -474,7 +474,7 @@
   self::expect(n0, let final self::IntClass* #t372 = v in #t372.{core::Object::==}(null) ?{core::int*} null : self::IntClassExtension|get#property(#t372), v.{core::Object::==}(null));
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
-  if(expectNull as{TypeError} core::bool*) {
+  if(expectNull as{TypeError,ForDynamic} core::bool*) {
     expected = null;
   }
   if(!expected.{core::Object::==}(actual)) {
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
index bcdd19f..f4366a8 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.expect
@@ -52,9 +52,9 @@
   return #this.{self::Class::field};
 static method Extension|set#setterWithClosure(final self::Class* #this, core::int* value) → void {
   function abs(dynamic value) → dynamic {
-    return value.<(0) as{TypeError} core::bool* ?{dynamic} value.unary-() : value;
+    return value.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value.unary-() : value;
   }
-  #this.{self::Class::field} = abs.call(value) as{TypeError} core::int*;
+  #this.{self::Class::field} = abs.call(value) as{TypeError,ForDynamic} core::int*;
 }
 static method Extension|testInternal(final self::Class* #this) → dynamic {
   self::expect(null, #this.{self::Class::field});
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
index bcdd19f..f4366a8 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.strong.transformed.expect
@@ -52,9 +52,9 @@
   return #this.{self::Class::field};
 static method Extension|set#setterWithClosure(final self::Class* #this, core::int* value) → void {
   function abs(dynamic value) → dynamic {
-    return value.<(0) as{TypeError} core::bool* ?{dynamic} value.unary-() : value;
+    return value.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value.unary-() : value;
   }
-  #this.{self::Class::field} = abs.call(value) as{TypeError} core::int*;
+  #this.{self::Class::field} = abs.call(value) as{TypeError,ForDynamic} core::int*;
 }
 static method Extension|testInternal(final self::Class* #this) → dynamic {
   self::expect(null, #this.{self::Class::field});
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
index 65f4bbd..b9ec15a 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.expect
@@ -24,6 +24,6 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^".+(42) as{TypeError} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+                      ^^^^^^".+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
 static method Extension|set#setter(final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
index d5c36de..355e22c 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.strong.transformed.expect
@@ -24,6 +24,6 @@
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^".+(42) as{TypeError} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+                      ^^^^^^".+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
 static method Extension|set#setter(final self::Class* #this, core::int* value) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.strong.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.strong.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.strong.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.strong.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.strong.transformed.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.strong.transformed.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.strong.transformed.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.outline.expect b/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
index acc5dad..841c0e0 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
@@ -186,7 +186,7 @@
   method cMethod() → dynamic
     ;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -202,7 +202,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -226,7 +226,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.strong.expect b/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
index ec953d2..3192669 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
@@ -182,7 +182,7 @@
   method bMethod() → dynamic {}
   method cMethod() → dynamic {}
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -199,7 +199,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -225,7 +225,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
index 7200a65..f027a20 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::D*
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/async_nested.dart.strong.expect b/pkg/front_end/testcases/general/async_nested.dart.strong.expect
index 5c3da0c..6916565 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.strong.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.strong.expect
@@ -20,7 +20,7 @@
 static method main() → void async {
   core::String* expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
-  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
   core::print(actual);
   if(!actual.{core::String::==}(expected)) {
     throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general/async_nested.dart.strong.transformed.expect b/pkg/front_end/testcases/general/async_nested.dart.strong.transformed.expect
index 27b7653..2fe75da 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
         :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
         [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[])), :async_op_then, :async_op_error, :async_op) in null;
         self::Node* node = new self::Node::•("1", <self::Node*>[:async_temporary_2, :async_temporary_0, _in::unsafeCast<self::Node*>(:result)]);
-        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
         core::print(actual);
         if(!actual.{core::String::==}(expected)) {
           throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general/await_complex.dart.strong.expect b/pkg/front_end/testcases/general/await_complex.dart.strong.expect
index 9cf401a..a0b6fdd 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.strong.expect
@@ -14,14 +14,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -41,65 +41,65 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(3, d);
-  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method topLevelMembers() → dynamic async {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method instanceMembers() → dynamic async {
   self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method others() → dynamic async {
   core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString");
   self::expect("1 1 someString", a);
   self::C* c = new self::C::•();
-  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   core::int* cnt = 2;
   core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError} core::int*);
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*);
   self::expect(1, b.{core::List::[]}(cnt));
-  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, e);
 }
 static method conditionals() → dynamic async {
   core::bool* a = false;
   core::bool* b = true;
-  core::bool* c = a || b || await self::dummy() as{TypeError} core::bool*;
+  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
   self::expect(true, c);
   dynamic d = a || b ?{dynamic} a : await self::dummy();
   self::expect(false, d);
diff --git a/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
index b6697d5..3840565 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
@@ -15,14 +15,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -42,7 +42,7 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
@@ -67,27 +67,27 @@
       {
         :async_temporary_0 = self::C::staticField;
         [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
         [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
         [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
         [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
         [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(3, d);
         :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1));
         [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -122,23 +122,23 @@
       {
         :async_temporary_0 = self::globalVariable;
         [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
         [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
         [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
         [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1));
         [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -174,23 +174,23 @@
         self::C* inst = new self::C::•();
         :async_temporary_0 = inst.{self::C::field};
         [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = inst.{self::C::getter};
         [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
         [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = inst.{self::C::foo}(1);
         [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1));
         [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -232,17 +232,17 @@
         self::C* c = new self::C::•();
         :async_temporary_1 = c.{self::C::field};
         [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         core::int* cnt = 2;
         core::List<core::int*>* b = <core::int*>[1, 2, 3];
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
         [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError} core::int*);
+        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError,ForDynamic} core::int*);
         self::expect(1, b.{core::List::[]}(cnt));
         :async_temporary_4 = b.{core::List::[]}(0);
         [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -282,7 +282,7 @@
           ;
         else {
           [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = (:result as{TypeError} core::bool*).==(true);
+          :async_temporary_0 = (:result as{TypeError,ForDynamic} core::bool*).==(true);
         }
         core::bool* c = :async_temporary_0;
         self::expect(true, c);
diff --git a/pkg/front_end/testcases/general/bug37476.dart.strong.expect b/pkg/front_end/testcases/general/bug37476.dart.strong.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.strong.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.strong.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/bug37476.dart.strong.transformed.expect b/pkg/front_end/testcases/general/bug37476.dart.strong.transformed.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.strong.transformed.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.expect
index 92d9353..5c59c15 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.transformed.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.transformed.expect
index 6da0135..441b505 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final core::Object* #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general/classes.dart.strong.expect b/pkg/front_end/testcases/general/classes.dart.strong.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general/classes.dart.strong.expect
+++ b/pkg/front_end/testcases/general/classes.dart.strong.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general/classes.dart.strong.transformed.expect b/pkg/front_end/testcases/general/classes.dart.strong.transformed.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general/classes.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/classes.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
index 7cf2d27..62aa508 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
index 7cf2d27..62aa508 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect
index f133a9d..3044135 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.expect
@@ -7,19 +7,19 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t1.{core::List::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t1.{core::List::add}(i);
@@ -27,19 +27,19 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t2.{core::Set::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t2.{core::Set::add}(i);
@@ -47,19 +47,19 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t3.{core::Map::[]=}(i, i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(i, i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t3.{core::Map::[]=}(i, i);
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
index ac4ad8d..7bd3d63 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.strong.transformed.expect
@@ -8,14 +8,14 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -28,7 +28,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t1.{core::List::add}(i);
       }
     }
@@ -38,14 +38,14 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -58,7 +58,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t2.{core::Set::add}(i);
       }
     }
@@ -68,14 +68,14 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -88,7 +88,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t3.{core::Map::[]=}(i, i);
       }
     }
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.expect
index c865110..70902fb 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.expect
@@ -443,193 +443,193 @@
 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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);
@@ -639,173 +639,173 @@
                                  ^";
   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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -813,7 +813,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -821,7 +821,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t102 in listInt)
         #t101.{core::List::add}(#t102);
     else
@@ -830,7 +830,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t105 in listInt)
         #t104.{core::Set::add}(#t105);
     else
@@ -840,7 +840,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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
@@ -850,38 +850,38 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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>*)
+      for (final dynamic #t112 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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>*)
+      for (final dynamic #t115 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^");
     else
-      for (final dynamic #t117 in dynVar as{TypeError} core::Iterable<dynamic>*)
+      for (final dynamic #t117 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else
       for (final core::num* #t119 in listDouble)
@@ -889,7 +889,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t121 in listInt)
         #t120.{core::Set::add}(#t121);
     else
@@ -898,7 +898,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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
@@ -907,33 +907,33 @@
   } =>#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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t128 in dynVar as{TypeError,ForDynamic} 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>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t131 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t132 = #t131 as{TypeError} core::int*;
         #t130.{core::Set::add}(#t132);
       }
@@ -941,8 +941,8 @@
   } =>#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}) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError,ForDynamic} 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);
@@ -951,31 +951,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -983,7 +983,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -991,7 +991,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t147 in <core::int*>[let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*])
@@ -999,7 +999,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t150 in <core::int*>[let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*])
@@ -1008,7 +1008,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t153 in <core::String*, core::int*>{"bar": let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
@@ -1017,7 +1017,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
@@ -1025,7 +1025,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
@@ -1041,7 +1041,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1052,7 +1052,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1064,7 +1064,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1076,7 +1076,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
@@ -1086,7 +1086,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1104,7 +1104,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1114,7 +1114,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1171,7 +1171,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1182,7 +1182,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1193,7 +1193,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1204,7 +1204,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1217,380 +1217,380 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1598,8 +1598,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -1607,8 +1607,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t291 in listInt)
           #t290.{core::List::add}(#t291);
       else
@@ -1617,8 +1617,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t294 in listInt)
           #t293.{core::Set::add}(#t294);
       else
@@ -1628,8 +1628,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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
@@ -1639,40 +1639,40 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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>*)
+        for (final dynamic #t301 in dynVar as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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>*)
+        for (final dynamic #t304 in dynVar as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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})
+        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else
         for (final core::num* #t309 in listDouble)
@@ -1680,8 +1680,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t311 in listInt)
           #t310.{core::Set::add}(#t311);
       else
@@ -1690,8 +1690,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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
@@ -1700,33 +1700,33 @@
   } =>#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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t318 in dynVar as{TypeError,ForDynamic} 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>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t321 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t322 = #t321 as{TypeError} core::int*;
         #t320.{core::Set::add}(#t322);
       }
@@ -1734,8 +1734,8 @@
   } =>#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}) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError,ForDynamic} 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);
@@ -1744,17 +1744,17 @@
   } =>#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))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -1776,19 +1776,19 @@
   } =>#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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t336.{core::List::add}(i as{TypeError,ForDynamic} 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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t337.{core::Set::add}(i as{TypeError,ForDynamic} 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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
     #t338.{core::Map::[]=}("baz", null);
   } =>#t338;
   core::List<core::int*>* list130 = block {
@@ -1810,14 +1810,14 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
   } =>#t342;
   block {
     final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -1825,7 +1825,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1837,7 +1837,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t351 in <core::int*>[let final<BottomType> #t352 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1845,7 +1845,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t354 in <core::int*>[let final<BottomType> #t355 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1854,7 +1854,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::int*, core::int*>* #t357 in <core::int*, core::int*>{let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t359 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1867,7 +1867,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
@@ -1875,7 +1875,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
@@ -1891,8 +1891,8 @@
                                                     ^": 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1903,8 +1903,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1916,8 +1916,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -1929,8 +1929,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
@@ -1940,8 +1940,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
@@ -1959,8 +1959,8 @@
                                                                      ^": 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t374.{core::List::add}(42);
       else
         #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1970,8 +1970,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t375.{core::Set::add}(42);
       else
         #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
index 82dc289..6dbb29f 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.strong.transformed.expect
@@ -444,58 +444,58 @@
 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t11 = :sync-for-iterator.{core::Iterator::current};
@@ -505,7 +505,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t13 = :sync-for-iterator.{core::Iterator::current};
@@ -516,7 +516,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t15 = :sync-for-iterator.{core::Iterator::current};
@@ -527,7 +527,7 @@
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
@@ -537,7 +537,7 @@
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
@@ -548,7 +548,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t21 = :sync-for-iterator.{core::Iterator::current};
@@ -559,7 +559,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t23 = :sync-for-iterator.{core::Iterator::current};
@@ -569,7 +569,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t25 = :sync-for-iterator.{core::Iterator::current};
@@ -580,7 +580,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 = :sync-for-iterator.{core::Iterator::current};
@@ -591,8 +591,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
@@ -602,8 +602,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t31 = :sync-for-iterator.{core::Iterator::current};
@@ -614,8 +614,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t33 = :sync-for-iterator.{core::Iterator::current};
@@ -626,8 +626,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
@@ -637,8 +637,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t37 = :sync-for-iterator.{core::Iterator::current};
@@ -649,8 +649,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t39 = :sync-for-iterator.{core::Iterator::current};
@@ -661,8 +661,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t41 = :sync-for-iterator.{core::Iterator::current};
@@ -672,8 +672,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t43 = :sync-for-iterator.{core::Iterator::current};
@@ -684,8 +684,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 = :sync-for-iterator.{core::Iterator::current};
@@ -696,7 +696,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
@@ -706,7 +706,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t49 = :sync-for-iterator.{core::Iterator::current};
@@ -720,7 +720,7 @@
                                  ^";
   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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t51 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t52 = #t51.{core::Set::add}(<core::int*>[]) in #t51).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t53 = :sync-for-iterator.{core::Iterator::current};
@@ -730,7 +730,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t55 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t56 = #t55.{core::Set::add}(<core::int*>[]) in #t55).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t57 = :sync-for-iterator.{core::Iterator::current};
@@ -741,8 +741,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
@@ -752,8 +752,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t61 = :sync-for-iterator.{core::Iterator::current};
@@ -764,8 +764,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 = :sync-for-iterator.{core::Iterator::current};
@@ -776,7 +776,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t65 = :sync-for-iterator.{core::Iterator::current};
@@ -786,7 +786,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t67 = :sync-for-iterator.{core::Iterator::current};
@@ -797,7 +797,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current};
@@ -808,7 +808,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t71 = col::LinkedHashSet::•<core::int*>() in #t71).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t72 = :sync-for-iterator.{core::Iterator::current};
@@ -818,7 +818,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t74 = col::LinkedHashSet::•<core::int*>() in #t74).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t75 = :sync-for-iterator.{core::Iterator::current};
@@ -829,8 +829,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t77 = :sync-for-iterator.{core::Iterator::current};
@@ -840,8 +840,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t79 = :sync-for-iterator.{core::Iterator::current};
@@ -852,8 +852,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t81 = :sync-for-iterator.{core::Iterator::current};
@@ -864,7 +864,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t83 = :sync-for-iterator.{core::Iterator::current};
@@ -874,7 +874,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
@@ -885,7 +885,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 = :sync-for-iterator.{core::Iterator::current};
@@ -896,8 +896,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t89 = :sync-for-iterator.{core::Iterator::current};
@@ -907,8 +907,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t91 = :sync-for-iterator.{core::Iterator::current};
@@ -919,8 +919,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 = :sync-for-iterator.{core::Iterator::current};
@@ -931,38 +931,38 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -970,7 +970,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -978,7 +978,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t102 = :sync-for-iterator.{core::Iterator::current};
@@ -995,7 +995,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t105 = :sync-for-iterator.{core::Iterator::current};
@@ -1013,7 +1013,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t108 = :sync-for-iterator.{core::Iterator::current};
@@ -1031,7 +1031,7 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t111 = :sync-for-iterator.{core::Iterator::current};
@@ -1039,7 +1039,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
         #t110.{core::List::add}(#t112);
@@ -1048,7 +1048,7 @@
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t114 = :sync-for-iterator.{core::Iterator::current};
@@ -1056,7 +1056,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
         #t113.{core::Set::add}(#t115);
@@ -1066,13 +1066,13 @@
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^");
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t117 = :sync-for-iterator.{core::Iterator::current};
         #t116.{core::Set::add}(#t117);
@@ -1082,7 +1082,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else {
       core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -1094,7 +1094,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t121 = :sync-for-iterator.{core::Iterator::current};
@@ -1107,7 +1107,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t123 = :sync-for-iterator.{core::Iterator::current};
@@ -1120,25 +1120,25 @@
   } =>#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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1150,8 +1150,8 @@
   } =>#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*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t131 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1164,8 +1164,8 @@
   } =>#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*) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t134 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1179,31 +1179,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -1211,7 +1211,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -1219,7 +1219,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1231,7 +1231,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1244,7 +1244,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}).{core::Iterable::iterator};
@@ -1257,7 +1257,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
@@ -1265,7 +1265,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
@@ -1281,7 +1281,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1292,7 +1292,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1304,7 +1304,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1316,7 +1316,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
@@ -1326,7 +1326,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1344,7 +1344,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1354,7 +1354,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
@@ -1411,7 +1411,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1422,7 +1422,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1433,7 +1433,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1444,7 +1444,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1457,58 +1457,58 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t198 = :sync-for-iterator.{core::Iterator::current};
@@ -1518,7 +1518,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t200 = :sync-for-iterator.{core::Iterator::current};
@@ -1529,7 +1529,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t202 = :sync-for-iterator.{core::Iterator::current};
@@ -1540,7 +1540,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t204 = :sync-for-iterator.{core::Iterator::current};
@@ -1550,7 +1550,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t206 = :sync-for-iterator.{core::Iterator::current};
@@ -1561,7 +1561,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t208 = :sync-for-iterator.{core::Iterator::current};
@@ -1572,7 +1572,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t210 = :sync-for-iterator.{core::Iterator::current};
@@ -1582,7 +1582,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t212 = :sync-for-iterator.{core::Iterator::current};
@@ -1593,7 +1593,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 = :sync-for-iterator.{core::Iterator::current};
@@ -1604,8 +1604,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t216 = :sync-for-iterator.{core::Iterator::current};
@@ -1615,8 +1615,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t218 = :sync-for-iterator.{core::Iterator::current};
@@ -1627,8 +1627,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t220 = :sync-for-iterator.{core::Iterator::current};
@@ -1639,8 +1639,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t222 = :sync-for-iterator.{core::Iterator::current};
@@ -1650,8 +1650,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t224 = :sync-for-iterator.{core::Iterator::current};
@@ -1662,8 +1662,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current};
@@ -1674,8 +1674,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t228 = :sync-for-iterator.{core::Iterator::current};
@@ -1685,8 +1685,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t230 = :sync-for-iterator.{core::Iterator::current};
@@ -1697,8 +1697,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 = :sync-for-iterator.{core::Iterator::current};
@@ -1709,7 +1709,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t234 = :sync-for-iterator.{core::Iterator::current};
@@ -1719,7 +1719,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t236 = :sync-for-iterator.{core::Iterator::current};
@@ -1730,7 +1730,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 = :sync-for-iterator.{core::Iterator::current};
@@ -1741,7 +1741,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t240 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t241 = #t240.{core::Set::add}(<core::int*>[]) in #t240).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current};
@@ -1751,7 +1751,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t244 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t245 = #t244.{core::Set::add}(<core::int*>[]) in #t244).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t246 = :sync-for-iterator.{core::Iterator::current};
@@ -1762,8 +1762,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t248 = :sync-for-iterator.{core::Iterator::current};
@@ -1773,8 +1773,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t250 = :sync-for-iterator.{core::Iterator::current};
@@ -1785,8 +1785,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 = :sync-for-iterator.{core::Iterator::current};
@@ -1797,7 +1797,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t254 = :sync-for-iterator.{core::Iterator::current};
@@ -1807,7 +1807,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t256 = :sync-for-iterator.{core::Iterator::current};
@@ -1818,7 +1818,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t258 = :sync-for-iterator.{core::Iterator::current};
@@ -1829,7 +1829,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t260 = col::LinkedHashSet::•<core::int*>() in #t260).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t261 = :sync-for-iterator.{core::Iterator::current};
@@ -1839,7 +1839,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t263 = col::LinkedHashSet::•<core::int*>() in #t263).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t264 = :sync-for-iterator.{core::Iterator::current};
@@ -1850,8 +1850,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t266 = :sync-for-iterator.{core::Iterator::current};
@@ -1861,8 +1861,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t268 = :sync-for-iterator.{core::Iterator::current};
@@ -1873,7 +1873,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t270 = :sync-for-iterator.{core::Iterator::current};
@@ -1883,7 +1883,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t272 = :sync-for-iterator.{core::Iterator::current};
@@ -1894,7 +1894,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 = :sync-for-iterator.{core::Iterator::current};
@@ -1905,8 +1905,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t276 = :sync-for-iterator.{core::Iterator::current};
@@ -1916,8 +1916,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t278 = :sync-for-iterator.{core::Iterator::current};
@@ -1928,8 +1928,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 = :sync-for-iterator.{core::Iterator::current};
@@ -1940,53 +1940,53 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1994,8 +1994,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -2003,8 +2003,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t291 = :sync-for-iterator.{core::Iterator::current};
@@ -2021,8 +2021,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t294 = :sync-for-iterator.{core::Iterator::current};
@@ -2040,8 +2040,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t297 = :sync-for-iterator.{core::Iterator::current};
@@ -2059,8 +2059,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t300 = :sync-for-iterator.{core::Iterator::current};
@@ -2068,7 +2068,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t301 = :sync-for-iterator.{core::Iterator::current};
           #t299.{core::List::add}(#t301);
@@ -2077,8 +2077,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t303 = :sync-for-iterator.{core::Iterator::current};
@@ -2086,7 +2086,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t304 = :sync-for-iterator.{core::Iterator::current};
           #t302.{core::Set::add}(#t304);
@@ -2096,8 +2096,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t306 = :sync-for-iterator.{core::Iterator::current};
@@ -2105,7 +2105,7 @@
         }
       }
       else {
-        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t307 = :sync-for-iterator.{core::Iterator::current};
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
@@ -2115,8 +2115,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else {
         core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -2128,8 +2128,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t311 = :sync-for-iterator.{core::Iterator::current};
@@ -2142,8 +2142,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t313 = :sync-for-iterator.{core::Iterator::current};
@@ -2156,25 +2156,25 @@
   } =>#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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t318 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2186,8 +2186,8 @@
   } =>#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)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t321 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2200,8 +2200,8 @@
   } =>#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)) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t324 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2215,17 +2215,17 @@
   } =>#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))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -2263,20 +2263,20 @@
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t336.{core::List::add}(i as{TypeError} core::int*);
+        #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t337.{core::Set::add}(i as{TypeError} core::int*);
+        #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t337.{core::Set::add}(null);
@@ -2284,10 +2284,10 @@
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+        #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t338.{core::Map::[]=}("baz", null);
@@ -2326,14 +2326,14 @@
       {
         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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
         } =>#t342;
         block {
           final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -2341,7 +2341,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2353,7 +2353,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t351 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2365,7 +2365,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t354 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2378,7 +2378,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{let final<BottomType> #t357 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2395,7 +2395,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
@@ -2403,7 +2403,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
@@ -2419,8 +2419,8 @@
                                                     ^": 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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2431,8 +2431,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2444,8 +2444,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -2457,8 +2457,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
@@ -2468,8 +2468,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
@@ -2487,8 +2487,8 @@
                                                                      ^": 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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t374.{core::List::add}(42);
             else
               #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -2498,8 +2498,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t375.{core::Set::add}(42);
             else
               #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.strong.expect b/pkg/front_end/testcases/general/covariant_generic.dart.strong.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.strong.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.strong.transformed.expect b/pkg/front_end/testcases/general/covariant_generic.dart.strong.transformed.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general/invocations.dart.strong.expect b/pkg/front_end/testcases/general/invocations.dart.strong.expect
index 390dc20..2e5cbcb 100644
--- a/pkg/front_end/testcases/general/invocations.dart.strong.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.strong.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general/invocations.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invocations.dart.strong.transformed.expect
index 390dc20..2e5cbcb 100644
--- a/pkg/front_end/testcases/general/invocations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.strong.transformed.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general/issue39344.dart.strong.expect b/pkg/front_end/testcases/general/issue39344.dart.strong.expect
index 8c367fc..bca8a50 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.strong.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general/issue39344.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue39344.dart.strong.transformed.expect
index 8c367fc..bca8a50 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
index f1b93c3..51f556d 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
index f1b93c3..51f556d 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.strong.expect b/pkg/front_end/testcases/general/named_function_scope.dart.strong.expect
index d20dd45..f5c5171 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.strong.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/general/named_function_scope.dart.strong.transformed.expect
index d20dd45..f5c5171 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.strong.transformed.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.outline.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.outline.expect
index ea56f3e..fa9a400 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.outline.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::Foo*
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.transformed.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.transformed.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.strong.transformed.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.expect
index 18203ab..5d3f769 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.expect
@@ -10,8 +10,8 @@
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError} core::Iterable<dynamic>*) {
-      self::Class* c = #t1 as{TypeError} self::Class*;
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
index f6157cd7..eb4e616 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.strong.transformed.expect
@@ -12,11 +12,11 @@
   dynamic o;
   if(false) {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
-          self::Class* c = #t2 as{TypeError} self::Class*;
+          self::Class* c = #t2 as{TypeError,ForDynamic} self::Class*;
         }
       }
     }
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.expect
index 18814f3..4bfac34f 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.transformed.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.transformed.expect
index 18814f3..4bfac34f 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.expect
index 2a7da3d..48f5952 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.expect
@@ -160,18 +160,18 @@
   } =>#t18;
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
-    for (final dynamic #t21 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t21 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t20.{core::List::add}(#t21);
   } =>#t20;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
-    for (final dynamic #t23 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t23 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t22.{core::Set::add}(#t23);
     #t22.{core::Set::add}(42);
   } =>#t22;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
       #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
     #t24.{core::Map::[]=}("baz", 42);
   } =>#t24;
@@ -377,14 +377,14 @@
   } =>#t91;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
-    for (final dynamic #t96 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t96 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t97 = #t96 as{TypeError} core::int*;
       #t95.{core::List::add}(#t97);
     }
   } =>#t95;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
       final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
       final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
       #t98.{core::Map::[]=}(#t100, #t101);
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
index aac1419..22a6806 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.strong.transformed.expect
@@ -208,7 +208,7 @@
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         #t20.{core::List::add}(#t21);
@@ -218,7 +218,7 @@
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         #t22.{core::Set::add}(#t23);
@@ -229,7 +229,7 @@
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t25 = :sync-for-iterator.{core::Iterator::current};
         #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
@@ -554,7 +554,7 @@
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -567,7 +567,7 @@
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t99 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/general/super_call.dart.strong.expect b/pkg/front_end/testcases/general/super_call.dart.strong.expect
index a56e117..7ef570e 100644
--- a/pkg/front_end/testcases/general/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.strong.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general/super_call.dart:14:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_call.dart.strong.transformed.expect b/pkg/front_end/testcases/general/super_call.dart.strong.transformed.expect
index a56e117..7ef570e 100644
--- a/pkg/front_end/testcases/general/super_call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general/super_call.dart:14:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.outline.expect b/pkg/front_end/testcases/general/super_nsm.dart.outline.expect
index 2da773b..4f2eabf 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.outline.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.strong.expect b/pkg/front_end/testcases/general/super_nsm.dart.strong.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.strong.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.strong.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.strong.transformed.expect b/pkg/front_end/testcases/general/super_nsm.dart.strong.transformed.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.expect
index 79514a6..09551dc 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.expect
@@ -31,7 +31,7 @@
     return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" as{TypeError} core::num*);
+                                   ^^^^^^" as{TypeError,ForDynamic} core::num*);
 }
 static method main() → dynamic {
   new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
diff --git a/pkg/front_end/testcases/general/void_methods.dart.strong.expect b/pkg/front_end/testcases/general/void_methods.dart.strong.expect
index 3bde972..c503392 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.strong.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general/void_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/general/void_methods.dart.strong.transformed.expect
index 9f36d60..739251d 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.transformed.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.strong.transformed.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.transformed.expect
index 4a77a26..2a91755 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/DeltaBlue.dart.weak.transformed.expect
@@ -52,22 +52,22 @@
     self::planner.{self::Planner::incrementalAdd}(this);
   }
   method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError} core::int*);
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*);
     if(!this.{self::Constraint::isSatisfied}()) {
       if(this.{self::Constraint::strength}.{core::Object::==}(#C22)) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError} core::int*);
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*);
     self::Variable* out = this.{self::Constraint::output}();
     self::Constraint* overridden = out.{self::Variable::determinedBy};
     if(!overridden.{core::Object::==}(null))
       overridden.{self::Constraint::markUnsatisfied}();
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError} core::int*))
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*))
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
     return overridden;
   }
   method destroyConstraint() → void {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.outline.expect
index 9febcbc1..0f02aec 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.outline.expect
@@ -186,7 +186,7 @@
   method cMethod() → dynamic
     ;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -202,7 +202,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -226,7 +226,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.strong.expect
index eca4d92..4d04d03 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.strong.expect
@@ -182,7 +182,7 @@
   method bMethod() → dynamic {}
   method cMethod() → dynamic {}
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -199,7 +199,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -225,7 +225,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
index eca4d92..4d04d03 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
@@ -182,7 +182,7 @@
   method bMethod() → dynamic {}
   method cMethod() → dynamic {}
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
@@ -199,7 +199,7 @@
   no-such-method-forwarder method interfaceMethod2() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
     return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder method interfaceMethod3() → void
@@ -225,7 +225,7 @@
     ;
   abstract method noSuchMethod(core::Invocation* _) → dynamic;
   no-such-method-forwarder get interfaceMethod1() → dynamic
-    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
   no-such-method-forwarder set property3(dynamic _) → void
     return this.{self::MyMock3::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
index 7200a65..f027a20 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::D*
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
index 8482063..df623b2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
     : super self::C::•()
     ;
   no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} self::B*;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} self::B*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.expect
index 5c3da0c..6916565 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.expect
@@ -20,7 +20,7 @@
 static method main() → void async {
   core::String* expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
-  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
   core::print(actual);
   if(!actual.{core::String::==}(expected)) {
     throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.transformed.expect
index 27b7653..2fe75da 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
         :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
         [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[])), :async_op_then, :async_op_error, :async_op) in null;
         self::Node* node = new self::Node::•("1", <self::Node*>[:async_temporary_2, :async_temporary_0, _in::unsafeCast<self::Node*>(:result)]);
-        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
         core::print(actual);
         if(!actual.{core::String::==}(expected)) {
           throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.expect
index 5c3da0c..6916565 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.expect
@@ -20,7 +20,7 @@
 static method main() → void async {
   core::String* expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
-  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+  core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
   core::print(actual);
   if(!actual.{core::String::==}(expected)) {
     throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.transformed.expect
index 27b7653..2fe75da 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/async_nested.dart.weak.transformed.expect
@@ -47,7 +47,7 @@
         :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
         [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[])), :async_op_then, :async_op_error, :async_op) in null;
         self::Node* node = new self::Node::•("1", <self::Node*>[:async_temporary_2, :async_temporary_0, _in::unsafeCast<self::Node*>(:result)]);
-        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError} core::String*;
+        core::String* actual = node.{self::Node::toSimpleString}() as{TypeError,ForDynamic} core::String*;
         core::print(actual);
         if(!actual.{core::String::==}(expected)) {
           throw "Expected '${expected}' but got '${actual}'";
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.expect
index 9cf401a..a0b6fdd 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.expect
@@ -14,14 +14,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -41,65 +41,65 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(3, d);
-  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method topLevelMembers() → dynamic async {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method instanceMembers() → dynamic async {
   self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method others() → dynamic async {
   core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString");
   self::expect("1 1 someString", a);
   self::C* c = new self::C::•();
-  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   core::int* cnt = 2;
   core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError} core::int*);
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*);
   self::expect(1, b.{core::List::[]}(cnt));
-  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, e);
 }
 static method conditionals() → dynamic async {
   core::bool* a = false;
   core::bool* b = true;
-  core::bool* c = a || b || await self::dummy() as{TypeError} core::bool*;
+  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
   self::expect(true, c);
   dynamic d = a || b ?{dynamic} a : await self::dummy();
   self::expect(false, d);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.transformed.expect
index b6697d5..3840565 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.strong.transformed.expect
@@ -15,14 +15,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -42,7 +42,7 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
@@ -67,27 +67,27 @@
       {
         :async_temporary_0 = self::C::staticField;
         [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
         [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
         [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
         [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
         [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(3, d);
         :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1));
         [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -122,23 +122,23 @@
       {
         :async_temporary_0 = self::globalVariable;
         [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
         [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
         [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
         [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1));
         [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -174,23 +174,23 @@
         self::C* inst = new self::C::•();
         :async_temporary_0 = inst.{self::C::field};
         [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = inst.{self::C::getter};
         [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
         [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = inst.{self::C::foo}(1);
         [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1));
         [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -232,17 +232,17 @@
         self::C* c = new self::C::•();
         :async_temporary_1 = c.{self::C::field};
         [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         core::int* cnt = 2;
         core::List<core::int*>* b = <core::int*>[1, 2, 3];
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
         [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError} core::int*);
+        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError,ForDynamic} core::int*);
         self::expect(1, b.{core::List::[]}(cnt));
         :async_temporary_4 = b.{core::List::[]}(0);
         [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -282,7 +282,7 @@
           ;
         else {
           [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = (:result as{TypeError} core::bool*).==(true);
+          :async_temporary_0 = (:result as{TypeError,ForDynamic} core::bool*).==(true);
         }
         core::bool* c = :async_temporary_0;
         self::expect(true, c);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.expect
index 9cf401a..a0b6fdd 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.expect
@@ -14,14 +14,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -41,65 +41,65 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(3, d);
-  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method topLevelMembers() → dynamic async {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method instanceMembers() → dynamic async {
   self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* a = inst.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, a);
-  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* b = inst.{self::C::getter}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = inst.{self::C::foo}(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, d);
-  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1)).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(5, e);
 }
 static method others() → dynamic async {
   core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString");
   self::expect("1 1 someString", a);
   self::C* c = new self::C::•();
-  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* d = c.{self::C::field}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   core::int* cnt = 2;
   core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError} core::int*);
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*);
   self::expect(1, b.{core::List::[]}(cnt));
-  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError} core::num*);
+  core::num* e = b.{core::List::[]}(0).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*);
   self::expect(2, e);
 }
 static method conditionals() → dynamic async {
   core::bool* a = false;
   core::bool* b = true;
-  core::bool* c = a || b || await self::dummy() as{TypeError} core::bool*;
+  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
   self::expect(true, c);
   dynamic d = a || b ?{dynamic} a : await self::dummy();
   self::expect(false, d);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.transformed.expect
index b6697d5..3840565 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/await_complex.dart.weak.transformed.expect
@@ -15,14 +15,14 @@
   static get staticGetter() → core::int*
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
   }
   static method staticFoo(core::int* param) → core::int*
     return param;
   get getter() → core::int*
     return this.{self::C::field};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
   }
   method foo(core::int* param) → core::int*
     return param;
@@ -42,7 +42,7 @@
 static get topLevelGetter() → core::int*
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
 }
 static method dummy() → dynamic
   return 1;
@@ -67,27 +67,27 @@
       {
         :async_temporary_0 = self::C::staticField;
         [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
         [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* f = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
         [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
         [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
         [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(3, d);
         :async_temporary_5 = self::C::staticField.{core::num::+}(self::C::staticGetter).{core::num::+}(self::C::staticSetter = 1).{core::num::+}(self::C::staticFoo(1));
         [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_5.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -122,23 +122,23 @@
       {
         :async_temporary_0 = self::globalVariable;
         [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
         [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
         [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
         [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = self::globalVariable.{core::num::+}(self::topLevelGetter).{core::num::+}(self::topLevelSetter = 1).{core::num::+}(self::topLevelFoo(1));
         [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -174,23 +174,23 @@
         self::C* inst = new self::C::•();
         :async_temporary_0 = inst.{self::C::field};
         [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* a = :async_temporary_0.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, a);
         :async_temporary_1 = inst.{self::C::getter};
         [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* b = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
         [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* c = :async_temporary_2.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, c);
         :async_temporary_3 = inst.{self::C::foo}(1);
         [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_3.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, d);
         :async_temporary_4 = inst.{self::C::field}.{core::num::+}(inst.{self::C::getter}).{core::num::+}(inst.{self::C::setter} = 1).{core::num::+}(inst.{self::C::foo}(1));
         [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(5, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -232,17 +232,17 @@
         self::C* c = new self::C::•();
         :async_temporary_1 = c.{self::C::field};
         [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* d = :async_temporary_1.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         core::int* cnt = 2;
         core::List<core::int*>* b = <core::int*>[1, 2, 3];
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
         [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError} core::int*);
+        :async_temporary_3.{core::List::[]=}(:async_temporary_2, :result as{TypeError,ForDynamic} core::int*);
         self::expect(1, b.{core::List::[]}(cnt));
         :async_temporary_4 = b.{core::List::[]}(0);
         [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError} core::num*);
+        core::num* e = :async_temporary_4.{core::num::+}(:result as{TypeError,ForDynamic} core::num*);
         self::expect(2, e);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
@@ -282,7 +282,7 @@
           ;
         else {
           [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = (:result as{TypeError} core::bool*).==(true);
+          :async_temporary_0 = (:result as{TypeError,ForDynamic} core::bool*).==(true);
         }
         core::bool* c = :async_temporary_0;
         self::expect(true, c);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.transformed.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.strong.transformed.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.transformed.expect
index cd1a2ae..657464a 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/bug37476.dart.weak.transformed.expect
@@ -24,14 +24,14 @@
 static field self::B<core::num*>* b = new self::B::•<core::int*>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}() as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}() as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}() as{TypeError} (core::num*) →* void;
+    self::b.{self::B::foo}() as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "Expected TypeError";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.expect
index 92d9353..5c59c15 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.transformed.expect
index 6da0135..441b505 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final core::Object* #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.expect
index 92d9353..5c59c15 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.transformed.expect
index 6da0135..441b505 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/check_deferred_before_args.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError} core::int*;
+  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
   let final core::Object* #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.transformed.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.transformed.expect
index 454a0a4..5e9a421 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/classes.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
 }
 class B extends self::A {
   constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError} core::int*)
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
     ;
   method method() → dynamic {
     core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.expect
index 27979ba..34fc7a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart:8:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.transformed.expect
index 27979ba..34fc7a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.strong.transformed.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart:8:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.expect
index 27979ba..34fc7a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart:8:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.transformed.expect
index 27979ba..34fc7a1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
   constructor •() → self::C2*
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/constructor_initializer_invalid.dart:8:27: Error: This couldn't be parsed.
 class C2 { int f; C2() : f; }
-                          ^" as{TypeError} core::int*, super core::Object::•()
+                          ^" as{TypeError,ForDynamic} core::int*, super core::Object::•()
     ;
 }
 class C3 extends core::Object {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.expect
index f133a9d..3044135 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.expect
@@ -7,19 +7,19 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t1.{core::List::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t1.{core::List::add}(i);
@@ -27,19 +27,19 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t2.{core::Set::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t2.{core::Set::add}(i);
@@ -47,19 +47,19 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t3.{core::Map::[]=}(i, i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(i, i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t3.{core::Map::[]=}(i, i);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.transformed.expect
index ac4ad8d..7bd3d63 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.strong.transformed.expect
@@ -8,14 +8,14 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -28,7 +28,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t1.{core::List::add}(i);
       }
     }
@@ -38,14 +38,14 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -58,7 +58,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t2.{core::Set::add}(i);
       }
     }
@@ -68,14 +68,14 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -88,7 +88,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t3.{core::Map::[]=}(i, i);
       }
     }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.expect
index f133a9d..3044135 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.expect
@@ -7,19 +7,19 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t1.{core::List::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t1.{core::List::add}(i);
@@ -27,19 +27,19 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t2.{core::Set::add}(i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t2.{core::Set::add}(i);
@@ -47,19 +47,19 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     for (core::int* i in <core::int*>[5, 6, 7])
       #t3.{core::Map::[]=}(i, i);
     for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(i, i);
     for (core::int* i = 11; i.{core::num::<=}(14); i = i.{core::num::+}(1))
       #t3.{core::Map::[]=}(i, i);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.transformed.expect
index ac4ad8d..7bd3d63 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection.dart.weak.transformed.expect
@@ -8,14 +8,14 @@
   final core::List<core::int*>* aList = block {
     final core::List<core::int*>* #t1 = <core::int*>[];
     #t1.{core::List::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t1.{core::List::add}(3);
     else
       #t1.{core::List::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t1.{core::List::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -28,7 +28,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t1.{core::List::add}(i);
       }
     }
@@ -38,14 +38,14 @@
   final core::Set<core::int*>* aSet = block {
     final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
     #t2.{core::Set::add}(1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t2.{core::Set::add}(3);
     else
       #t2.{core::Set::add}(1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t2.{core::Set::add}(4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -58,7 +58,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t2.{core::Set::add}(i);
       }
     }
@@ -68,14 +68,14 @@
   final core::Map<core::int*, core::int*>* aMap = block {
     final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
     #t3.{core::Map::[]=}(1, 1);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(2, 2);
-    if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
       #t3.{core::Map::[]=}(3, 3);
     else
       #t3.{core::Map::[]=}(1.{core::int::unary-}(), 1.{core::int::unary-}());
-    if(self::oracle() as{TypeError} core::bool*)
-      if(self::oracle() as{TypeError} core::bool*)
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
         #t3.{core::Map::[]=}(4, 4);
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[5, 6, 7]).{core::Iterable::iterator};
@@ -88,7 +88,7 @@
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[8, 9, 10]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int* i = :sync-for-iterator.{core::Iterator::current};
-        if(self::oracle() as{TypeError} core::bool*)
+        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
           #t3.{core::Map::[]=}(i, i);
       }
     }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.expect
index 384c9be..2c46fb9 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.expect
@@ -443,193 +443,193 @@
 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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);
@@ -639,173 +639,173 @@
                                  ^";
   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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -813,7 +813,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -821,7 +821,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t102 in listInt)
         #t101.{core::List::add}(#t102);
     else
@@ -830,7 +830,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t105 in listInt)
         #t104.{core::Set::add}(#t105);
     else
@@ -840,7 +840,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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
@@ -850,38 +850,38 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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>*)
+      for (final dynamic #t112 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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>*)
+      for (final dynamic #t115 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:73: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>*)
+      for (final dynamic #t117 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else
       for (final core::num* #t119 in listDouble)
@@ -889,7 +889,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t121 in listInt)
         #t120.{core::Set::add}(#t121);
     else
@@ -898,7 +898,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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
@@ -907,33 +907,33 @@
   } =>#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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t128 in dynVar as{TypeError,ForDynamic} 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>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t131 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t132 = #t131 as{TypeError} core::int*;
         #t130.{core::Set::add}(#t132);
       }
@@ -941,8 +941,8 @@
   } =>#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}) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError,ForDynamic} 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);
@@ -951,31 +951,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -983,7 +983,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -991,7 +991,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t147 in <core::int*>[let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*])
@@ -999,7 +999,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t150 in <core::int*>[let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*])
@@ -1008,7 +1008,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t153 in <core::String*, core::int*>{"bar": let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
@@ -1017,7 +1017,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:95: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];
@@ -1025,7 +1025,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:96: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};
@@ -1041,7 +1041,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1052,7 +1052,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1064,7 +1064,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1076,7 +1076,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:101: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];
@@ -1086,7 +1086,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:102: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};
@@ -1104,7 +1104,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1114,7 +1114,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:105: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};
@@ -1171,7 +1171,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1182,7 +1182,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1193,7 +1193,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1204,7 +1204,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1217,380 +1217,380 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1598,8 +1598,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -1607,8 +1607,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t291 in listInt)
           #t290.{core::List::add}(#t291);
       else
@@ -1617,8 +1617,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t294 in listInt)
           #t293.{core::Set::add}(#t294);
       else
@@ -1628,8 +1628,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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
@@ -1639,40 +1639,40 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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>*)
+        for (final dynamic #t301 in dynVar as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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>*)
+        for (final dynamic #t304 in dynVar as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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})
+        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else
         for (final core::num* #t309 in listDouble)
@@ -1680,8 +1680,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t311 in listInt)
           #t310.{core::Set::add}(#t311);
       else
@@ -1690,8 +1690,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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
@@ -1700,33 +1700,33 @@
   } =>#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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t318 in dynVar as{TypeError,ForDynamic} 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>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t321 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t322 = #t321 as{TypeError} core::int*;
         #t320.{core::Set::add}(#t322);
       }
@@ -1734,8 +1734,8 @@
   } =>#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}) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError,ForDynamic} 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);
@@ -1744,17 +1744,17 @@
   } =>#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))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -1776,19 +1776,19 @@
   } =>#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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t336.{core::List::add}(i as{TypeError,ForDynamic} 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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t337.{core::Set::add}(i as{TypeError,ForDynamic} 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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
     #t338.{core::Map::[]=}("baz", null);
   } =>#t338;
   core::List<core::int*>* list130 = block {
@@ -1810,14 +1810,14 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
   } =>#t342;
   block {
     final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -1825,7 +1825,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1837,7 +1837,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t351 in <core::int*>[let final<BottomType> #t352 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1845,7 +1845,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t354 in <core::int*>[let final<BottomType> #t355 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1854,7 +1854,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::int*, core::int*>* #t357 in <core::int*, core::int*>{let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t359 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1867,7 +1867,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:218: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];
@@ -1875,7 +1875,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:219: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};
@@ -1891,8 +1891,8 @@
                                                     ^": 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1903,8 +1903,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1916,8 +1916,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -1929,8 +1929,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:224: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];
@@ -1940,8 +1940,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:225: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};
@@ -1959,8 +1959,8 @@
                                                                      ^": 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t374.{core::List::add}(42);
       else
         #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1970,8 +1970,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t375.{core::Set::add}(42);
       else
         #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.transformed.expect
index 2901fae..dfec04b 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.strong.transformed.expect
@@ -444,58 +444,58 @@
 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t11 = :sync-for-iterator.{core::Iterator::current};
@@ -505,7 +505,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t13 = :sync-for-iterator.{core::Iterator::current};
@@ -516,7 +516,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t15 = :sync-for-iterator.{core::Iterator::current};
@@ -527,7 +527,7 @@
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
@@ -537,7 +537,7 @@
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
@@ -548,7 +548,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t21 = :sync-for-iterator.{core::Iterator::current};
@@ -559,7 +559,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t23 = :sync-for-iterator.{core::Iterator::current};
@@ -569,7 +569,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t25 = :sync-for-iterator.{core::Iterator::current};
@@ -580,7 +580,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 = :sync-for-iterator.{core::Iterator::current};
@@ -591,8 +591,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
@@ -602,8 +602,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t31 = :sync-for-iterator.{core::Iterator::current};
@@ -614,8 +614,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t33 = :sync-for-iterator.{core::Iterator::current};
@@ -626,8 +626,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
@@ -637,8 +637,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t37 = :sync-for-iterator.{core::Iterator::current};
@@ -649,8 +649,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t39 = :sync-for-iterator.{core::Iterator::current};
@@ -661,8 +661,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t41 = :sync-for-iterator.{core::Iterator::current};
@@ -672,8 +672,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t43 = :sync-for-iterator.{core::Iterator::current};
@@ -684,8 +684,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 = :sync-for-iterator.{core::Iterator::current};
@@ -696,7 +696,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
@@ -706,7 +706,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t49 = :sync-for-iterator.{core::Iterator::current};
@@ -720,7 +720,7 @@
                                  ^";
   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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t51 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t52 = #t51.{core::Set::add}(<core::int*>[]) in #t51).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t53 = :sync-for-iterator.{core::Iterator::current};
@@ -730,7 +730,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t55 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t56 = #t55.{core::Set::add}(<core::int*>[]) in #t55).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t57 = :sync-for-iterator.{core::Iterator::current};
@@ -741,8 +741,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
@@ -752,8 +752,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t61 = :sync-for-iterator.{core::Iterator::current};
@@ -764,8 +764,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 = :sync-for-iterator.{core::Iterator::current};
@@ -776,7 +776,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t65 = :sync-for-iterator.{core::Iterator::current};
@@ -786,7 +786,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t67 = :sync-for-iterator.{core::Iterator::current};
@@ -797,7 +797,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current};
@@ -808,7 +808,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t71 = col::LinkedHashSet::•<core::int*>() in #t71).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t72 = :sync-for-iterator.{core::Iterator::current};
@@ -818,7 +818,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t74 = col::LinkedHashSet::•<core::int*>() in #t74).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t75 = :sync-for-iterator.{core::Iterator::current};
@@ -829,8 +829,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t77 = :sync-for-iterator.{core::Iterator::current};
@@ -840,8 +840,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t79 = :sync-for-iterator.{core::Iterator::current};
@@ -852,8 +852,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t81 = :sync-for-iterator.{core::Iterator::current};
@@ -864,7 +864,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t83 = :sync-for-iterator.{core::Iterator::current};
@@ -874,7 +874,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
@@ -885,7 +885,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 = :sync-for-iterator.{core::Iterator::current};
@@ -896,8 +896,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t89 = :sync-for-iterator.{core::Iterator::current};
@@ -907,8 +907,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t91 = :sync-for-iterator.{core::Iterator::current};
@@ -919,8 +919,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 = :sync-for-iterator.{core::Iterator::current};
@@ -931,38 +931,38 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -970,7 +970,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -978,7 +978,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t102 = :sync-for-iterator.{core::Iterator::current};
@@ -995,7 +995,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t105 = :sync-for-iterator.{core::Iterator::current};
@@ -1013,7 +1013,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t108 = :sync-for-iterator.{core::Iterator::current};
@@ -1031,7 +1031,7 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t111 = :sync-for-iterator.{core::Iterator::current};
@@ -1039,7 +1039,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
         #t110.{core::List::add}(#t112);
@@ -1048,7 +1048,7 @@
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t114 = :sync-for-iterator.{core::Iterator::current};
@@ -1056,7 +1056,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
         #t113.{core::Set::add}(#t115);
@@ -1066,13 +1066,13 @@
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:73: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 {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t117 = :sync-for-iterator.{core::Iterator::current};
         #t116.{core::Set::add}(#t117);
@@ -1082,7 +1082,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else {
       core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -1094,7 +1094,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t121 = :sync-for-iterator.{core::Iterator::current};
@@ -1107,7 +1107,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t123 = :sync-for-iterator.{core::Iterator::current};
@@ -1120,25 +1120,25 @@
   } =>#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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1150,8 +1150,8 @@
   } =>#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*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t131 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1164,8 +1164,8 @@
   } =>#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*) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t134 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1179,31 +1179,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -1211,7 +1211,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -1219,7 +1219,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1231,7 +1231,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1244,7 +1244,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}).{core::Iterable::iterator};
@@ -1257,7 +1257,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:95: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];
@@ -1265,7 +1265,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:96: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};
@@ -1281,7 +1281,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1292,7 +1292,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1304,7 +1304,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1316,7 +1316,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:101: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];
@@ -1326,7 +1326,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:102: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};
@@ -1344,7 +1344,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1354,7 +1354,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:105: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};
@@ -1411,7 +1411,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1422,7 +1422,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1433,7 +1433,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1444,7 +1444,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1457,58 +1457,58 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t198 = :sync-for-iterator.{core::Iterator::current};
@@ -1518,7 +1518,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t200 = :sync-for-iterator.{core::Iterator::current};
@@ -1529,7 +1529,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t202 = :sync-for-iterator.{core::Iterator::current};
@@ -1540,7 +1540,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t204 = :sync-for-iterator.{core::Iterator::current};
@@ -1550,7 +1550,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t206 = :sync-for-iterator.{core::Iterator::current};
@@ -1561,7 +1561,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t208 = :sync-for-iterator.{core::Iterator::current};
@@ -1572,7 +1572,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t210 = :sync-for-iterator.{core::Iterator::current};
@@ -1582,7 +1582,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t212 = :sync-for-iterator.{core::Iterator::current};
@@ -1593,7 +1593,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 = :sync-for-iterator.{core::Iterator::current};
@@ -1604,8 +1604,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t216 = :sync-for-iterator.{core::Iterator::current};
@@ -1615,8 +1615,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t218 = :sync-for-iterator.{core::Iterator::current};
@@ -1627,8 +1627,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t220 = :sync-for-iterator.{core::Iterator::current};
@@ -1639,8 +1639,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t222 = :sync-for-iterator.{core::Iterator::current};
@@ -1650,8 +1650,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t224 = :sync-for-iterator.{core::Iterator::current};
@@ -1662,8 +1662,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current};
@@ -1674,8 +1674,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t228 = :sync-for-iterator.{core::Iterator::current};
@@ -1685,8 +1685,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t230 = :sync-for-iterator.{core::Iterator::current};
@@ -1697,8 +1697,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 = :sync-for-iterator.{core::Iterator::current};
@@ -1709,7 +1709,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t234 = :sync-for-iterator.{core::Iterator::current};
@@ -1719,7 +1719,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t236 = :sync-for-iterator.{core::Iterator::current};
@@ -1730,7 +1730,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 = :sync-for-iterator.{core::Iterator::current};
@@ -1741,7 +1741,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t240 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t241 = #t240.{core::Set::add}(<core::int*>[]) in #t240).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current};
@@ -1751,7 +1751,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t244 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t245 = #t244.{core::Set::add}(<core::int*>[]) in #t244).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t246 = :sync-for-iterator.{core::Iterator::current};
@@ -1762,8 +1762,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t248 = :sync-for-iterator.{core::Iterator::current};
@@ -1773,8 +1773,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t250 = :sync-for-iterator.{core::Iterator::current};
@@ -1785,8 +1785,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 = :sync-for-iterator.{core::Iterator::current};
@@ -1797,7 +1797,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t254 = :sync-for-iterator.{core::Iterator::current};
@@ -1807,7 +1807,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t256 = :sync-for-iterator.{core::Iterator::current};
@@ -1818,7 +1818,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t258 = :sync-for-iterator.{core::Iterator::current};
@@ -1829,7 +1829,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t260 = col::LinkedHashSet::•<core::int*>() in #t260).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t261 = :sync-for-iterator.{core::Iterator::current};
@@ -1839,7 +1839,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t263 = col::LinkedHashSet::•<core::int*>() in #t263).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t264 = :sync-for-iterator.{core::Iterator::current};
@@ -1850,8 +1850,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t266 = :sync-for-iterator.{core::Iterator::current};
@@ -1861,8 +1861,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t268 = :sync-for-iterator.{core::Iterator::current};
@@ -1873,7 +1873,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t270 = :sync-for-iterator.{core::Iterator::current};
@@ -1883,7 +1883,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t272 = :sync-for-iterator.{core::Iterator::current};
@@ -1894,7 +1894,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 = :sync-for-iterator.{core::Iterator::current};
@@ -1905,8 +1905,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t276 = :sync-for-iterator.{core::Iterator::current};
@@ -1916,8 +1916,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t278 = :sync-for-iterator.{core::Iterator::current};
@@ -1928,8 +1928,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 = :sync-for-iterator.{core::Iterator::current};
@@ -1940,53 +1940,53 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1994,8 +1994,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -2003,8 +2003,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t291 = :sync-for-iterator.{core::Iterator::current};
@@ -2021,8 +2021,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t294 = :sync-for-iterator.{core::Iterator::current};
@@ -2040,8 +2040,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t297 = :sync-for-iterator.{core::Iterator::current};
@@ -2059,8 +2059,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t300 = :sync-for-iterator.{core::Iterator::current};
@@ -2068,7 +2068,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t301 = :sync-for-iterator.{core::Iterator::current};
           #t299.{core::List::add}(#t301);
@@ -2077,8 +2077,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t303 = :sync-for-iterator.{core::Iterator::current};
@@ -2086,7 +2086,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t304 = :sync-for-iterator.{core::Iterator::current};
           #t302.{core::Set::add}(#t304);
@@ -2096,8 +2096,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t306 = :sync-for-iterator.{core::Iterator::current};
@@ -2105,7 +2105,7 @@
         }
       }
       else {
-        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t307 = :sync-for-iterator.{core::Iterator::current};
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
@@ -2115,8 +2115,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else {
         core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -2128,8 +2128,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t311 = :sync-for-iterator.{core::Iterator::current};
@@ -2142,8 +2142,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t313 = :sync-for-iterator.{core::Iterator::current};
@@ -2156,25 +2156,25 @@
   } =>#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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t318 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2186,8 +2186,8 @@
   } =>#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)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t321 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2200,8 +2200,8 @@
   } =>#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)) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t324 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2215,17 +2215,17 @@
   } =>#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))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -2263,20 +2263,20 @@
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t336.{core::List::add}(i as{TypeError} core::int*);
+        #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t337.{core::Set::add}(i as{TypeError} core::int*);
+        #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t337.{core::Set::add}(null);
@@ -2284,10 +2284,10 @@
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+        #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t338.{core::Map::[]=}("baz", null);
@@ -2326,14 +2326,14 @@
       {
         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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
         } =>#t342;
         block {
           final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -2341,7 +2341,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2353,7 +2353,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t351 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2365,7 +2365,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t354 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2378,7 +2378,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{let final<BottomType> #t357 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2395,7 +2395,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:218: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];
@@ -2403,7 +2403,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:219: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};
@@ -2419,8 +2419,8 @@
                                                     ^": 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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2431,8 +2431,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2444,8 +2444,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -2457,8 +2457,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:224: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];
@@ -2468,8 +2468,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:225: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};
@@ -2487,8 +2487,8 @@
                                                                      ^": 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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t374.{core::List::add}(42);
             else
               #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -2498,8 +2498,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t375.{core::Set::add}(42);
             else
               #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.expect
index 384c9be..2c46fb9 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.expect
@@ -443,193 +443,193 @@
 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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);
@@ -639,173 +639,173 @@
                                  ^";
   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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -813,7 +813,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -821,7 +821,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t102 in listInt)
         #t101.{core::List::add}(#t102);
     else
@@ -830,7 +830,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t105 in listInt)
         #t104.{core::Set::add}(#t105);
     else
@@ -840,7 +840,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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
@@ -850,38 +850,38 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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>*)
+      for (final dynamic #t112 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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>*)
+      for (final dynamic #t115 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:73: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>*)
+      for (final dynamic #t117 in dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else
       for (final core::num* #t119 in listDouble)
@@ -889,7 +889,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::num* #t121 in listInt)
         #t120.{core::Set::add}(#t121);
     else
@@ -898,7 +898,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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
@@ -907,33 +907,33 @@
   } =>#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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t128 in dynVar as{TypeError,ForDynamic} 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>*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t131 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t132 = #t131 as{TypeError} core::int*;
         #t130.{core::Set::add}(#t132);
       }
@@ -941,8 +941,8 @@
   } =>#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}) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<dynamic, dynamic>* #t134 in (dynVar as{TypeError,ForDynamic} 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);
@@ -951,31 +951,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -983,7 +983,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -991,7 +991,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t147 in <core::int*>[let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*])
@@ -999,7 +999,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::int* #t150 in <core::int*>[let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*])
@@ -1008,7 +1008,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       for (final core::MapEntry<core::String*, core::int*>* #t153 in <core::String*, core::int*>{"bar": let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries})
@@ -1017,7 +1017,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:95: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];
@@ -1025,7 +1025,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:96: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};
@@ -1041,7 +1041,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1052,7 +1052,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1064,7 +1064,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1076,7 +1076,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:101: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];
@@ -1086,7 +1086,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:102: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};
@@ -1104,7 +1104,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1114,7 +1114,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:105: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};
@@ -1171,7 +1171,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1182,7 +1182,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1193,7 +1193,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1204,7 +1204,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1217,380 +1217,380 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1598,8 +1598,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -1607,8 +1607,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t291 in listInt)
           #t290.{core::List::add}(#t291);
       else
@@ -1617,8 +1617,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t294 in listInt)
           #t293.{core::Set::add}(#t294);
       else
@@ -1628,8 +1628,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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
@@ -1639,40 +1639,40 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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>*)
+        for (final dynamic #t301 in dynVar as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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>*)
+        for (final dynamic #t304 in dynVar as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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})
+        for (final core::MapEntry<dynamic, dynamic>* #t307 in (dynVar as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else
         for (final core::num* #t309 in listDouble)
@@ -1680,8 +1680,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         for (final core::num* #t311 in listInt)
           #t310.{core::Set::add}(#t311);
       else
@@ -1690,8 +1690,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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
@@ -1700,33 +1700,33 @@
   } =>#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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t318 in dynVar as{TypeError,ForDynamic} 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>*) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final dynamic #t321 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         final core::int* #t322 = #t321 as{TypeError} core::int*;
         #t320.{core::Set::add}(#t322);
       }
@@ -1734,8 +1734,8 @@
   } =>#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}) {
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      for (final core::MapEntry<dynamic, dynamic>* #t324 in (dynVar as{TypeError,ForDynamic} 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);
@@ -1744,17 +1744,17 @@
   } =>#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))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -1776,19 +1776,19 @@
   } =>#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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t336.{core::List::add}(i as{TypeError,ForDynamic} 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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t337.{core::Set::add}(i as{TypeError,ForDynamic} 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*);
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
     #t338.{core::Map::[]=}("baz", null);
   } =>#t338;
   core::List<core::int*>* list130 = block {
@@ -1810,14 +1810,14 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
   } =>#t342;
   block {
     final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -1825,7 +1825,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1837,7 +1837,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t351 in <core::int*>[let final<BottomType> #t352 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1845,7 +1845,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::int* #t354 in <core::int*>[let final<BottomType> #t355 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*])
@@ -1854,7 +1854,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       for (final core::MapEntry<core::int*, core::int*>* #t357 in <core::int*, core::int*>{let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t359 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -1867,7 +1867,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:218: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];
@@ -1875,7 +1875,7 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
       #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:219: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};
@@ -1891,8 +1891,8 @@
                                                     ^": 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1903,8 +1903,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -1916,8 +1916,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -1929,8 +1929,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:224: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];
@@ -1940,8 +1940,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:225: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};
@@ -1959,8 +1959,8 @@
                                                                      ^": 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t374.{core::List::add}(42);
       else
         #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1970,8 +1970,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t375.{core::Set::add}(42);
       else
         #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.transformed.expect
index 2901fae..dfec04b 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart.weak.transformed.expect
@@ -444,58 +444,58 @@
 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t11 = :sync-for-iterator.{core::Iterator::current};
@@ -505,7 +505,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t13 = :sync-for-iterator.{core::Iterator::current};
@@ -516,7 +516,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t15 = :sync-for-iterator.{core::Iterator::current};
@@ -527,7 +527,7 @@
   } =>#t14;
   core::List<dynamic>* list21 = block {
     final core::List<dynamic>* #t16 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t17 = :sync-for-iterator.{core::Iterator::current};
@@ -537,7 +537,7 @@
   } =>#t16;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t18 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
@@ -548,7 +548,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t21 = :sync-for-iterator.{core::Iterator::current};
@@ -559,7 +559,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t23 = :sync-for-iterator.{core::Iterator::current};
@@ -569,7 +569,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t25 = :sync-for-iterator.{core::Iterator::current};
@@ -580,7 +580,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t27 = :sync-for-iterator.{core::Iterator::current};
@@ -591,8 +591,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t29 = :sync-for-iterator.{core::Iterator::current};
@@ -602,8 +602,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t31 = :sync-for-iterator.{core::Iterator::current};
@@ -614,8 +614,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t33 = :sync-for-iterator.{core::Iterator::current};
@@ -626,8 +626,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t35 = :sync-for-iterator.{core::Iterator::current};
@@ -637,8 +637,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t37 = :sync-for-iterator.{core::Iterator::current};
@@ -649,8 +649,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t39 = :sync-for-iterator.{core::Iterator::current};
@@ -661,8 +661,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t41 = :sync-for-iterator.{core::Iterator::current};
@@ -672,8 +672,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t43 = :sync-for-iterator.{core::Iterator::current};
@@ -684,8 +684,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t45 = :sync-for-iterator.{core::Iterator::current};
@@ -696,7 +696,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t47 = :sync-for-iterator.{core::Iterator::current};
@@ -706,7 +706,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t49 = :sync-for-iterator.{core::Iterator::current};
@@ -720,7 +720,7 @@
                                  ^";
   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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t51 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t52 = #t51.{core::Set::add}(<core::int*>[]) in #t51).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t53 = :sync-for-iterator.{core::Iterator::current};
@@ -730,7 +730,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t55 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t56 = #t55.{core::Set::add}(<core::int*>[]) in #t55).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t57 = :sync-for-iterator.{core::Iterator::current};
@@ -741,8 +741,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t59 = :sync-for-iterator.{core::Iterator::current};
@@ -752,8 +752,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t61 = :sync-for-iterator.{core::Iterator::current};
@@ -764,8 +764,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 = :sync-for-iterator.{core::Iterator::current};
@@ -776,7 +776,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t65 = :sync-for-iterator.{core::Iterator::current};
@@ -786,7 +786,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t67 = :sync-for-iterator.{core::Iterator::current};
@@ -797,7 +797,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t69 = :sync-for-iterator.{core::Iterator::current};
@@ -808,7 +808,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t71 = col::LinkedHashSet::•<core::int*>() in #t71).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t72 = :sync-for-iterator.{core::Iterator::current};
@@ -818,7 +818,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t74 = col::LinkedHashSet::•<core::int*>() in #t74).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t75 = :sync-for-iterator.{core::Iterator::current};
@@ -829,8 +829,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t77 = :sync-for-iterator.{core::Iterator::current};
@@ -840,8 +840,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t79 = :sync-for-iterator.{core::Iterator::current};
@@ -852,8 +852,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t81 = :sync-for-iterator.{core::Iterator::current};
@@ -864,7 +864,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t83 = :sync-for-iterator.{core::Iterator::current};
@@ -874,7 +874,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t85 = :sync-for-iterator.{core::Iterator::current};
@@ -885,7 +885,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t87 = :sync-for-iterator.{core::Iterator::current};
@@ -896,8 +896,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t89 = :sync-for-iterator.{core::Iterator::current};
@@ -907,8 +907,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t91 = :sync-for-iterator.{core::Iterator::current};
@@ -919,8 +919,8 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t93 = :sync-for-iterator.{core::Iterator::current};
@@ -931,38 +931,38 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t99.{core::Set::add}(42);
     else
       #t99.{core::Set::add}(3.14);
@@ -970,7 +970,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t100.{core::Map::[]=}("bar", 42);
     else
       #t100.{core::Map::[]=}("bar", 3.14);
@@ -978,7 +978,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t102 = :sync-for-iterator.{core::Iterator::current};
@@ -995,7 +995,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t105 = :sync-for-iterator.{core::Iterator::current};
@@ -1013,7 +1013,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t108 = :sync-for-iterator.{core::Iterator::current};
@@ -1031,7 +1031,7 @@
   } =>#t107;
   core::List<dynamic>* list82 = block {
     final core::List<dynamic>* #t110 = <dynamic>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t111 = :sync-for-iterator.{core::Iterator::current};
@@ -1039,7 +1039,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t112 = :sync-for-iterator.{core::Iterator::current};
         #t110.{core::List::add}(#t112);
@@ -1048,7 +1048,7 @@
   } =>#t110;
   core::Set<dynamic>* set82 = block {
     final core::Set<dynamic>* #t113 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t114 = :sync-for-iterator.{core::Iterator::current};
@@ -1056,7 +1056,7 @@
       }
     }
     else {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t115 = :sync-for-iterator.{core::Iterator::current};
         #t113.{core::Set::add}(#t115);
@@ -1066,13 +1066,13 @@
   } =>#t113;
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t116 = col::LinkedHashSet::•<dynamic>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t116.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:73: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 {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t117 = :sync-for-iterator.{core::Iterator::current};
         #t116.{core::Set::add}(#t117);
@@ -1082,7 +1082,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t118.{core::List::add}(42);
     else {
       core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -1094,7 +1094,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::num* #t121 = :sync-for-iterator.{core::Iterator::current};
@@ -1107,7 +1107,7 @@
   } =>#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*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapToInt.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::num*>* #t123 = :sync-for-iterator.{core::Iterator::current};
@@ -1120,25 +1120,25 @@
   } =>#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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t124.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t125.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t126.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t128 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1150,8 +1150,8 @@
   } =>#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*) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t131 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1164,8 +1164,8 @@
   } =>#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*) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t134 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -1179,31 +1179,31 @@
   } =>#t133;
   core::List<core::int*>* list100 = block {
     final core::List<core::int*>* #t137 = <core::int*>[];
-    if(dynVar as{TypeError} core::bool*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(dynVar as{TypeError,ForDynamic} 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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t140.{core::List::add}(let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*);
   } =>#t140;
   block {
     final core::Set<core::int*>* #t142 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t142.{core::Set::add}(let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*);
@@ -1211,7 +1211,7 @@
   } =>#t142;
   block {
     final core::Map<core::String*, core::int*>* #t144 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t144.{core::Map::[]=}("bar", let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*);
@@ -1219,7 +1219,7 @@
   } =>#t144;
   block {
     final core::List<core::int*>* #t146 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1231,7 +1231,7 @@
   } =>#t146;
   block {
     final core::Set<core::int*>* #t149 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -1244,7 +1244,7 @@
   } =>#t149;
   block {
     final core::Map<core::String*, core::int*>* #t152 = <core::String*, core::int*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*) {
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}).{core::Iterable::iterator};
@@ -1257,7 +1257,7 @@
   } =>#t152;
   block {
     final core::List<core::int*>* #t155 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t155.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:95: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];
@@ -1265,7 +1265,7 @@
   } =>#t155;
   block {
     final core::Set<core::int*>* #t156 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t156.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:96: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};
@@ -1281,7 +1281,7 @@
                                       ^": null};
   block {
     final core::List<core::String*>* #t157 = <core::String*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t157.{core::List::add}(let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*);
@@ -1292,7 +1292,7 @@
   } =>#t157;
   block {
     final core::Set<core::String*>* #t160 = col::LinkedHashSet::•<core::String*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t160.{core::Set::add}(let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*);
@@ -1304,7 +1304,7 @@
   } =>#t160;
   block {
     final core::Map<core::String*, core::String*>* #t163 = <core::String*, core::String*>{};
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t163.{core::Map::[]=}("bar", let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*);
@@ -1316,7 +1316,7 @@
   } =>#t163;
   block {
     final core::List<core::int*>* #t166 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t166.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:101: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];
@@ -1326,7 +1326,7 @@
   } =>#t166;
   block {
     final core::Set<core::int*>* #t167 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t167.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:102: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};
@@ -1344,7 +1344,7 @@
                                       ^": null};
   block {
     final core::List<core::int*>* #t168 = <core::int*>[];
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t168.{core::List::add}(42);
     else
       #t168.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -1354,7 +1354,7 @@
   } =>#t168;
   block {
     final core::Set<core::int*>* #t169 = col::LinkedHashSet::•<core::int*>();
-    if(self::oracle<core::String*>("foo") as{TypeError} core::bool*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t169.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:105: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};
@@ -1411,7 +1411,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t176.{core::List::add}(let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*);
@@ -1422,7 +1422,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t179.{core::Set::add}(let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*);
@@ -1433,7 +1433,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t182.{core::Map::[]=}(let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42);
@@ -1444,7 +1444,7 @@
   } =>#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*)
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t185.{core::Map::[]=}(42, let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*);
@@ -1457,58 +1457,58 @@
 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t198 = :sync-for-iterator.{core::Iterator::current};
@@ -1518,7 +1518,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t200 = :sync-for-iterator.{core::Iterator::current};
@@ -1529,7 +1529,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t202 = :sync-for-iterator.{core::Iterator::current};
@@ -1540,7 +1540,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t204 = :sync-for-iterator.{core::Iterator::current};
@@ -1550,7 +1550,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t206 = :sync-for-iterator.{core::Iterator::current};
@@ -1561,7 +1561,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, dynamic>* #t208 = :sync-for-iterator.{core::Iterator::current};
@@ -1572,7 +1572,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t210 = :sync-for-iterator.{core::Iterator::current};
@@ -1582,7 +1582,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t212 = :sync-for-iterator.{core::Iterator::current};
@@ -1593,7 +1593,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t214 = :sync-for-iterator.{core::Iterator::current};
@@ -1604,8 +1604,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t216 = :sync-for-iterator.{core::Iterator::current};
@@ -1615,8 +1615,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[42]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t218 = :sync-for-iterator.{core::Iterator::current};
@@ -1627,8 +1627,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{"bar": 42}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::int*>* #t220 = :sync-for-iterator.{core::Iterator::current};
@@ -1639,8 +1639,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t222 = :sync-for-iterator.{core::Iterator::current};
@@ -1650,8 +1650,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(<dynamic>[dynVar]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t224 = :sync-for-iterator.{core::Iterator::current};
@@ -1662,8 +1662,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, dynamic>*>*>(<core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, dynamic>* #t226 = :sync-for-iterator.{core::Iterator::current};
@@ -1674,8 +1674,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t228 = :sync-for-iterator.{core::Iterator::current};
@@ -1685,8 +1685,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[42]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t230 = :sync-for-iterator.{core::Iterator::current};
@@ -1697,8 +1697,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t232 = :sync-for-iterator.{core::Iterator::current};
@@ -1709,7 +1709,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t234 = :sync-for-iterator.{core::Iterator::current};
@@ -1719,7 +1719,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t236 = :sync-for-iterator.{core::Iterator::current};
@@ -1730,7 +1730,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t238 = :sync-for-iterator.{core::Iterator::current};
@@ -1741,7 +1741,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t240 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t241 = #t240.{core::Set::add}(<core::int*>[]) in #t240).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t242 = :sync-for-iterator.{core::Iterator::current};
@@ -1751,7 +1751,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(let final core::Set<core::List<core::int*>*>* #t244 = col::LinkedHashSet::•<core::List<core::int*>*>() in let final core::bool* #t245 = #t244.{core::Set::add}(<core::int*>[]) in #t244).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t246 = :sync-for-iterator.{core::Iterator::current};
@@ -1762,8 +1762,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t248 = :sync-for-iterator.{core::Iterator::current};
@@ -1773,8 +1773,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t250 = :sync-for-iterator.{core::Iterator::current};
@@ -1785,8 +1785,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t252 = :sync-for-iterator.{core::Iterator::current};
@@ -1797,7 +1797,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t254 = :sync-for-iterator.{core::Iterator::current};
@@ -1807,7 +1807,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t256 = :sync-for-iterator.{core::Iterator::current};
@@ -1818,7 +1818,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(<core::String*, core::int*>{}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::int*>* #t258 = :sync-for-iterator.{core::Iterator::current};
@@ -1829,7 +1829,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t260 = col::LinkedHashSet::•<core::int*>() in #t260).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t261 = :sync-for-iterator.{core::Iterator::current};
@@ -1839,7 +1839,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(let final core::Set<core::int*>* #t263 = col::LinkedHashSet::•<core::int*>() in #t263).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::int* #t264 = :sync-for-iterator.{core::Iterator::current};
@@ -1850,8 +1850,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t266 = :sync-for-iterator.{core::Iterator::current};
@@ -1861,8 +1861,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::int* #t268 = :sync-for-iterator.{core::Iterator::current};
@@ -1873,7 +1873,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t270 = :sync-for-iterator.{core::Iterator::current};
@@ -1883,7 +1883,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::List<core::int*>* #t272 = :sync-for-iterator.{core::Iterator::current};
@@ -1894,7 +1894,7 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
       core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<core::String*, core::List<core::int*>*>* #t274 = :sync-for-iterator.{core::Iterator::current};
@@ -1905,8 +1905,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t276 = :sync-for-iterator.{core::Iterator::current};
@@ -1916,8 +1916,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::List<core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::List<core::int*>*>*>(<core::List<core::int*>*>[<core::int*>[]]).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::List<core::int*>* #t278 = :sync-for-iterator.{core::Iterator::current};
@@ -1928,8 +1928,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::List<core::int*>*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>*>*>(<core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::List<core::int*>*>* #t280 = :sync-for-iterator.{core::Iterator::current};
@@ -1940,53 +1940,53 @@
   } =>#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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} 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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t288.{core::Set::add}(42);
       else
         #t288.{core::Set::add}(3.14);
@@ -1994,8 +1994,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t289.{core::Map::[]=}("bar", 42);
       else
         #t289.{core::Map::[]=}("bar", 3.14);
@@ -2003,8 +2003,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t291 = :sync-for-iterator.{core::Iterator::current};
@@ -2021,8 +2021,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t294 = :sync-for-iterator.{core::Iterator::current};
@@ -2040,8 +2040,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t297 = :sync-for-iterator.{core::Iterator::current};
@@ -2059,8 +2059,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t300 = :sync-for-iterator.{core::Iterator::current};
@@ -2068,7 +2068,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t301 = :sync-for-iterator.{core::Iterator::current};
           #t299.{core::List::add}(#t301);
@@ -2077,8 +2077,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t303 = :sync-for-iterator.{core::Iterator::current};
@@ -2086,7 +2086,7 @@
         }
       }
       else {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t304 = :sync-for-iterator.{core::Iterator::current};
           #t302.{core::Set::add}(#t304);
@@ -2096,8 +2096,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t306 = :sync-for-iterator.{core::Iterator::current};
@@ -2105,7 +2105,7 @@
         }
       }
       else {
-        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+        core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<dynamic, dynamic>* #t307 = :sync-for-iterator.{core::Iterator::current};
           #t305.{core::Map::[]=}(#t307.{core::MapEntry::key}, #t307.{core::MapEntry::value});
@@ -2115,8 +2115,8 @@
   } =>#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*)
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t308.{core::List::add}(42);
       else {
         core::Iterator<core::double*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::double*>*>(listDouble).{core::Iterable::iterator};
@@ -2128,8 +2128,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(listInt).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::num* #t311 = :sync-for-iterator.{core::Iterator::current};
@@ -2142,8 +2142,8 @@
   } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*) {
         core::Iterator<core::MapEntry<core::String*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::String*, core::int*>*>*>(mapStringInt.{core::Map::entries}).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final core::MapEntry<core::String*, core::num*>* #t313 = :sync-for-iterator.{core::Iterator::current};
@@ -2156,25 +2156,25 @@
   } =>#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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t314.{core::List::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t315.{core::Set::add}(dynVar as{TypeError,ForDynamic} 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*);
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+      #t316.{core::Map::[]=}("bar", dynVar as{TypeError,ForDynamic} 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)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t318 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2186,8 +2186,8 @@
   } =>#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)) {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t321 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2200,8 +2200,8 @@
   } =>#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)) {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t324 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -2215,17 +2215,17 @@
   } =>#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))
+    for (final core::int* #t328 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t330 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} 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))
+    for (final core::int* #t332 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1))
       #t331.{core::Map::[]=}("bar", 42);
   } =>#t331;
   core::List<core::int*>* list110 = block {
@@ -2263,20 +2263,20 @@
   core::List<core::int*>* list120 = block {
     final core::List<core::int*>* #t336 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t336.{core::List::add}(i as{TypeError} core::int*);
+        #t336.{core::List::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
   } =>#t336;
   core::Set<core::int*>* set120 = block {
     final core::Set<core::int*>* #t337 = col::LinkedHashSet::•<core::int*>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t337.{core::Set::add}(i as{TypeError} core::int*);
+        #t337.{core::Set::add}(i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t337.{core::Set::add}(null);
@@ -2284,10 +2284,10 @@
   core::Map<core::String*, core::int*>* map120 = block {
     final core::Map<core::String*, core::int*>* #t338 = <core::String*, core::int*>{};
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         dynamic i = :sync-for-iterator.{core::Iterator::current};
-        #t338.{core::Map::[]=}("bar", i as{TypeError} core::int*);
+        #t338.{core::Map::[]=}("bar", i as{TypeError,ForDynamic} core::int*);
       }
     }
     #t338.{core::Map::[]=}("baz", null);
@@ -2326,14 +2326,14 @@
       {
         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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t342.{core::List::add}(let final<BottomType> #t343 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*);
         } =>#t342;
         block {
           final core::Set<core::int*>* #t344 = col::LinkedHashSet::•<core::int*>();
-          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError} core::bool*; i = i.{core::num::+}(1))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t344.{core::Set::add}(let final<BottomType> #t345 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*);
@@ -2341,7 +2341,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t346.{core::Map::[]=}(let final<BottomType> #t347 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                  ^" in "bar" as{TypeError} core::int*, let final<BottomType> #t348 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2353,7 +2353,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t351 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2365,7 +2365,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(<core::int*>[let final<BottomType> #t354 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]).{core::Iterable::iterator};
@@ -2378,7 +2378,7 @@
         } =>#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 (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
             core::Iterator<core::MapEntry<core::int*, core::int*>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<core::int*, core::int*>*>*>(<core::int*, core::int*>{let final<BottomType> #t357 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                      ^" in "bar" as{TypeError} core::int*: let final<BottomType> #t358 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
@@ -2395,7 +2395,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t361.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:218: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];
@@ -2403,7 +2403,7 @@
         } =>#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))
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
             #t362.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:219: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};
@@ -2419,8 +2419,8 @@
                                                     ^": 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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t363.{core::List::add}(let final<BottomType> #t364 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2431,8 +2431,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t366.{core::Set::add}(let final<BottomType> #t367 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*);
@@ -2444,8 +2444,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t369.{core::Map::[]=}("bar", let final<BottomType> #t370 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*);
@@ -2457,8 +2457,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t372.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:224: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];
@@ -2468,8 +2468,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t373.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:225: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};
@@ -2487,8 +2487,8 @@
                                                                      ^": 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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t374.{core::List::add}(42);
             else
               #t374.{core::List::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
@@ -2498,8 +2498,8 @@
         } =>#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*)
+          for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1))
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t375.{core::Set::add}(42);
             else
               #t375.{core::Set::add}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.transformed.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.transformed.expect
index d794499..4a73a4f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/covariant_generic.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
   fooNum.{self::Foo::withCallback}((core::num* x) → core::Null? {});
   fooNum.{self::Foo::mutableField} = 3;
   fooNum.{self::Foo::mutableField} = 2.5;
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(3);
-  (fooNum.{self::Foo::mutableCallbackField} as{TypeError} (core::num*) →* void).call(2.5);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(3);
+  (fooNum.{self::Foo::mutableCallbackField} as{TypeError,CovarianceCheck} (core::num*) →* void).call(2.5);
   fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → core::Null? {};
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.expect
index 0b20eef..6c22e73 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:16:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.transformed.expect
index 0b20eef..6c22e73 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.strong.transformed.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:16:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.expect
index 0b20eef..6c22e73 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:16:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.transformed.expect
index 0b20eef..6c22e73 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart.weak.transformed.expect
@@ -59,11 +59,11 @@
       print(\"Hello, World!\") +
       ^" in core::print("Hello, World!")).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:16:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^" as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
+      ^" as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:17:7: Error: Getter not found: 'z'.
       z.print(\"Hello, World!\") +
-      ^".print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
+      ^".print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:18:7: Error: Getter not found: 'y'.
       y.z.print(\"Hello, World!\") +
-      ^".z.print("Hello, World!") as{TypeError} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
+      ^".z.print("Hello, World!") as{TypeError,ForDynamic} core::num*).{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invocations.dart:19:7: Error: Getter not found: 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^".y.z.print("Hello, World!") as{TypeError} core::num*);
+      ^".y.z.print("Hello, World!") as{TypeError,ForDynamic} core::num*);
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.expect
index d3cbeba..d362108 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.transformed.expect
index d3cbeba..d362108 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.expect
index d3cbeba..d362108 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.transformed.expect
index d3cbeba..d362108 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/issue39344.dart.weak.transformed.expect
@@ -56,7 +56,7 @@
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       alias = ys;
-      self::xs = alias as{TypeError} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
   method method2b(generic-covariant-impl self::Class::T* t) → void {
@@ -64,7 +64,7 @@
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       alias = yss;
-      self::xss = alias as{TypeError} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
index a68bf96..98ba00e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
index a68bf96..98ba00e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
index a68bf96..98ba00e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
index a68bf96..98ba00e 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
@@ -67,7 +67,7 @@
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" as{TypeError} self::EmptyClass*;
+                                               ^" as{TypeError,ForDynamic} self::EmptyClass*;
 static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '[]'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.expect
index cca2f0d..ea78a78 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:49:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:54:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.transformed.expect
index cca2f0d..ea78a78 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.strong.transformed.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:49:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:54:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.expect
index cca2f0d..ea78a78 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:49:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:54:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.transformed.expect
index cca2f0d..ea78a78 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart.weak.transformed.expect
@@ -127,7 +127,7 @@
   {
     self::V* V = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:49:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
-      ^" as{TypeError} self::V*;
+      ^" as{TypeError,ForDynamic} self::V*;
   }
   {
     <T extends core::Object* = dynamic>() →* core::Null? x = let final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/named_function_scope.dart:54:13: Error: 'T' is already declared in this scope.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.outline.expect
index ea56f3e..fa9a400 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.outline.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::Foo*
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.transformed.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.transformed.expect
index 3fa5d56..b80b9e5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/no_such_method_private_setter.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
     : super core::Object::•()
     ;
   no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
     return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.transformed.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.strong.transformed.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.transformed.expect
index 17ac3e7..6116ad1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/non_covariant_checks.dart.weak.transformed.expect
@@ -147,14 +147,14 @@
   c.{self::C::field1};
   c.{self::C::field2};
   try {
-    c.{self::C::field3} as{TypeError} (core::num*) →* void;
+    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -162,14 +162,14 @@
   }
   c.{self::C::field5};
   try {
-    c.{self::C::field6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -178,42 +178,42 @@
   c.{self::C::field8};
   c.{self::C::field9};
   try {
-    c.{self::C::field10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -222,14 +222,14 @@
   c.{self::C::getter1};
   c.{self::C::getter2};
   try {
-    c.{self::C::getter3} as{TypeError} (core::num*) →* void;
+    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4} as{TypeError} (core::num*) →* core::num*;
+    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -237,14 +237,14 @@
   }
   c.{self::C::getter5};
   try {
-    c.{self::C::getter6} as{TypeError} (() →* core::num*) →* void;
+    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7} as{TypeError} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
@@ -253,42 +253,42 @@
   c.{self::C::getter8};
   c.{self::C::getter9};
   try {
-    c.{self::C::getter10} as{TypeError} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11} as{TypeError} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12} as{TypeError} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13} as{TypeError} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14} as{TypeError} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15} as{TypeError} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
     throw "TypeError expected";
   }
   on core::TypeError* catch(final core::TypeError* e) {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.expect
index 18203ab..5d3f769 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.expect
@@ -10,8 +10,8 @@
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError} core::Iterable<dynamic>*) {
-      self::Class* c = #t1 as{TypeError} self::Class*;
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.transformed.expect
index f6157cd7..eb4e616 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.strong.transformed.expect
@@ -12,11 +12,11 @@
   dynamic o;
   if(false) {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
-          self::Class* c = #t2 as{TypeError} self::Class*;
+          self::Class* c = #t2 as{TypeError,ForDynamic} self::Class*;
         }
       }
     }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.expect
index 18203ab..5d3f769 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.expect
@@ -10,8 +10,8 @@
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError} core::Iterable<dynamic>*) {
-      self::Class* c = #t1 as{TypeError} self::Class*;
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2.{core::Object::==}(null) ?{dynamic} null : #t2.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.transformed.expect
index f6157cd7..eb4e616 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/null_aware_for_in.dart.weak.transformed.expect
@@ -12,11 +12,11 @@
   dynamic o;
   if(false) {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((let final dynamic #t1 = o in #t1.{core::Object::==}(null) ?{dynamic} null : #t1.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
-          self::Class* c = #t2 as{TypeError} self::Class*;
+          self::Class* c = #t2 as{TypeError,ForDynamic} self::Class*;
         }
       }
     }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.expect
index 18814f3..4bfac34f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.transformed.expect
index 18814f3..4bfac34f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.expect
index 18814f3..4bfac34f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.transformed.expect
index 18814f3..4bfac34f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/return_with_unknown_type_in_context.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f(core::List<dynamic>* x) → core::bool* {
   return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y.split(",") as{TypeError} core::Iterable<dynamic>*;
+    return y.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
   }).{core::Iterable::any}((dynamic y) → core::bool* => y.{core::Object::==}("z"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.expect
index cfeeadc..5ff3546 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.expect
@@ -160,18 +160,18 @@
   } =>#t18;
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
-    for (final dynamic #t21 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t21 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t20.{core::List::add}(#t21);
   } =>#t20;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
-    for (final dynamic #t23 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t23 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t22.{core::Set::add}(#t23);
     #t22.{core::Set::add}(42);
   } =>#t22;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
       #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
     #t24.{core::Map::[]=}("baz", 42);
   } =>#t24;
@@ -377,14 +377,14 @@
   } =>#t91;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
-    for (final dynamic #t96 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t96 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t97 = #t96 as{TypeError} core::int*;
       #t95.{core::List::add}(#t97);
     }
   } =>#t95;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
       final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
       final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
       #t98.{core::Map::[]=}(#t100, #t101);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.transformed.expect
index 1cfb2b0..db8baa1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.strong.transformed.expect
@@ -208,7 +208,7 @@
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         #t20.{core::List::add}(#t21);
@@ -218,7 +218,7 @@
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         #t22.{core::Set::add}(#t23);
@@ -229,7 +229,7 @@
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t25 = :sync-for-iterator.{core::Iterator::current};
         #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
@@ -554,7 +554,7 @@
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -567,7 +567,7 @@
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t99 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.expect
index cfeeadc..5ff3546 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.expect
@@ -160,18 +160,18 @@
   } =>#t18;
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
-    for (final dynamic #t21 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t21 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t20.{core::List::add}(#t21);
   } =>#t20;
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
-    for (final dynamic #t23 in (spread as dynamic) as{TypeError} core::Iterable<dynamic>*)
+    for (final dynamic #t23 in (spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*)
       #t22.{core::Set::add}(#t23);
     #t22.{core::Set::add}(42);
   } =>#t22;
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries})
+    for (final core::MapEntry<dynamic, dynamic>* #t25 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries})
       #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
     #t24.{core::Map::[]=}("baz", 42);
   } =>#t24;
@@ -377,14 +377,14 @@
   } =>#t91;
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
-    for (final dynamic #t96 in dynVar as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t96 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       final core::int* #t97 = #t96 as{TypeError} core::int*;
       #t95.{core::List::add}(#t97);
     }
   } =>#t95;
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
-    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
+    for (final core::MapEntry<dynamic, dynamic>* #t99 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}) {
       final core::num* #t100 = #t99.{core::MapEntry::key} as{TypeError} core::num*;
       final core::int* #t101 = #t99.{core::MapEntry::value} as{TypeError} core::int*;
       #t98.{core::Map::[]=}(#t100, #t101);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.transformed.expect
index 1cfb2b0..db8baa1 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/spread_collection_inference.dart.weak.transformed.expect
@@ -208,7 +208,7 @@
   core::List<dynamic>* lhs21 = block {
     final core::List<dynamic>* #t20 = <dynamic>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         #t20.{core::List::add}(#t21);
@@ -218,7 +218,7 @@
   core::Set<dynamic>* set21 = block {
     final core::Set<dynamic>* #t22 = col::LinkedHashSet::•<dynamic>();
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t23 = :sync-for-iterator.{core::Iterator::current};
         #t22.{core::Set::add}(#t23);
@@ -229,7 +229,7 @@
   core::Map<dynamic, dynamic>* map21 = block {
     final core::Map<dynamic, dynamic>* #t24 = <dynamic, dynamic>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>(((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t25 = :sync-for-iterator.{core::Iterator::current};
         #t24.{core::Map::[]=}(#t25.{core::MapEntry::key}, #t25.{core::MapEntry::value});
@@ -554,7 +554,7 @@
   core::List<core::int*>* list110 = block {
     final core::List<core::int*>* #t95 = <core::int*>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t96 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -567,7 +567,7 @@
   core::Map<core::num*, core::int*>* map110 = block {
     final core::Map<core::num*, core::int*>* #t98 = <core::num*, core::int*>{};
     {
-      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
+      core::Iterator<core::MapEntry<dynamic, dynamic>*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::MapEntry<dynamic, dynamic>*>*>((dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final core::MapEntry<dynamic, dynamic>* #t99 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.expect
index 42e644b..688bc83 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.transformed.expect
index 42e644b..688bc83 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.expect
index 42e644b..688bc83 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.transformed.expect
index 42e644b..688bc83 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
     return invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/super_call.dart:17:12: Error: Can't use 'super' as an expression.
 To delegate a constructor to a super constructor, put the super call as an initializer.
     return super(5);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.outline.expect
index 2da773b..4f2eabf 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.transformed.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.transformed.expect
index 69a6257..f804c1f 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/super_nsm.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return "C";
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 class D extends self::C {
   synthetic constructor •() → self::D*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.strong.expect
index 8e4c18f..ae89f63 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.strong.expect
@@ -31,7 +31,7 @@
     return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart:24:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" as{TypeError} core::num*);
+                                   ^^^^^^" as{TypeError,ForDynamic} core::num*);
 }
 static method main() → dynamic {
   new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.expect
index 8e4c18f..ae89f63 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.expect
@@ -31,7 +31,7 @@
     return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart:24:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" as{TypeError} core::num*);
+                                   ^^^^^^" as{TypeError,ForDynamic} core::num*);
 }
 static method main() → dynamic {
   new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.expect
index 3bde972..c503392 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.transformed.expect
index 9f36d60..739251d 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.expect
index 3bde972..c503392 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.transformed.expect
index 9f36d60..739251d 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/void_methods.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   set first(dynamic x) → void
     return let final core::List<dynamic>* #t1 = this.{self::Foo::list} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3) in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7) in #t7;
   method clear() → void
     return this.{self::Foo::list}.{core::List::clear}();
 }
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.1.expect
index 5b6d98f..e1e5ded 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.1.expect
@@ -23,7 +23,7 @@
       dart.core::print("noSouchMethod!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
       return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
@@ -37,9 +37,9 @@
       dart.core::print("noSouchMethod!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ field() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
       return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.2.expect
index 11a8f3e..1b65ff5 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_16.yaml.world.2.expect
@@ -23,7 +23,7 @@
       dart.core::print("noSouchMethod!!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
       return this.{main::Foo1::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
@@ -37,9 +37,9 @@
       dart.core::print("noSouchMethod!!");
     }
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ getter() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder get /* from org-dartlang-test:///lib1.dart */ field() → dart.core::bool*
-      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError} dart.core::bool*;
+      return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dart.core::bool*;
     no-such-method-forwarder method /* from org-dartlang-test:///lib1.dart */ method() → void
       return this.{main::Foo2::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4)));
     no-such-method-forwarder set /* from org-dartlang-test:///lib1.dart */ setter(dart.core::bool* b) → void
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
index 6d4a7d3..faa6a66 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
@@ -284,7 +284,7 @@
       dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →* dart.core::int* #t7 = compare in #t7.{dart.core::Object::==}(null) ?{(dart.core::int*, dart.core::int*) →* dart.core::int*} #C6 : #t7);
     }
     static method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int* {
-      return dart.core::Comparable::compare(a as{TypeError} dart.core::Comparable<dynamic>*, b as{TypeError} dart.core::Comparable<dynamic>*);
+      return dart.core::Comparable::compare(a as{TypeError,ForDynamic} dart.core::Comparable<dynamic>*, b as{TypeError,ForDynamic} dart.core::Comparable<dynamic>*);
     }
     method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random* random = #C2]) → void {
       random.{dart.core::Object::==}(null) ?{dart.math::Random*} random = dart.math::Random::•() : null;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
index 6d4a7d3..faa6a66 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
@@ -284,7 +284,7 @@
       dart._internal::Sort::sort<dart.core::int*>(this, let final (dart.core::int*, dart.core::int*) →* dart.core::int* #t7 = compare in #t7.{dart.core::Object::==}(null) ?{(dart.core::int*, dart.core::int*) →* dart.core::int*} #C6 : #t7);
     }
     static method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ _compareAny(dynamic a, dynamic b) → dart.core::int* {
-      return dart.core::Comparable::compare(a as{TypeError} dart.core::Comparable<dynamic>*, b as{TypeError} dart.core::Comparable<dynamic>*);
+      return dart.core::Comparable::compare(a as{TypeError,ForDynamic} dart.core::Comparable<dynamic>*, b as{TypeError,ForDynamic} dart.core::Comparable<dynamic>*);
     }
     method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ shuffle([dart.math::Random* random = #C2]) → void {
       random.{dart.core::Object::==}(null) ?{dart.math::Random*} random = dart.math::Random::•() : null;
diff --git a/pkg/front_end/testcases/inference/bug33324.dart.strong.expect b/pkg/front_end/testcases/inference/bug33324.dart.strong.expect
index b1e4298..74b0bb6 100644
--- a/pkg/front_end/testcases/inference/bug33324.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/bug33324.dart.strong.expect
@@ -6,6 +6,6 @@
   core::Function* f = (dynamic x) → dynamic => x;
   core::List<dynamic>* l = <core::String*>["bar"].{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic).{core::Iterable::toList}();
   l.{core::List::add}(42);
-  return l.{core::Iterable::first}.length as{TypeError} core::int*;
+  return l.{core::Iterable::first}.length as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug33324.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/bug33324.dart.strong.transformed.expect
index b1e4298..74b0bb6 100644
--- a/pkg/front_end/testcases/inference/bug33324.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/bug33324.dart.strong.transformed.expect
@@ -6,6 +6,6 @@
   core::Function* f = (dynamic x) → dynamic => x;
   core::List<dynamic>* l = <core::String*>["bar"].{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic).{core::Iterable::toList}();
   l.{core::List::add}(42);
-  return l.{core::Iterable::first}.length as{TypeError} core::int*;
+  return l.{core::Iterable::first}.length as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
index 38a8a35..e095535 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
@@ -27,8 +27,8 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
index 88d238f..c7d6e17 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.expect
@@ -21,8 +21,8 @@
 static method f() → dynamic {
   core::num* x;
   dynamic y;
-  core::num* a = math::max<core::num*>(x, y as{TypeError} core::num*);
-  core::Object* b = math::max<core::num*>(x, y as{TypeError} core::num*);
+  core::num* a = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
+  core::Object* b = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
   dynamic c = math::max<dynamic>(x, y);
   dynamic d = math::max<dynamic>(x, y);
 }
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
index 88d238f..c7d6e17 100644
--- a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.strong.transformed.expect
@@ -21,8 +21,8 @@
 static method f() → dynamic {
   core::num* x;
   dynamic y;
-  core::num* a = math::max<core::num*>(x, y as{TypeError} core::num*);
-  core::Object* b = math::max<core::num*>(x, y as{TypeError} core::num*);
+  core::num* a = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
+  core::Object* b = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
   dynamic c = math::max<dynamic>(x, y);
   dynamic d = math::max<dynamic>(x, y);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.expect
index 360f7c7..1a5ac1a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.expect
@@ -7,6 +7,6 @@
 
 static method main() → asy::Future<dynamic>* async {
   dynamic d;
-  core::List<core::int*>* l0 = await<core::int*>[d as{TypeError} core::int*];
-  core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError} core::int*]);
+  core::List<core::int*>* l0 = await<core::int*>[d as{TypeError,ForDynamic} core::int*];
+  core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError,ForDynamic} core::int*]);
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.transformed.expect
index 947d113..92361c9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.strong.transformed.expect
@@ -20,9 +20,9 @@
       #L1:
       {
         dynamic d;
-        [yield] let dynamic #t1 = asy::_awaitHelper(<core::int*>[d as{TypeError} core::int*], :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t1 = asy::_awaitHelper(<core::int*>[d as{TypeError,ForDynamic} core::int*], :async_op_then, :async_op_error, :async_op) in null;
         core::List<core::int*>* l0 = _in::unsafeCast<core::List<core::int*>*>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError} core::int*]), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError,ForDynamic} core::int*]), :async_op_then, :async_op_error, :async_op) in null;
         core::List<core::int*>* l1 = _in::unsafeCast<core::List<core::int*>*>(:result);
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
index e52fb83..55385e0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
@@ -110,7 +110,7 @@
     (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
-             ^^^^^^^^^" as{TypeError} core::String*;
+             ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
index e52fb83..55385e0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
@@ -110,7 +110,7 @@
     (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
-             ^^^^^^^^^" as{TypeError} core::String*;
+             ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
index 40d578f..ee90542 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
@@ -126,7 +126,7 @@
     y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
-         ^^^^^^^^^" as{TypeError} core::String*;
+         ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
     z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3);
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
index 40d578f..ee90542 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
@@ -126,7 +126,7 @@
     y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
-         ^^^^^^^^^" as{TypeError} core::String*;
+         ^^^^^^^^^" as{TypeError,ForDynamic} core::String*;
     <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
     z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3);
   }
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect
index 34a20de..93ecd39 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.expect
@@ -11,10 +11,10 @@
   }
   core::int* y;
   for (final dynamic #t1 in o as{TypeError} core::Iterable<dynamic>*) {
-    y = #t1 as{TypeError} core::int*;
+    y = #t1 as{TypeError,ForDynamic} core::int*;
   }
   await for (final dynamic #t2 in o as{TypeError} asy::Stream<dynamic>*) {
-    y = #t2 as{TypeError} core::int*;
+    y = #t2 as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
index 6d20b98..2bc7b4c 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
             {
-              y = #t4 as{TypeError} core::int*;
+              y = #t4 as{TypeError,ForDynamic} core::int*;
             }
           }
         }
@@ -72,7 +72,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t7 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  y = #t7 as{TypeError} core::int*;
+                  y = #t7 as{TypeError,ForDynamic} core::int*;
                 }
               }
               else
diff --git a/pkg/front_end/testcases/inference/future_then.dart.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.expect
index 65247cd..c72502ef 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
index 8aa7e82..48ef203 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
index ae490fd762..7a95932 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
index 1e87f8a..a340d04 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
index 680db32..21c7bf4 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
index df9aa51..61dc898 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
index 0bfc7d0..f6f2fe5 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
index c349f97..36e80aa 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
index 0fc40e9..41e6861 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
index 1afc871..9d8eb63 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
index e7dfa46..de57433 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
index 9731f3b..9efbea1 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
index 1ce4d6d..741316a 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
index 5abd329..c53bad4 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
index f386e01..c1241f0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
index 852ab83..20f8e91 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
index 6d642c1..e223058 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
index 56e7a58..2be73df 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
index 37b74ef..c8a5337 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
index 8009681..ab579f5 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
index 28e6554..4e1ca61 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
index 9cda589..f68b46e 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
index da92218..b54dfc2 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
index 50485af..a7f2f7a 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
index 20ff134..723a215 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
index 0bec8e6..87b52ee 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
index 760de92..9d9e7dc 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
index c40bb55..d16cbdf 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index 3865a9a..3766778 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -24,13 +24,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
index 3865a9a..3766778 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
@@ -24,13 +24,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
index c40bb55..d16cbdf 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index ebacc67..a855441 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
index ebacc67..a855441 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method main() → void {
   self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
index f2d1f87..f7cb495 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index e7c7bc4..ddb7194 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
index e7c7bc4..ddb7194 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method test() → void {
   asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3);
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
index a8a37bc..ee3138c 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>*
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
index 5b4785c..6f320ff 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async {
   return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} asy::FutureOr<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
index 4f29e0f..0c1809a 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.strong.transformed.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
   final asy::_AsyncAwaitCompleter<core::int*>* :async_completer = new asy::_AsyncAwaitCompleter::•<core::int*>();
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
index a8a37bc..ee3138c 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>*
   ;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
index e226a22..3bcd4ca 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async {
   return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} asy::FutureOr<core::int*>*;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
index 46ac20c..1812257 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.strong.transformed.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
   final asy::_AsyncAwaitCompleter<core::int*>* :async_completer = new asy::_AsyncAwaitCompleter::•<core::int*>();
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
index 1fefba5..9065bcf 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index 8c541ca..b1f9997 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
index 2819009..829fcb3 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
index 1fefba5..9065bcf 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
index 7b7bf16..2b84966 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
index e4688e7..a99851d 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
index 239aaa9..ff2fae926 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index a309a4b..125547e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
index daeed90..585b9a59 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
@@ -23,13 +23,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
index 239aaa9..ff2fae926 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.outline.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError}) → self::MyFuture<self::MyFuture::then::S*>*
     ;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
index 44c27d7..e4e496c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
index 7bd9b40..7448b01 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
@@ -15,13 +15,13 @@
   method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* asy::FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
     return null;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() →* asy::FutureOr<dynamic>* action) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration* timeLimit, {generic-covariant-impl () →* asy::FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError} asy::Future<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::MyFuture::T*>*
-    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError} asy::Stream<self::MyFuture::T*>*;
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi"));
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
index 4bc55c2..b4da5d7 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
@@ -39,6 +39,6 @@
     return x;
 }
 static method main() → dynamic {
-  core::int* y = new self::D::•().{self::D::m}<core::int*>(42) as{TypeError} core::int*;
+  core::int* y = new self::D::•().{self::D::m}<core::int*>(42) as{TypeError,ForDynamic} core::int*;
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.expect
index 7eb5d33..dcb7d1d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.expect
@@ -6,12 +6,12 @@
   core::List<core::int*>* o;
   core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
   dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
-  y = z as{TypeError} core::int*;
+  y = z as{TypeError,ForDynamic} core::int*;
 }
 static method functionExpressionInvocation() → void {
   core::List<core::int*>* o;
   core::int* y = o.{core::Iterable::fold}.call<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
   dynamic z = o.{core::Iterable::fold}.call<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
-  y = z as{TypeError} core::int*;
+  y = z as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.transformed.expect
index 7eb5d33..dcb7d1d 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.strong.transformed.expect
@@ -6,12 +6,12 @@
   core::List<core::int*>* o;
   core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
   dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
-  y = z as{TypeError} core::int*;
+  y = z as{TypeError,ForDynamic} core::int*;
 }
 static method functionExpressionInvocation() → void {
   core::List<core::int*>* o;
   core::int* y = o.{core::Iterable::fold}.call<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
   dynamic z = o.{core::Iterable::fold}.call<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
-  y = z as{TypeError} core::int*;
+  y = z as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
index dffe5df..1988b92 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
@@ -54,6 +54,6 @@
     return x;
 }
 static method main() → dynamic {
-  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42) as{TypeError} core::int*;
+  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42) as{TypeError,ForDynamic} core::int*;
   core::print(y);
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
index 7967409..05abfab 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
@@ -28,7 +28,7 @@
  - 'FutureOr' is from 'dart:async'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" as{TypeError} asy::FutureOr<core::String*>*));
+                                                                                                                          ^" as{TypeError,ForDynamic} asy::FutureOr<core::String*>*));
   asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
  - 'FutureOr' is from 'dart:async'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
index 7967409..05abfab 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
@@ -28,7 +28,7 @@
  - 'FutureOr' is from 'dart:async'.
 Try correcting the name to the name of an existing method, or defining a method named '+'.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
-                                                                                                                          ^" as{TypeError} asy::FutureOr<core::String*>*));
+                                                                                                                          ^" as{TypeError,ForDynamic} asy::FutureOr<core::String*>*));
   asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
  - 'FutureOr' is from 'dart:async'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
index 1abf208..e2271dd 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → core::int*
-    return self::f() as{TypeError} core::int*;
+    return self::f() as{TypeError,ForDynamic} core::int*;
   set x(core::int* value) → void {}
 }
 class B extends core::Object {
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.transformed.expect
index 1abf208..e2271dd 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → core::int*
-    return self::f() as{TypeError} core::int*;
+    return self::f() as{TypeError,ForDynamic} core::int*;
   set x(core::int* value) → void {}
 }
 class B extends core::Object {
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
index bb7d545..93b3edc 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
@@ -37,7 +37,7 @@
 static method foo() → dynamic {
   core::String* s;
   core::int* i;
-  s = new self::B::•().{self::B::x} as{TypeError} core::String*;
+  s = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
   s = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
                                                              ^" in new self::B::•().{self::B::y} as{TypeError} core::String*;
@@ -45,7 +45,7 @@
   s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
                                                              ^" in new self::B::•().{self::B::w} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  i = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
   i = new self::B::•().{self::B::y};
   i = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:62: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
index bb7d545..93b3edc 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
@@ -37,7 +37,7 @@
 static method foo() → dynamic {
   core::String* s;
   core::int* i;
-  s = new self::B::•().{self::B::x} as{TypeError} core::String*;
+  s = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
   s = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
                                                              ^" in new self::B::•().{self::B::y} as{TypeError} core::String*;
@@ -45,7 +45,7 @@
   s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
                                                              ^" in new self::B::•().{self::B::w} as{TypeError} core::String*;
-  i = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  i = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
   i = new self::B::•().{self::B::y};
   i = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:62: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
index 077060d..0b8b396 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
@@ -15,7 +15,7 @@
     ;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.transformed.expect
index 077060d..0b8b396 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
     ;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
index 43604a1..3a5f33d 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
@@ -15,7 +15,7 @@
     ;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.transformed.expect
index 43604a1..3a5f33d 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
     ;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
index 0ab7323..1611ea4 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → core::int*
-    return self::f() as{TypeError} core::int*;
+    return self::f() as{TypeError,ForDynamic} core::int*;
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B*
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.transformed.expect
index 0ab7323..1611ea4 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   get x() → core::int*
-    return self::f() as{TypeError} core::int*;
+    return self::f() as{TypeError,ForDynamic} core::int*;
 }
 abstract class B extends core::Object implements self::C {
   synthetic constructor •() → self::B*
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
index 8038d01..dc05112 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
@@ -27,8 +27,8 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String* y = new self::B::•().{self::B::x} as{TypeError} core::String*;
-  core::int* z = new self::B::•().{self::B::x} as{TypeError} core::int*;
+  core::String* y = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x} as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index 12a0f49..a073b10 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -71,7 +71,7 @@
                                             ^" in x as{TypeError} core::String*;
   }
   for (dynamic x in list) {
-    core::String* y = x as{TypeError} core::String*;
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
   for (final self::Foo* #t4 in list) {
     core::String* x = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
@@ -84,16 +84,16 @@
   dynamic z;
   for (final self::Foo* #t6 in list) {
     z = #t6;
-    core::String* y = z as{TypeError} core::String*;
+    core::String* y = z as{TypeError,ForDynamic} core::String*;
   }
   core::Iterable<dynamic>* iter = list;
   for (final dynamic #t7 in iter) {
-    self::Foo* x = #t7 as{TypeError} self::Foo*;
+    self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   dynamic iter2 = list;
-  for (final dynamic #t8 in iter2 as{TypeError} core::Iterable<dynamic>*) {
-    self::Foo* x = #t8 as{TypeError} self::Foo*;
+  for (final dynamic #t8 in iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
@@ -103,7 +103,7 @@
  - 'Iterable' is from 'dart:core'.
   for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                      ^" in map as{TypeError} core::Iterable<dynamic>*) {
-    core::String* y = x as{TypeError} core::String*;
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
   for (core::String* x in map.{core::Map::keys}) {
     core::String* y = x;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
index 67247a8..8b874fc 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
@@ -94,7 +94,7 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic x = :sync-for-iterator.{core::Iterator::current};
       {
-        core::String* y = x as{TypeError} core::String*;
+        core::String* y = x as{TypeError,ForDynamic} core::String*;
       }
     }
   }
@@ -119,7 +119,7 @@
       final self::Foo* #t6 = :sync-for-iterator.{core::Iterator::current};
       {
         z = #t6;
-        core::String* y = z as{TypeError} core::String*;
+        core::String* y = z as{TypeError,ForDynamic} core::String*;
       }
     }
   }
@@ -129,18 +129,18 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
       {
-        self::Foo* x = #t7 as{TypeError} self::Foo*;
+        self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
         self::Foo* y = x;
       }
     }
   }
   dynamic iter2 = list;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(iter2 as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
       {
-        self::Foo* x = #t8 as{TypeError} self::Foo*;
+        self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
         self::Foo* y = x;
       }
     }
@@ -156,7 +156,7 @@
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       dynamic x = :sync-for-iterator.{core::Iterator::current};
       {
-        core::String* y = x as{TypeError} core::String*;
+        core::String* y = x as{TypeError,ForDynamic} core::String*;
       }
     }
   }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index ab6817c..ba99001 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -78,7 +78,7 @@
                                             ^" in x as{TypeError} core::String*;
   }
   await for (dynamic x in myStream) {
-    core::String* y = x as{TypeError} core::String*;
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
   await for (final self::Foo* #t4 in myStream) {
     core::String* x = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
@@ -91,16 +91,16 @@
   dynamic z;
   await for (final self::Foo* #t6 in myStream) {
     z = #t6;
-    core::String* y = z as{TypeError} core::String*;
+    core::String* y = z as{TypeError,ForDynamic} core::String*;
   }
   asy::Stream<dynamic>* stream = myStream;
   await for (final dynamic #t7 in stream) {
-    self::Foo* x = #t7 as{TypeError} self::Foo*;
+    self::Foo* x = #t7 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   dynamic stream2 = myStream;
-  await for (final dynamic #t8 in stream2 as{TypeError} asy::Stream<dynamic>*) {
-    self::Foo* x = #t8 as{TypeError} self::Foo*;
+  await for (final dynamic #t8 in stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+    self::Foo* x = #t8 as{TypeError,ForDynamic} self::Foo*;
     self::Foo* y = x;
   }
   core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
@@ -110,7 +110,7 @@
  - 'Stream' is from 'dart:async'.
   await for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                            ^" in map as{TypeError} asy::Stream<dynamic>*) {
-    core::String* y = x as{TypeError} core::String*;
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
index 7fe8c70..7f3335c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
@@ -222,7 +222,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::String* y = x as{TypeError} core::String*;
+                  core::String* y = x as{TypeError,ForDynamic} core::String*;
                 }
               }
               else
@@ -277,7 +277,7 @@
                 final self::Foo* #t23 = :for-iterator.{asy::_StreamIterator::current};
                 {
                   z = #t23;
-                  core::String* y = z as{TypeError} core::String*;
+                  core::String* y = z as{TypeError,ForDynamic} core::String*;
                 }
               }
               else
@@ -302,7 +302,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t27 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  self::Foo* x = #t27 as{TypeError} self::Foo*;
+                  self::Foo* x = #t27 as{TypeError,ForDynamic} self::Foo*;
                   self::Foo* y = x;
                 }
               }
@@ -317,7 +317,7 @@
         }
         dynamic stream2 = myStream;
         {
-          dynamic :stream = stream2 as{TypeError} asy::Stream<dynamic>*;
+          dynamic :stream = stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*;
           asy::_asyncStarListenHelper(:stream, :async_op);
           asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           try
@@ -328,7 +328,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t31 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  self::Foo* x = #t31 as{TypeError} self::Foo*;
+                  self::Foo* x = #t31 as{TypeError,ForDynamic} self::Foo*;
                   self::Foo* y = x;
                 }
               }
@@ -359,7 +359,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::String* y = x as{TypeError} core::String*;
+                  core::String* y = x as{TypeError,ForDynamic} core::String*;
                 }
               }
               else
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
index 4d47083..82851a6 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
@@ -10,6 +10,6 @@
     return (self::C::T* y) → core::Null? {};
 }
 static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
+  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
index 4d47083..82851a6 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.transformed.expect
@@ -10,6 +10,6 @@
     return (self::C::T* y) → core::Null? {};
 }
 static method test(self::C<core::String*>* c) → void {
-  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
+  (core::int*) →* (core::String*) →* void tearoff = c.{self::C::f} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void<core::int*>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
index 29d7a60..8c5aa72 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
@@ -10,7 +10,7 @@
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
-  self::A* b = a as{TypeError} self::A*;
+  self::A* b = a as{TypeError,ForDynamic} self::A*;
   core::print(a.x);
   core::print(a.x.+(2));
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.transformed.expect
index 29d7a60..8c5aa72 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 }
 static method main() → dynamic {
   dynamic a = new self::A::•();
-  self::A* b = a as{TypeError} self::A*;
+  self::A* b = a as{TypeError,ForDynamic} self::A*;
   core::print(a.x);
   core::print(a.x.+(2));
 }
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
index 3fb8cb6..2620e6d 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
@@ -13,7 +13,7 @@
 static field core::int* intValue = 0;
 static field core::num* numValue = 0;
 static field core::double* doubleValue = 0.0;
-static field invalid-type a = (() → core::num* => self::intValue.{core::num::+}(self::b as{TypeError} core::num*)) as{TypeError} invalid-type;
+static field invalid-type a = (() → core::num* => self::intValue.{core::num::+}(self::b as{TypeError,ForDynamic} core::num*)) as{TypeError} invalid-type;
 static field dynamic b = self::a.call();
 static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d);
 static field core::num* d = self::c.call();
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
index 13e6c5e..970333f 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
@@ -32,26 +32,26 @@
  - 'Iterable' is from 'dart:core'.
   for (int x in s) {}
                 ^" in s as{TypeError} core::Iterable<dynamic>*) {
-    core::int* x = #t1 as{TypeError} core::int*;
+    core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
   }
   await for (final dynamic #t3 in let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (int x in s) {}
                       ^" in s as{TypeError} asy::Stream<dynamic>*) {
-    core::int* x = #t3 as{TypeError} core::int*;
+    core::int* x = #t3 as{TypeError,ForDynamic} core::int*;
   }
   core::int* y;
   for (final dynamic #t5 in let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (y in s) {}
             ^" in s as{TypeError} core::Iterable<dynamic>*) {
-    y = #t5 as{TypeError} core::int*;
+    y = #t5 as{TypeError,ForDynamic} core::int*;
   }
   await for (final dynamic #t7 in let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   await for (y in s) {}
                   ^" in s as{TypeError} asy::Stream<dynamic>*) {
-    y = #t7 as{TypeError} core::int*;
+    y = #t7 as{TypeError,ForDynamic} core::int*;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
index 367cb2e..796c34d 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
@@ -52,7 +52,7 @@
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
             {
-              core::int* x = #t2 as{TypeError} core::int*;
+              core::int* x = #t2 as{TypeError,ForDynamic} core::int*;
             }
           }
         }
@@ -71,7 +71,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t6 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::int* x = #t6 as{TypeError} core::int*;
+                  core::int* x = #t6 as{TypeError,ForDynamic} core::int*;
                 }
               }
               else
@@ -92,7 +92,7 @@
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
             {
-              y = #t9 as{TypeError} core::int*;
+              y = #t9 as{TypeError,ForDynamic} core::int*;
             }
           }
         }
@@ -111,7 +111,7 @@
               if(_in::unsafeCast<core::bool*>(:result)) {
                 final dynamic #t13 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  y = #t13 as{TypeError} core::int*;
+                  y = #t13 as{TypeError,ForDynamic} core::int*;
                 }
               }
               else
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
index e079d1f..803bc0a 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.strong.expect
@@ -994,7 +994,7 @@
   dynamicVar = xPotentiallyNullArg;
   dynamicVar = yNonNullArg;
   dynamicVar = yPotentiallyNullArg;
-  core::Object objectVar = dynamicArg as{TypeError} core::Object;
+  core::Object objectVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   objectVar = objectArg;
   objectVar = numArg;
   objectVar = intArg;
@@ -1003,788 +1003,788 @@
   objectVar = tearoffableArg;
   objectVar = xNonNullArg;
   objectVar = yNonNullArg;
-  core::num numVar = dynamicArg as{TypeError} core::num;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
   numVar = numArg;
   numVar = intArg;
   numVar = doubleArg;
-  core::int intVar = dynamicArg as{TypeError} core::int;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   intVar = intArg;
-  core::double doubleVar = dynamicArg as{TypeError} core::double;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
   doubleVar = doubleArg;
-  core::Function functionVar = dynamicArg as{TypeError} core::Function;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
   functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
-  () → void toVoidVar = dynamicArg as{TypeError} () → void;
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
   toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
-  self::Tearoffable tearoffableVar = dynamicArg as{TypeError} self::Tearoffable;
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
-  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError} self::ok::XnonNull;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
   xNonNullVar = xNonNullArg;
   xNonNullVar = yNonNullArg;
-  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError} self::ok::YnonNull;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
   yNonNullVar = yNonNullArg;
-  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError} self::ok::XpotentiallyNull%;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
   xPotentiallyNullVar = xPotentiallyNullArg;
   xPotentiallyNullVar = yPotentiallyNullArg;
-  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError} self::ok::YpotentiallyNull%;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
   core::Object objectVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   Object objectVar = objectNullableArg;
-                     ^" in objectNullableArg as{TypeError} core::Object;
+                     ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} core::Object;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::Object;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} core::Object;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object'.
  - 'Function' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::Object;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::Object;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
  - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::Object;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::Object;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::Object;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::Object;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::Object;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::Object;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::Object;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   core::num numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   num numVar = objectArg;
-               ^" in objectArg as{TypeError} core::num;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   numVar = objectNullableArg;
-           ^" in objectNullableArg as{TypeError} core::num;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num'.
   numVar = numNullableArg;
-           ^" in numNullableArg as{TypeError} core::num;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num'.
   numVar = intNullableArg;
-           ^" in intNullableArg as{TypeError} core::num;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num'.
   numVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::num;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
-           ^" in functionArg as{TypeError} core::num;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::num;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::num;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::num;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::num;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::num;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::num;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::num;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::num;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::num;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::num;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::num;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   core::int intVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   int intVar = objectArg;
-               ^" in objectArg as{TypeError} core::int;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   intVar = objectNullableArg;
-           ^" in objectNullableArg as{TypeError} core::int;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   intVar = numArg;
-           ^" in numArg as{TypeError} core::int;
+           ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
   intVar = numNullableArg;
-           ^" in numNullableArg as{TypeError} core::int;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int'.
   intVar = intNullableArg;
-           ^" in intNullableArg as{TypeError} core::int;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
-           ^" in doubleArg as{TypeError} core::int;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::int;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
-           ^" in functionArg as{TypeError} core::int;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::int;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::int;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::int;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::int;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::int;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::int;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::int;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::int;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::int;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::int;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::int;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   core::double doubleVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   double doubleVar = objectArg;
-                     ^" in objectArg as{TypeError} core::double;
+                     ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   doubleVar = objectNullableArg;
-              ^" in objectNullableArg as{TypeError} core::double;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   doubleVar = numArg;
-              ^" in numArg as{TypeError} core::double;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
   doubleVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} core::double;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
-              ^" in intArg as{TypeError} core::double;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::double;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double'.
   doubleVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} core::double;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
-              ^" in functionArg as{TypeError} core::double;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::double;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
-              ^" in toVoidArg as{TypeError} core::double;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::double;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
-              ^" in tearoffableArg as{TypeError} core::double;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::double;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} core::double;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::double;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::double;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} core::double;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::double;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::double;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   core::Function functionVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   Function functionVar = objectArg;
-                         ^" in objectArg as{TypeError} core::Function;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   functionVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} core::Function;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
-                ^" in numArg as{TypeError} core::Function;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} core::Function;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
-                ^" in intArg as{TypeError} core::Function;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} core::Function;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
-                ^" in doubleArg as{TypeError} core::Function;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} core::Function;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} core::Function;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} core::Function;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
   functionVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError} core::Function;
   functionVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} core::Function;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} core::Function;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} core::Function;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} core::Function;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
-                ^" in yNonNullArg as{TypeError} core::Function;
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} core::Function;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} core::Function;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} core::Function;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   () → void toVoidVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   void Function() toVoidVar = objectArg;
-                              ^" in objectArg as{TypeError} () → void;
+                              ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   toVoidVar = objectNullableArg;
-              ^" in objectNullableArg as{TypeError} () → void;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
-              ^" in numArg as{TypeError} () → void;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} () → void;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
-              ^" in intArg as{TypeError} () → void;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} () → void;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
-              ^" in doubleArg as{TypeError} () → void;
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} () → void;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionArg;
-              ^" in functionArg as{TypeError} () → void;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} () → void;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} () → void;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
   toVoidVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError} () → void;
   toVoidVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} () → void;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} () → void;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} () → void;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} () → void;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} () → void;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} () → void;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} () → void;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} () → void;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   self::Tearoffable tearoffableVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   Tearoffable tearoffableVar = objectArg;
-                               ^" in objectArg as{TypeError} self::Tearoffable;
+                               ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = objectNullableArg;
-                   ^" in objectNullableArg as{TypeError} self::Tearoffable;
+                   ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
-                   ^" in numArg as{TypeError} self::Tearoffable;
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
-                   ^" in numNullableArg as{TypeError} self::Tearoffable;
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
-                   ^" in intArg as{TypeError} self::Tearoffable;
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
-                   ^" in intNullableArg as{TypeError} self::Tearoffable;
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
-                   ^" in doubleArg as{TypeError} self::Tearoffable;
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
-                   ^" in doubleNullableArg as{TypeError} self::Tearoffable;
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
-                   ^" in functionArg as{TypeError} self::Tearoffable;
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
-                   ^" in functionNullableArg as{TypeError} self::Tearoffable;
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
-                   ^" in toVoidArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
-                   ^" in toVoidNullableArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
-                   ^" in tearoffableNullableArg as{TypeError} self::Tearoffable;
+                   ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
-                   ^" in xNonNullArg as{TypeError} self::Tearoffable;
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
-                   ^" in xNonNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
-                   ^" in xPotentiallyNullArg as{TypeError} self::Tearoffable;
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
-                   ^" in xPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
-                   ^" in yNonNullArg as{TypeError} self::Tearoffable;
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
-                   ^" in yNonNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
-                   ^" in yPotentiallyNullArg as{TypeError} self::Tearoffable;
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
-                   ^" in yPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   self::error::XnonNull xNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   XnonNull xNonNullVar = objectArg;
-                         ^" in objectArg as{TypeError} <BottomType>;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   xNonNullVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} <BottomType>;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   self::error::XpotentiallyNull% xPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   XpotentiallyNull xPotentiallyNullVar = objectArg;
-                                         ^" in objectArg as{TypeError} <BottomType>;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   xPotentiallyNullVar = objectNullableArg;
-                        ^" in objectNullableArg as{TypeError} <BottomType>;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-                        ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-                        ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   self::error::YnonNull yNonNullVar = let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   YnonNull yNonNullVar = objectArg;
-                         ^" in objectArg as{TypeError} <BottomType>;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   yNonNullVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} <BottomType>;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} <BottomType>;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   self::error::YpotentiallyNull% yPotentiallyNullVar = let final<BottomType> #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   YpotentiallyNull yPotentiallyNullVar = objectArg;
-                                         ^" in objectArg as{TypeError} <BottomType>;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   yPotentiallyNullVar = objectNullableArg;
-                        ^" in objectNullableArg as{TypeError} <BottomType>;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullArg;
-                        ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                        ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullNullableArg;
-                        ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
-                        ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
index e079d1f..803bc0a 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.strong.transformed.expect
@@ -994,7 +994,7 @@
   dynamicVar = xPotentiallyNullArg;
   dynamicVar = yNonNullArg;
   dynamicVar = yPotentiallyNullArg;
-  core::Object objectVar = dynamicArg as{TypeError} core::Object;
+  core::Object objectVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   objectVar = objectArg;
   objectVar = numArg;
   objectVar = intArg;
@@ -1003,788 +1003,788 @@
   objectVar = tearoffableArg;
   objectVar = xNonNullArg;
   objectVar = yNonNullArg;
-  core::num numVar = dynamicArg as{TypeError} core::num;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
   numVar = numArg;
   numVar = intArg;
   numVar = doubleArg;
-  core::int intVar = dynamicArg as{TypeError} core::int;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   intVar = intArg;
-  core::double doubleVar = dynamicArg as{TypeError} core::double;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
   doubleVar = doubleArg;
-  core::Function functionVar = dynamicArg as{TypeError} core::Function;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
   functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
-  () → void toVoidVar = dynamicArg as{TypeError} () → void;
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
   toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
-  self::Tearoffable tearoffableVar = dynamicArg as{TypeError} self::Tearoffable;
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
-  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError} self::ok::XnonNull;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
   xNonNullVar = xNonNullArg;
   xNonNullVar = yNonNullArg;
-  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError} self::ok::YnonNull;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
   yNonNullVar = yNonNullArg;
-  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError} self::ok::XpotentiallyNull%;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
   xPotentiallyNullVar = xPotentiallyNullArg;
   xPotentiallyNullVar = yPotentiallyNullArg;
-  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError} self::ok::YpotentiallyNull%;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
   core::Object objectVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   Object objectVar = objectNullableArg;
-                     ^" in objectNullableArg as{TypeError} core::Object;
+                     ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} core::Object;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::Object;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} core::Object;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object'.
  - 'Function' is from 'dart:core'.
  - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::Object;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::Object;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
  - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::Object;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::Object;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::Object;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::Object;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::Object;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::Object;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
   objectVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object'.
  - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::Object;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
   core::num numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   num numVar = objectArg;
-               ^" in objectArg as{TypeError} core::num;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
  - 'Object' is from 'dart:core'.
   numVar = objectNullableArg;
-           ^" in objectNullableArg as{TypeError} core::num;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num'.
   numVar = numNullableArg;
-           ^" in numNullableArg as{TypeError} core::num;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num'.
   numVar = intNullableArg;
-           ^" in intNullableArg as{TypeError} core::num;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num'.
   numVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::num;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
-           ^" in functionArg as{TypeError} core::num;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::num;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::num;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::num;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::num;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::num;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::num;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::num;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::num;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::num;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::num;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::num;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   core::int intVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   int intVar = objectArg;
-               ^" in objectArg as{TypeError} core::int;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
  - 'Object' is from 'dart:core'.
   intVar = objectNullableArg;
-           ^" in objectNullableArg as{TypeError} core::int;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
   intVar = numArg;
-           ^" in numArg as{TypeError} core::int;
+           ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
   intVar = numNullableArg;
-           ^" in numNullableArg as{TypeError} core::int;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int'.
   intVar = intNullableArg;
-           ^" in intNullableArg as{TypeError} core::int;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
-           ^" in doubleArg as{TypeError} core::int;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::int;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
-           ^" in functionArg as{TypeError} core::int;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::int;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::int;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::int;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::int;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::int;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::int;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::int;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::int;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::int;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::int;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::int;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   core::double doubleVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   double doubleVar = objectArg;
-                     ^" in objectArg as{TypeError} core::double;
+                     ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
  - 'Object' is from 'dart:core'.
   doubleVar = objectNullableArg;
-              ^" in objectNullableArg as{TypeError} core::double;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
   doubleVar = numArg;
-              ^" in numArg as{TypeError} core::double;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
   doubleVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} core::double;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
-              ^" in intArg as{TypeError} core::double;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::double;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double'.
   doubleVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} core::double;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
-              ^" in functionArg as{TypeError} core::double;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::double;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
-              ^" in toVoidArg as{TypeError} core::double;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::double;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
-              ^" in tearoffableArg as{TypeError} core::double;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::double;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} core::double;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::double;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::double;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} core::double;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::double;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::double;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   core::Function functionVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   Function functionVar = objectArg;
-                         ^" in objectArg as{TypeError} core::Function;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
  - 'Object' is from 'dart:core'.
  - 'Function' is from 'dart:core'.
   functionVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} core::Function;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
-                ^" in numArg as{TypeError} core::Function;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} core::Function;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
-                ^" in intArg as{TypeError} core::Function;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} core::Function;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
-                ^" in doubleArg as{TypeError} core::Function;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} core::Function;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} core::Function;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} core::Function;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
   functionVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError} core::Function;
   functionVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} core::Function;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} core::Function;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} core::Function;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} core::Function;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
-                ^" in yNonNullArg as{TypeError} core::Function;
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} core::Function;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} core::Function;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} core::Function;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   () → void toVoidVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   void Function() toVoidVar = objectArg;
-                              ^" in objectArg as{TypeError} () → void;
+                              ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
  - 'Object' is from 'dart:core'.
   toVoidVar = objectNullableArg;
-              ^" in objectNullableArg as{TypeError} () → void;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
-              ^" in numArg as{TypeError} () → void;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} () → void;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
-              ^" in intArg as{TypeError} () → void;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} () → void;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
-              ^" in doubleArg as{TypeError} () → void;
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} () → void;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionArg;
-              ^" in functionArg as{TypeError} () → void;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
  - 'Function' is from 'dart:core'.
   toVoidVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} () → void;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} () → void;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
   toVoidVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError} () → void;
   toVoidVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} () → void;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} () → void;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} () → void;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} () → void;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} () → void;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} () → void;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} () → void;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} () → void;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   self::Tearoffable tearoffableVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   Tearoffable tearoffableVar = objectArg;
-                               ^" in objectArg as{TypeError} self::Tearoffable;
+                               ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Object' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = objectNullableArg;
-                   ^" in objectNullableArg as{TypeError} self::Tearoffable;
+                   ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
-                   ^" in numArg as{TypeError} self::Tearoffable;
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
-                   ^" in numNullableArg as{TypeError} self::Tearoffable;
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
-                   ^" in intArg as{TypeError} self::Tearoffable;
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
-                   ^" in intNullableArg as{TypeError} self::Tearoffable;
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
-                   ^" in doubleArg as{TypeError} self::Tearoffable;
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
-                   ^" in doubleNullableArg as{TypeError} self::Tearoffable;
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
-                   ^" in functionArg as{TypeError} self::Tearoffable;
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
-                   ^" in functionNullableArg as{TypeError} self::Tearoffable;
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
-                   ^" in toVoidArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
-                   ^" in toVoidNullableArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
-                   ^" in tearoffableNullableArg as{TypeError} self::Tearoffable;
+                   ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
-                   ^" in xNonNullArg as{TypeError} self::Tearoffable;
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
-                   ^" in xNonNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
-                   ^" in xPotentiallyNullArg as{TypeError} self::Tearoffable;
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
-                   ^" in xPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
-                   ^" in yNonNullArg as{TypeError} self::Tearoffable;
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
-                   ^" in yNonNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
-                   ^" in yPotentiallyNullArg as{TypeError} self::Tearoffable;
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
-                   ^" in yPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   self::error::XnonNull xNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   XnonNull xNonNullVar = objectArg;
-                         ^" in objectArg as{TypeError} <BottomType>;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
  - 'Object' is from 'dart:core'.
   xNonNullVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} <BottomType>;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   self::error::XpotentiallyNull% xPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   XpotentiallyNull xPotentiallyNullVar = objectArg;
-                                         ^" in objectArg as{TypeError} <BottomType>;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   xPotentiallyNullVar = objectNullableArg;
-                        ^" in objectNullableArg as{TypeError} <BottomType>;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-                        ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-                        ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   self::error::YnonNull yNonNullVar = let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   YnonNull yNonNullVar = objectArg;
-                         ^" in objectArg as{TypeError} <BottomType>;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
  - 'Object' is from 'dart:core'.
   yNonNullVar = objectNullableArg;
-                ^" in objectNullableArg as{TypeError} <BottomType>;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} <BottomType>;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   self::error::YpotentiallyNull% yPotentiallyNullVar = let final<BottomType> #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   YpotentiallyNull yPotentiallyNullVar = objectArg;
-                                         ^" in objectArg as{TypeError} <BottomType>;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Object' is from 'dart:core'.
   yPotentiallyNullVar = objectNullableArg;
-                        ^" in objectNullableArg as{TypeError} <BottomType>;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullArg;
-                        ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                        ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xPotentiallyNullNullableArg;
-                        ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
-                        ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
index ef45e34..55036c6 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
@@ -1003,32 +1003,32 @@
   objectVar = tearoffableArg;
   objectVar = xNonNullArg;
   objectVar = yNonNullArg;
-  core::num numVar = dynamicArg as{TypeError} core::num;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
   numVar = numArg;
   numVar = intArg;
   numVar = doubleArg;
-  core::int intVar = dynamicArg as{TypeError} core::int;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   intVar = intArg;
-  core::double doubleVar = dynamicArg as{TypeError} core::double;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
   doubleVar = doubleArg;
-  core::Function functionVar = dynamicArg as{TypeError} core::Function;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
   functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
-  () → void toVoidVar = dynamicArg as{TypeError} () → void;
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
   toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
-  self::Tearoffable tearoffableVar = dynamicArg as{TypeError} self::Tearoffable;
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
-  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError} self::ok::XnonNull;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
   xNonNullVar = xNonNullArg;
   xNonNullVar = yNonNullArg;
-  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError} self::ok::YnonNull;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
   yNonNullVar = yNonNullArg;
-  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError} self::ok::XpotentiallyNull%;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
   xPotentiallyNullVar = xPotentiallyNullArg;
   xPotentiallyNullVar = yPotentiallyNullArg;
-  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError} self::ok::YpotentiallyNull%;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
@@ -1045,582 +1045,582 @@
   objectVar = yNonNullNullableArg;
   objectVar = yPotentiallyNullArg;
   objectVar = yPotentiallyNullNullableArg;
-  core::num numVar = objectArg as{TypeError} core::num;
-  numVar = objectNullableArg as{TypeError} core::num;
+  core::num numVar = objectArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = numNullableArg;
   numVar = intNullableArg;
   numVar = doubleNullableArg;
   numVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
-           ^" in functionArg as{TypeError} core::num;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::num;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::num;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::num;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::num;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::num;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::num;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::num;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::num;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::num;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::num;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::num;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::num;
-  core::int intVar = objectArg as{TypeError} core::int;
-  intVar = objectNullableArg as{TypeError} core::int;
-  intVar = numArg as{TypeError} core::int;
-  intVar = numNullableArg as{TypeError} core::int;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  core::int intVar = objectArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = numArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = intNullableArg;
   intVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
-           ^" in doubleArg as{TypeError} core::int;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::int;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
-           ^" in functionArg as{TypeError} core::int;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::int;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::int;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::int;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::int;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::int;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::int;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::int;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::int;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::int;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::int;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::int;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::int;
-  core::double doubleVar = objectArg as{TypeError} core::double;
-  doubleVar = objectNullableArg as{TypeError} core::double;
-  doubleVar = numArg as{TypeError} core::double;
-  doubleVar = numNullableArg as{TypeError} core::double;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  core::double doubleVar = objectArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = numArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
-              ^" in intArg as{TypeError} core::double;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::double;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = doubleNullableArg;
   doubleVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
-              ^" in functionArg as{TypeError} core::double;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::double;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
-              ^" in toVoidArg as{TypeError} core::double;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::double;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
-              ^" in tearoffableArg as{TypeError} core::double;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::double;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} core::double;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::double;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::double;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} core::double;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::double;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::double;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::double;
-  core::Function functionVar = objectArg as{TypeError} core::Function;
-  functionVar = objectNullableArg as{TypeError} core::Function;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  core::Function functionVar = objectArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
-                ^" in numArg as{TypeError} core::Function;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} core::Function;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
-                ^" in intArg as{TypeError} core::Function;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} core::Function;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
-                ^" in doubleArg as{TypeError} core::Function;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} core::Function;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = functionNullableArg;
   functionVar = toVoidNullableArg;
   functionVar = tearoffableNullableArg as{TypeError} core::Function;
   functionVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} core::Function;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} core::Function;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} core::Function;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} core::Function;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
-                ^" in yNonNullArg as{TypeError} core::Function;
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} core::Function;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} core::Function;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} core::Function;
-  () → void toVoidVar = objectArg as{TypeError} () → void;
-  toVoidVar = objectNullableArg as{TypeError} () → void;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  () → void toVoidVar = objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
-              ^" in numArg as{TypeError} () → void;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} () → void;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
-              ^" in intArg as{TypeError} () → void;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} () → void;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
-              ^" in doubleArg as{TypeError} () → void;
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} () → void;
-  toVoidVar = functionArg as{TypeError} () → void;
-  toVoidVar = functionNullableArg as{TypeError} () → void;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidNullableArg;
   toVoidVar = tearoffableNullableArg as{TypeError} () → void;
   toVoidVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} () → void;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} () → void;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} () → void;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} () → void;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} () → void;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} () → void;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} () → void;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} () → void;
-  self::Tearoffable tearoffableVar = objectArg as{TypeError} self::Tearoffable;
-  tearoffableVar = objectNullableArg as{TypeError} self::Tearoffable;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  self::Tearoffable tearoffableVar = objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
-                   ^" in numArg as{TypeError} self::Tearoffable;
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
-                   ^" in numNullableArg as{TypeError} self::Tearoffable;
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
-                   ^" in intArg as{TypeError} self::Tearoffable;
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
-                   ^" in intNullableArg as{TypeError} self::Tearoffable;
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
-                   ^" in doubleArg as{TypeError} self::Tearoffable;
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
-                   ^" in doubleNullableArg as{TypeError} self::Tearoffable;
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
-                   ^" in functionArg as{TypeError} self::Tearoffable;
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
-                   ^" in functionNullableArg as{TypeError} self::Tearoffable;
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
-                   ^" in toVoidArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
-                   ^" in toVoidNullableArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableNullableArg;
   tearoffableVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
-                   ^" in xNonNullArg as{TypeError} self::Tearoffable;
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
-                   ^" in xNonNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
-                   ^" in xPotentiallyNullArg as{TypeError} self::Tearoffable;
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
-                   ^" in xPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
-                   ^" in yNonNullArg as{TypeError} self::Tearoffable;
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
-                   ^" in yNonNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
-                   ^" in yPotentiallyNullArg as{TypeError} self::Tearoffable;
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
-                   ^" in yPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = objectArg as{TypeError} self::error::XnonNull;
-  xNonNullVar = objectNullableArg as{TypeError} self::error::XnonNull;
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  self::error::XnonNull xNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
+  xNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
   xNonNullVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = xNonNullNullableArg;
   xNonNullVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = yNonNullNullableArg;
   xNonNullVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = objectNullableArg as{TypeError} self::error::XpotentiallyNull%;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
+  xPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
   xPotentiallyNullVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
   xPotentiallyNullVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-  self::error::YnonNull yNonNullVar = objectArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = objectNullableArg as{TypeError} self::error::YnonNull;
+  self::error::YnonNull yNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
   yNonNullVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = xNonNullArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = xNonNullNullableArg as{TypeError} self::error::YnonNull;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = xNonNullArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
   yNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = yNonNullNullableArg;
   yNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = objectNullableArg as{TypeError} self::error::YpotentiallyNull%;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
   yPotentiallyNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError} self::error::YpotentiallyNull%;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
   yPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
index ef45e34..55036c6 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
@@ -1003,32 +1003,32 @@
   objectVar = tearoffableArg;
   objectVar = xNonNullArg;
   objectVar = yNonNullArg;
-  core::num numVar = dynamicArg as{TypeError} core::num;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
   numVar = numArg;
   numVar = intArg;
   numVar = doubleArg;
-  core::int intVar = dynamicArg as{TypeError} core::int;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   intVar = intArg;
-  core::double doubleVar = dynamicArg as{TypeError} core::double;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
   doubleVar = doubleArg;
-  core::Function functionVar = dynamicArg as{TypeError} core::Function;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
   functionVar = functionArg;
   functionVar = toVoidArg;
   functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1.==(null) ?{() → void} null : #t1.{self::Tearoffable::call};
-  () → void toVoidVar = dynamicArg as{TypeError} () → void;
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidArg;
   toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2.==(null) ?{() → void} null : #t2.{self::Tearoffable::call};
-  self::Tearoffable tearoffableVar = dynamicArg as{TypeError} self::Tearoffable;
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableArg;
-  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError} self::ok::XnonNull;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
   xNonNullVar = xNonNullArg;
   xNonNullVar = yNonNullArg;
-  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError} self::ok::YnonNull;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
   yNonNullVar = yNonNullArg;
-  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError} self::ok::XpotentiallyNull%;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
   xPotentiallyNullVar = xPotentiallyNullArg;
   xPotentiallyNullVar = yPotentiallyNullArg;
-  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError} self::ok::YpotentiallyNull%;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
@@ -1045,582 +1045,582 @@
   objectVar = yNonNullNullableArg;
   objectVar = yPotentiallyNullArg;
   objectVar = yPotentiallyNullNullableArg;
-  core::num numVar = objectArg as{TypeError} core::num;
-  numVar = objectNullableArg as{TypeError} core::num;
+  core::num numVar = objectArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = numNullableArg;
   numVar = intNullableArg;
   numVar = doubleNullableArg;
   numVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
-           ^" in functionArg as{TypeError} core::num;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::num;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::num;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::num;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::num;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::num;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::num;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::num;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::num;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::num;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::num;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::num;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::num;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
   numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::num;
-  core::int intVar = objectArg as{TypeError} core::int;
-  intVar = objectNullableArg as{TypeError} core::int;
-  intVar = numArg as{TypeError} core::int;
-  intVar = numNullableArg as{TypeError} core::int;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  core::int intVar = objectArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = numArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = intNullableArg;
   intVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
-           ^" in doubleArg as{TypeError} core::int;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
-           ^" in doubleNullableArg as{TypeError} core::int;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
-           ^" in functionArg as{TypeError} core::int;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
-           ^" in functionNullableArg as{TypeError} core::int;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
-           ^" in toVoidArg as{TypeError} core::int;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
-           ^" in toVoidNullableArg as{TypeError} core::int;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
-           ^" in tearoffableArg as{TypeError} core::int;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
-           ^" in tearoffableNullableArg as{TypeError} core::int;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
-           ^" in xNonNullArg as{TypeError} core::int;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
-           ^" in xNonNullNullableArg as{TypeError} core::int;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
-           ^" in xPotentiallyNullArg as{TypeError} core::int;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
-           ^" in xPotentiallyNullNullableArg as{TypeError} core::int;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
-           ^" in yNonNullArg as{TypeError} core::int;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
-           ^" in yNonNullNullableArg as{TypeError} core::int;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
-           ^" in yPotentiallyNullArg as{TypeError} core::int;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
   intVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
-           ^" in yPotentiallyNullNullableArg as{TypeError} core::int;
-  core::double doubleVar = objectArg as{TypeError} core::double;
-  doubleVar = objectNullableArg as{TypeError} core::double;
-  doubleVar = numArg as{TypeError} core::double;
-  doubleVar = numNullableArg as{TypeError} core::double;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  core::double doubleVar = objectArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = numArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
-              ^" in intArg as{TypeError} core::double;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} core::double;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = doubleNullableArg;
   doubleVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
-              ^" in functionArg as{TypeError} core::double;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
-              ^" in functionNullableArg as{TypeError} core::double;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
-              ^" in toVoidArg as{TypeError} core::double;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
-              ^" in toVoidNullableArg as{TypeError} core::double;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
-              ^" in tearoffableArg as{TypeError} core::double;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
-              ^" in tearoffableNullableArg as{TypeError} core::double;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} core::double;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} core::double;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} core::double;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} core::double;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} core::double;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} core::double;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} core::double;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
   doubleVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} core::double;
-  core::Function functionVar = objectArg as{TypeError} core::Function;
-  functionVar = objectNullableArg as{TypeError} core::Function;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  core::Function functionVar = objectArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
-                ^" in numArg as{TypeError} core::Function;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} core::Function;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
-                ^" in intArg as{TypeError} core::Function;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} core::Function;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
-                ^" in doubleArg as{TypeError} core::Function;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} core::Function;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = functionNullableArg;
   functionVar = toVoidNullableArg;
   functionVar = tearoffableNullableArg as{TypeError} core::Function;
   functionVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
-                ^" in xNonNullArg as{TypeError} core::Function;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
-                ^" in xNonNullNullableArg as{TypeError} core::Function;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} core::Function;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} core::Function;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
-                ^" in yNonNullArg as{TypeError} core::Function;
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
-                ^" in yNonNullNullableArg as{TypeError} core::Function;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} core::Function;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
   functionVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} core::Function;
-  () → void toVoidVar = objectArg as{TypeError} () → void;
-  toVoidVar = objectNullableArg as{TypeError} () → void;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  () → void toVoidVar = objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
-              ^" in numArg as{TypeError} () → void;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
-              ^" in numNullableArg as{TypeError} () → void;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
-              ^" in intArg as{TypeError} () → void;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
-              ^" in intNullableArg as{TypeError} () → void;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
-              ^" in doubleArg as{TypeError} () → void;
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
-              ^" in doubleNullableArg as{TypeError} () → void;
-  toVoidVar = functionArg as{TypeError} () → void;
-  toVoidVar = functionNullableArg as{TypeError} () → void;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = toVoidNullableArg;
   toVoidVar = tearoffableNullableArg as{TypeError} () → void;
   toVoidVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
-              ^" in xNonNullArg as{TypeError} () → void;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
-              ^" in xNonNullNullableArg as{TypeError} () → void;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
-              ^" in xPotentiallyNullArg as{TypeError} () → void;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
-              ^" in xPotentiallyNullNullableArg as{TypeError} () → void;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
-              ^" in yNonNullArg as{TypeError} () → void;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
-              ^" in yNonNullNullableArg as{TypeError} () → void;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
-              ^" in yPotentiallyNullArg as{TypeError} () → void;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
   toVoidVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
-              ^" in yPotentiallyNullNullableArg as{TypeError} () → void;
-  self::Tearoffable tearoffableVar = objectArg as{TypeError} self::Tearoffable;
-  tearoffableVar = objectNullableArg as{TypeError} self::Tearoffable;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  self::Tearoffable tearoffableVar = objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
-                   ^" in numArg as{TypeError} self::Tearoffable;
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
-                   ^" in numNullableArg as{TypeError} self::Tearoffable;
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
-                   ^" in intArg as{TypeError} self::Tearoffable;
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
-                   ^" in intNullableArg as{TypeError} self::Tearoffable;
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
-                   ^" in doubleArg as{TypeError} self::Tearoffable;
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
-                   ^" in doubleNullableArg as{TypeError} self::Tearoffable;
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
-                   ^" in functionArg as{TypeError} self::Tearoffable;
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
-                   ^" in functionNullableArg as{TypeError} self::Tearoffable;
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
-                   ^" in toVoidArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
-                   ^" in toVoidNullableArg as{TypeError} self::Tearoffable;
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = tearoffableNullableArg;
   tearoffableVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
-                   ^" in xNonNullArg as{TypeError} self::Tearoffable;
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
-                   ^" in xNonNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
-                   ^" in xPotentiallyNullArg as{TypeError} self::Tearoffable;
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
-                   ^" in xPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
-                   ^" in yNonNullArg as{TypeError} self::Tearoffable;
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
-                   ^" in yNonNullNullableArg as{TypeError} self::Tearoffable;
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
-                   ^" in yPotentiallyNullArg as{TypeError} self::Tearoffable;
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
   tearoffableVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
-                   ^" in yPotentiallyNullNullableArg as{TypeError} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = objectArg as{TypeError} self::error::XnonNull;
-  xNonNullVar = objectNullableArg as{TypeError} self::error::XnonNull;
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  self::error::XnonNull xNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
+  xNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
   xNonNullVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = xNonNullNullableArg;
   xNonNullVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = yNonNullNullableArg;
   xNonNullVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xNonNullVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = objectNullableArg as{TypeError} self::error::XpotentiallyNull%;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
+  xPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
   xPotentiallyNullVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
   xPotentiallyNullVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-  self::error::YnonNull yNonNullVar = objectArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = objectNullableArg as{TypeError} self::error::YnonNull;
+  self::error::YnonNull yNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
   yNonNullVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
-                ^" in numArg as{TypeError} <BottomType>;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
-                ^" in numNullableArg as{TypeError} <BottomType>;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
-                ^" in intArg as{TypeError} <BottomType>;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
-                ^" in intNullableArg as{TypeError} <BottomType>;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
-                ^" in doubleArg as{TypeError} <BottomType>;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
-                ^" in doubleNullableArg as{TypeError} <BottomType>;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
-                ^" in functionArg as{TypeError} <BottomType>;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
-                ^" in functionNullableArg as{TypeError} <BottomType>;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
-                ^" in toVoidArg as{TypeError} <BottomType>;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
-                ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
-                ^" in tearoffableArg as{TypeError} <BottomType>;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
-                ^" in tearoffableNullableArg as{TypeError} <BottomType>;
-  yNonNullVar = xNonNullArg as{TypeError} self::error::YnonNull;
-  yNonNullVar = xNonNullNullableArg as{TypeError} self::error::YnonNull;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = xNonNullArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
+  yNonNullVar = xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
   yNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
-                ^" in xPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
-                ^" in xPotentiallyNullNullableArg as{TypeError} <BottomType>;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = yNonNullNullableArg;
   yNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
-                ^" in yPotentiallyNullArg as{TypeError} <BottomType>;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
-                ^" in yPotentiallyNullNullableArg as{TypeError} <BottomType>;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = objectNullableArg as{TypeError} self::error::YpotentiallyNull%;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
   yPotentiallyNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
-                        ^" in numArg as{TypeError} <BottomType>;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
-                        ^" in numNullableArg as{TypeError} <BottomType>;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
-                        ^" in intArg as{TypeError} <BottomType>;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
-                        ^" in intNullableArg as{TypeError} <BottomType>;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
-                        ^" in doubleArg as{TypeError} <BottomType>;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
-                        ^" in doubleNullableArg as{TypeError} <BottomType>;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
-                        ^" in functionArg as{TypeError} <BottomType>;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
-                        ^" in functionNullableArg as{TypeError} <BottomType>;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
-                        ^" in toVoidArg as{TypeError} <BottomType>;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
-                        ^" in toVoidNullableArg as{TypeError} <BottomType>;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
-                        ^" in tearoffableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
-                        ^" in tearoffableNullableArg as{TypeError} <BottomType>;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
-                        ^" in xNonNullArg as{TypeError} <BottomType>;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
-                        ^" in xNonNullNullableArg as{TypeError} <BottomType>;
-  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError} self::error::YpotentiallyNull%;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
+  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
   yPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
-                        ^" in yNonNullArg as{TypeError} <BottomType>;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
-                        ^" in yNonNullNullableArg as{TypeError} <BottomType>;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.strong.expect b/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
index dc3ec6b..0f795fe 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.strong.expect
@@ -55,21 +55,21 @@
   for (core::int x in let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in i2) x;
-                ^" in i2 as{TypeError} core::Iterable<dynamic>)
+                ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
     final core::List<core::int> #t2 = <core::int>[];
     for (core::int x in let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
-                 ^" in i2 as{TypeError} core::Iterable<dynamic>)
+                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
       #t2.{core::List::add}(x);
   } =>#t2;
   for (core::int x in let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in l2) x;
-                ^" in l2 as{TypeError} core::Iterable<dynamic>)
+                ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
     final core::List<core::int> #t5 = <core::int>[];
@@ -77,15 +77,15 @@
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in l2) x];
-                 ^" in l2 as{TypeError} core::Iterable<dynamic>)
+                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
       #t5.{core::List::add}(x);
   } =>#t5;
   for (final dynamic #t7 in let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o1) x;
-                ^" in o1 as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t7 as{TypeError} core::int;
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t7 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
@@ -94,8 +94,8 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o1) x];
-                 ^" in o1 as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t10 as{TypeError} core::int;
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t9.{core::List::add}(x);
     }
   } =>#t9;
@@ -103,8 +103,8 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o2) x;
-                ^" in o2 as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t12 as{TypeError} core::int;
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t12 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
@@ -113,8 +113,8 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o2) x];
-                 ^" in o2 as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t15 as{TypeError} core::int;
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t14.{core::List::add}(x);
     }
   } =>#t14;
@@ -134,14 +134,14 @@
     for (core::int x in l1)
       #t18.{core::List::add}(x);
   } =>#t18;
-  for (final dynamic #t19 in d as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t19 as{TypeError} core::int;
+  for (final dynamic #t19 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
     final core::List<core::int> #t20 = <core::int>[];
-    for (final dynamic #t21 in d as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t21 as{TypeError} core::int;
+    for (final dynamic #t21 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t20.{core::List::add}(x);
     }
   } =>#t20;
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
index 04b46d0..ac3b55d 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.strong.transformed.expect
@@ -57,7 +57,7 @@
     core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   for (int x in i2) x;
-                ^" in i2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       core::int x = :sync-for-iterator.{core::Iterator::current};
       x;
@@ -69,7 +69,7 @@
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in i2) x];
-                 ^" in i2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
         #t2.{core::List::add}(x);
@@ -81,7 +81,7 @@
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in l2) x;
-                ^" in l2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       core::int x = :sync-for-iterator.{core::Iterator::current};
       x;
@@ -94,7 +94,7 @@
  - 'List' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in l2) x];
-                 ^" in l2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
         #t5.{core::List::add}(x);
@@ -106,11 +106,11 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o1) x;
-                ^" in o1 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t8 as{TypeError} core::int;
+        core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -122,11 +122,11 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o1) x];
-                 ^" in o1 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t11 as{TypeError} core::int;
+          core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t9.{core::List::add}(x);
         }
       }
@@ -137,11 +137,11 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   for (int x in o2) x;
-                ^" in o2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t13 as{TypeError} core::int;
+        core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -153,11 +153,11 @@
  - 'Object' is from 'dart:core'.
  - 'Iterable' is from 'dart:core'.
   [for (int x in o2) x];
-                 ^" in o2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t16 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t16 as{TypeError} core::int;
+          core::int x = #t16 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t14.{core::List::add}(x);
         }
       }
@@ -200,11 +200,11 @@
     }
   } =>#t18;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t19 as{TypeError} core::int;
+        core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -212,11 +212,11 @@
   block {
     final core::List<core::int> #t20 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t21 as{TypeError} core::int;
+          core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t20.{core::List::add}(x);
         }
       }
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
index 12c0f2c..7a50a15 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
@@ -66,25 +66,25 @@
     for (core::int x in l2)
       #t2.{core::List::add}(x);
   } =>#t2;
-  for (final dynamic #t3 in o1 as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t3 as{TypeError} core::int;
+  for (final dynamic #t3 in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
     final core::List<core::int> #t4 = <core::int>[];
-    for (final dynamic #t5 in o1 as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t5 as{TypeError} core::int;
+    for (final dynamic #t5 in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t4.{core::List::add}(x);
     }
   } =>#t4;
-  for (final dynamic #t6 in o2 as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t6 as{TypeError} core::int;
+  for (final dynamic #t6 in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
     final core::List<core::int> #t7 = <core::int>[];
-    for (final dynamic #t8 in o2 as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t8 as{TypeError} core::int;
+    for (final dynamic #t8 in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t7.{core::List::add}(x);
     }
   } =>#t7;
@@ -104,14 +104,14 @@
     for (core::int x in l1)
       #t10.{core::List::add}(x);
   } =>#t10;
-  for (final dynamic #t11 in d as{TypeError} core::Iterable<dynamic>) {
-    core::int x = #t11 as{TypeError} core::int;
+  for (final dynamic #t11 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
     final core::List<core::int> #t12 = <core::int>[];
-    for (final dynamic #t13 in d as{TypeError} core::Iterable<dynamic>) {
-      core::int x = #t13 as{TypeError} core::int;
+    for (final dynamic #t13 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
       #t12.{core::List::add}(x);
     }
   } =>#t12;
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
index 1cf6aaf..39aa91b 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
@@ -88,11 +88,11 @@
     }
   } =>#t2;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t3 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t3 as{TypeError} core::int;
+        core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -100,22 +100,22 @@
   block {
     final core::List<core::int> #t4 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t5 as{TypeError} core::int;
+          core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t4.{core::List::add}(x);
         }
       }
     }
   } =>#t4;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t6 as{TypeError} core::int;
+        core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -123,11 +123,11 @@
   block {
     final core::List<core::int> #t7 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t8 as{TypeError} core::int;
+          core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t7.{core::List::add}(x);
         }
       }
@@ -170,11 +170,11 @@
     }
   } =>#t10;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t11 as{TypeError} core::int;
+        core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
@@ -182,11 +182,11 @@
   block {
     final core::List<core::int> #t12 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t13 as{TypeError} core::int;
+          core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
           #t12.{core::List::add}(x);
         }
       }
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
index e278731..977e568 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
@@ -22,17 +22,17 @@
     : super core::Object::•()
     ;
   method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B?) {
+    if(t is{ForNonNullableByDefault} self::B?) {
       self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
-      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
         self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
       }
     }
   }
   method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B) {
+    if(t is{ForNonNullableByDefault} self::B) {
       self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
-      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
         self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
       }
     }
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
index e278731..977e568 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
@@ -22,17 +22,17 @@
     : super core::Object::•()
     ;
   method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B?) {
+    if(t is{ForNonNullableByDefault} self::B?) {
       self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
-      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
         self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
       }
     }
   }
   method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B) {
+    if(t is{ForNonNullableByDefault} self::B) {
       self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
-      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
         self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
       }
     }
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
index e278731..977e568 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
@@ -22,17 +22,17 @@
     : super core::Object::•()
     ;
   method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B?) {
+    if(t is{ForNonNullableByDefault} self::B?) {
       self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
-      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
         self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
       }
     }
   }
   method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B) {
+    if(t is{ForNonNullableByDefault} self::B) {
       self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
-      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
         self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
       }
     }
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
index e278731..977e568 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
@@ -22,17 +22,17 @@
     : super core::Object::•()
     ;
   method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B?) {
+    if(t is{ForNonNullableByDefault} self::B?) {
       self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
-      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is self::C?) {
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
         self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
       }
     }
   }
   method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
-    if(t is self::B) {
+    if(t is{ForNonNullableByDefault} self::B) {
       self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
-      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is self::C) {
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
         self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
       }
     }
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
index 182f45e..3327046 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
@@ -118,7 +118,7 @@
 static method fisk() → dynamic async {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError} core::String;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
index b079c14..f87102a 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -186,7 +186,7 @@
         function #s1#initializer() → core::String
           return invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError} core::String;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
         late core::String s1 = #s1#initializer.call();
         function #s2#initializer() → core::String
           return "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
index 182f45e..3327046 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
@@ -118,7 +118,7 @@
 static method fisk() → dynamic async {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError} core::String;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index b079c14..f87102a 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -186,7 +186,7 @@
         function #s1#initializer() → core::String
           return invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
-                   ^^^^^" as{TypeError} core::String;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
         late core::String s1 = #s1#initializer.call();
         function #s2#initializer() → core::String
           return "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
diff --git a/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.strong.expect b/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.strong.expect
index 84b205c4..123a821 100644
--- a/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.strong.expect
@@ -108,22 +108,22 @@
 static method testOptIn() → dynamic {
   self::nullableVar = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
-                ^" in self::nonNullableVar as{TypeError} () →? core::int;
+                ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   self::nonNullableVar = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
-                   ^" in self::nullableVar as{TypeError} core::double;
+                   ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
   mes::legacyVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
-              ^" in self::nullableVar as{TypeError} core::String*;
+              ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
   self::nullableVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
-                ^" in mes::legacyVar as{TypeError} () →? core::int;
+                ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   self::nonNullableVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
-                   ^" in mes::legacyVar as{TypeError} core::double;
+                   ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
   mes::legacyVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
-              ^" in self::nonNullableVar as{TypeError} core::String*;
+              ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.weak.expect
index 84b205c4..123a821 100644
--- a/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart.weak.expect
@@ -108,22 +108,22 @@
 static method testOptIn() → dynamic {
   self::nullableVar = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
-                ^" in self::nonNullableVar as{TypeError} () →? core::int;
+                ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   self::nonNullableVar = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
-                   ^" in self::nullableVar as{TypeError} core::double;
+                   ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
   mes::legacyVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
-              ^" in self::nullableVar as{TypeError} core::String*;
+              ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
   self::nullableVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
-                ^" in mes::legacyVar as{TypeError} () →? core::int;
+                ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   self::nonNullableVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
-                   ^" in mes::legacyVar as{TypeError} core::double;
+                   ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
   mes::legacyVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
-              ^" in self::nonNullableVar as{TypeError} core::String*;
+              ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
 
 library;
diff --git a/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.strong.expect b/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.strong.expect
index 846f621..2b26e9b 100644
--- a/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.strong.expect
@@ -235,20 +235,20 @@
 static method testOptIn() → dynamic {
   mes::nullableVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
-                ^" in mes::nonNullableVar as{TypeError} () →? core::int;
+                ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   mes::nonNullableVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
-                   ^" in mes::nullableVar as{TypeError} core::double;
+                   ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
   self::legacyVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
-              ^" in mes::nullableVar as{TypeError} core::String*;
+              ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
   mes::nullableVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
-                ^" in self::legacyVar as{TypeError} () →? core::int;
+                ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   mes::nonNullableVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
-                   ^" in self::legacyVar as{TypeError} core::double;
+                   ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
   self::legacyVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
-              ^" in mes::nonNullableVar as{TypeError} core::String*;
+              ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
diff --git a/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.weak.expect
index 846f621..2b26e9b 100644
--- a/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/messages_with_types_opt_out.dart.weak.expect
@@ -235,20 +235,20 @@
 static method testOptIn() → dynamic {
   mes::nullableVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = nonNullableVar;
-                ^" in mes::nonNullableVar as{TypeError} () →? core::int;
+                ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   mes::nonNullableVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
   nonNullableVar = nullableVar;
-                   ^" in mes::nullableVar as{TypeError} core::double;
+                   ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
   self::legacyVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
   legacyVar = nullableVar;
-              ^" in mes::nullableVar as{TypeError} core::String*;
+              ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
   mes::nullableVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
   nullableVar = legacyVar;
-                ^" in self::legacyVar as{TypeError} () →? core::int;
+                ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
   mes::nonNullableVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
   nonNullableVar = legacyVar;
-                   ^" in self::legacyVar as{TypeError} core::double;
+                   ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
   self::legacyVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   legacyVar = nonNullableVar;
-              ^" in mes::nonNullableVar as{TypeError} core::String*;
+              ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
 }
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
index 7388400..249b918 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.expect
@@ -57,10 +57,10 @@
 static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
   self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(null as C?); // Error.
-                       ^" in (null as self::C?) as{TypeError} () → core::int);
+                       ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(null as C?); // Error.
-                               ^" in (null as self::C?) as{TypeError} () →? core::int);
+                               ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
   self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(c); // Error.
                   ^" in c as{TypeError} () → core::int);
@@ -69,25 +69,25 @@
                           ^" in c as{TypeError} () →? core::int);
   self::functionContext(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
-                  ^" in t as{TypeError} () → core::int);
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
-                          ^" in t as{TypeError} () →? core::int);
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
   self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
-                  ^" in nt as{TypeError} () → core::int);
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
-                          ^" in nt as{TypeError} () →? core::int);
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
   self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
   self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
   self::functionContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
-                  ^" in t as{TypeError} () → core::int);
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
-                          ^" in t as{TypeError} () →? core::int);
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
index 7388400..249b918 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.strong.transformed.expect
@@ -57,10 +57,10 @@
 static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
   self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(null as C?); // Error.
-                       ^" in (null as self::C?) as{TypeError} () → core::int);
+                       ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
   nullableFunctionContext(null as C?); // Error.
-                               ^" in (null as self::C?) as{TypeError} () →? core::int);
+                               ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
   self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
   functionContext(c); // Error.
                   ^" in c as{TypeError} () → core::int);
@@ -69,25 +69,25 @@
                           ^" in c as{TypeError} () →? core::int);
   self::functionContext(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
-                  ^" in t as{TypeError} () → core::int);
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
-                          ^" in t as{TypeError} () →? core::int);
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
   self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
-                  ^" in nt as{TypeError} () → core::int);
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
-                          ^" in nt as{TypeError} () →? core::int);
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
   self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
   self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
   self::functionContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
-                  ^" in t as{TypeError} () → core::int);
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
-                          ^" in t as{TypeError} () →? core::int);
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
index 3911211..c9f6d6a 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
@@ -55,31 +55,31 @@
 static method functionContext(() → core::int f) → dynamic {}
 static method nullableFunctionContext(() →? core::int f) → dynamic {}
 static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
-  self::functionContext((null as self::C?) as{TypeError} () → core::int);
-  self::nullableFunctionContext((null as self::C?) as{TypeError} () →? core::int);
+  self::functionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
   self::functionContext(c as{TypeError} () → core::int);
   self::nullableFunctionContext(c as{TypeError} () →? core::int);
   self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
-                  ^" in t as{TypeError} () → core::int);
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
-                          ^" in t as{TypeError} () →? core::int);
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
   self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
-                  ^" in nt as{TypeError} () → core::int);
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
-                          ^" in nt as{TypeError} () →? core::int);
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
   self::functionContext(let final self::C #t5 = c in #t5.==(null) ?{() → core::int} null : #t5.{self::C::call});
   self::nullableFunctionContext(let final self::C #t6 = c in #t6.==(null) ?{() → core::int} null : #t6.{self::C::call});
   self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
-                  ^" in t as{TypeError} () → core::int);
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
-                          ^" in t as{TypeError} () →? core::int);
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
index 3911211..c9f6d6a 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
@@ -55,31 +55,31 @@
 static method functionContext(() → core::int f) → dynamic {}
 static method nullableFunctionContext(() →? core::int f) → dynamic {}
 static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
-  self::functionContext((null as self::C?) as{TypeError} () → core::int);
-  self::nullableFunctionContext((null as self::C?) as{TypeError} () →? core::int);
+  self::functionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
   self::functionContext(c as{TypeError} () → core::int);
   self::nullableFunctionContext(c as{TypeError} () →? core::int);
   self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
-                  ^" in t as{TypeError} () → core::int);
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
-                          ^" in t as{TypeError} () →? core::int);
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
   self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
-                  ^" in nt as{TypeError} () → core::int);
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
-                          ^" in nt as{TypeError} () →? core::int);
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
   self::functionContext(let final self::C #t5 = c in #t5.==(null) ?{() → core::int} null : #t5.{self::C::call});
   self::nullableFunctionContext(let final self::C #t6 = c in #t6.==(null) ?{() → core::int} null : #t6.{self::C::call});
   self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
-                  ^" in t as{TypeError} () → core::int);
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
   self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
-                          ^" in t as{TypeError} () →? core::int);
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
index 249511a..3181c17 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
index d0abe78..40aaf93 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return "bar";
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
index d0abe78..40aaf93 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return "bar";
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
index d24cfba..f84f93d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
index e95119b..1f2525d 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.expect
@@ -17,7 +17,7 @@
     return null;
   }
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
index 8e06be7..da816df 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
     return null;
   }
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
   no-such-method-forwarder set foo(core::int* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
index d228612..300cb94 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.outline.expect
@@ -33,7 +33,7 @@
   synthetic constructor •() → self::E*
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
index 928ca75..b85a18a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.expect
@@ -37,7 +37,7 @@
     : super self::D::•()
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
index 928ca75..b85a18a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.strong.transformed.expect
@@ -37,7 +37,7 @@
     : super self::D::•()
     ;
   no-such-method-forwarder get foo() → core::int*
-    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method expectTypeError(() →* dynamic callback) → void {
   try {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
index a96d89a..fc853fa 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.outline.expect
@@ -13,7 +13,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
index 2291f79..375d95c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return <dynamic>[];
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
index 2291f79..375d95c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   method noSuchMethod(core::Invocation* i) → dynamic
     return <dynamic>[];
   no-such-method-forwarder get foo() → core::List<core::int*>*
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::List<core::int*>*;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::List<core::int*>*;
   no-such-method-forwarder set foo(core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)));
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
index 2ad76c7..3adb9f5 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
@@ -19,7 +19,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B = self::A with self::B {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
index 80a80e1..ad2597a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
@@ -21,7 +21,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return null;
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B = self::A with self::B {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect
index 29e5abb..23455fe 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return null;
   no-such-method-forwarder method foo() → dynamic
-    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} dynamic;
 }
 abstract class _C&A&B extends self::A implements self::B {
   synthetic constructor •() → self::_C&A&B*
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.outline.expect
index 235d557..d3a6abd 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.outline.expect
@@ -14,9 +14,9 @@
   synthetic constructor •() → self::B*
     ;
   no-such-method-forwarder method foo({core::String* bar}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#bar: bar}))) as{TypeError} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#bar: bar}))) as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#hest, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#hest, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
index 860c12b..c1ba2a7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.expect
@@ -24,9 +24,9 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo({core::String* bar = #C4}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk = #C5]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::B* b = new self::B::•();
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
index 860c12b..c1ba2a7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.strong.transformed.expect
@@ -24,9 +24,9 @@
     : super self::A::•()
     ;
   no-such-method-forwarder method foo({core::String* bar = #C4}) → core::String*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError} core::String*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))) as{TypeError,ForDynamic} core::String*;
   no-such-method-forwarder method hest([core::int* fisk = #C5]) → core::int*
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError} core::int*;
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   self::B* b = new self::B::•();
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
index d332188..6983d47 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::A*
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} core::int*;
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
index ab2e7eb..64693b8 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
@@ -26,7 +26,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
index daf083f..fe3fabb 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
@@ -29,7 +29,7 @@
     : super self::_A&Object&M::•()
     ;
   no-such-method-forwarder method foo() → core::int*
-    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} core::int*;
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.expect
index ee3a0ca..f7d1185 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.expect
@@ -18,7 +18,7 @@
   dynamic n;
   for (final dynamic #t1 in <dynamic>[1, 2, 3, 4, 5]) {
     n = #t1;
-    f = f.{core::num::*}(n as{TypeError} core::num*) as{TypeError} core::int*;
+    f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
   }
   return f;
 }
@@ -26,7 +26,7 @@
   core::int* f = 1;
   for (final dynamic #t2 in <dynamic>[1, 2, 3, 4, 5, 6]) {
     self::global = #t2;
-    f = f.{core::num::*}(self::global as{TypeError} core::num*) as{TypeError} core::int*;
+    f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
   }
   return f;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
index 024a770..b962902 100644
--- a/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.strong.transformed.expect
@@ -29,7 +29,7 @@
       final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
       {
         n = #t1;
-        f = f.{core::num::*}(n as{TypeError} core::num*) as{TypeError} core::int*;
+        f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
       }
     }
   }
@@ -43,7 +43,7 @@
       final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
       {
         self::global = #t2;
-        f = f.{core::num::*}(self::global as{TypeError} core::num*) as{TypeError} core::int*;
+        f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
       }
     }
   }
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
index c501ddc..9c3fa75 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
@@ -80,12 +80,12 @@
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
-                             ^" as{TypeError} self::C*;
+                             ^" as{TypeError,ForDynamic} self::C*;
 }
 static method b(dynamic c) → invalid-type
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Getter not found: 'd'.
 a b(c) = d;
-         ^" as{TypeError} invalid-type;
+         ^" as{TypeError,ForDynamic} invalid-type;
 static method main() → dynamic {
   self::C* c = null;
   core::print(#C1);
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
index 54451d2..e576061 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
@@ -80,12 +80,12 @@
  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
   C notEvenAConstructor(a) = h;
-                             ^" as{TypeError} self::C*;
+                             ^" as{TypeError,ForDynamic} self::C*;
 }
 static method b(dynamic c) → invalid-type
   return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Getter not found: 'd'.
 a b(c) = d;
-         ^" as{TypeError} invalid-type;
+         ^" as{TypeError,ForDynamic} invalid-type;
 static method main() → dynamic {
   self::C* c = null;
   core::print(#C1);
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.strong.expect b/pkg/front_end/testcases/rasta/parser_error.dart.strong.expect
index d620e90..13f78fd 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.strong.expect
@@ -23,11 +23,11 @@
 static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
   if((invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-      ^" as{TypeError} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
+      ^" as{TypeError,ForDynamic} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-        ^") as{TypeError} core::bool*)
-    return b as{TypeError} core::int*;
-  return a.+(b).+(c) as{TypeError} core::int*;
+        ^") as{TypeError,ForDynamic} core::bool*)
+    return b as{TypeError,ForDynamic} core::int*;
+  return a.+(b).+(c) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/parser_error.dart.strong.transformed.expect
index d620e90..13f78fd 100644
--- a/pkg/front_end/testcases/rasta/parser_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.strong.transformed.expect
@@ -23,11 +23,11 @@
 static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
   if((invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-      ^" as{TypeError} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
+      ^" as{TypeError,ForDynamic} core::bool* ?{dynamic} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
   if (?b) return b;  /// 01: compile-time error
-        ^") as{TypeError} core::bool*)
-    return b as{TypeError} core::int*;
-  return a.+(b).+(c) as{TypeError} core::int*;
+        ^") as{TypeError,ForDynamic} core::bool*)
+    return b as{TypeError,ForDynamic} core::int*;
+  return a.+(b).+(c) as{TypeError,ForDynamic} core::int*;
 }
 static method main() → dynamic {
   exp::Expect::equals(6, self::test(1, b: 2, c: 3));
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.expect
index c41f760..4b6f9c8 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.expect
@@ -91,7 +91,7 @@
     : super core::Object::•()
     ;
   method it1(dynamic x) → dynamic {
-    for (final dynamic #t1 in x as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t1 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
@@ -103,13 +103,13 @@
       print(key);
             ^^^");
     }
-    for (final dynamic #t2 in x as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t2 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Setter not found: 'Fisk'.
     for (Fisk in x) {
          ^^^^";
       core::print(self::Fisk*);
     }
-    for (final dynamic #t3 in x as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t3 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
     for (collection in x) {
          ^^^^^^^^^^";
@@ -117,7 +117,7 @@
       print(collection);
             ^^^^^^^^^^");
     }
-    for (final dynamic #t4 in x as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t4 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Error: Setter not found: 'VoidFunction'.
     for (VoidFunction in x) {
          ^^^^^^^^^^^^";
@@ -127,7 +127,7 @@
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
     for (1 in x) {
          ^";
-      for (final dynamic #t5 in x as{TypeError} core::Iterable<dynamic>*) {
+      for (final dynamic #t5 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
         invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
     for (1 in x) {
          ^";
@@ -143,7 +143,7 @@
 }
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
-  for (final dynamic #t6 in arguments as{TypeError} core::Iterable<dynamic>*) {
+  for (final dynamic #t6 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
   for (key in arguments) {
        ^^^";
@@ -151,13 +151,13 @@
     print(key);
           ^^^");
   }
-  for (final dynamic #t7 in arguments as{TypeError} core::Iterable<dynamic>*) {
+  for (final dynamic #t7 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Error: Setter not found: 'Fisk'.
   for (Fisk in arguments) {
        ^^^^";
     core::print(self::Fisk*);
   }
-  for (final dynamic #t8 in arguments as{TypeError} core::Iterable<dynamic>*) {
+  for (final dynamic #t8 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
   for (collection in arguments) {
        ^^^^^^^^^^";
@@ -165,7 +165,7 @@
     print(collection);
           ^^^^^^^^^^");
   }
-  for (final dynamic #t9 in arguments as{TypeError} core::Iterable<dynamic>*) {
+  for (final dynamic #t9 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Error: Setter not found: 'VoidFunction'.
   for (VoidFunction in arguments) {
        ^^^^^^^^^^^^";
@@ -175,7 +175,7 @@
     invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
   for (1 in arguments) {
        ^";
-    for (final dynamic #t10 in arguments as{TypeError} core::Iterable<dynamic>*) {
+    for (final dynamic #t10 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
       invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
   for (1 in arguments) {
        ^";
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
index e5f407f..1cc912e 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.strong.transformed.expect
@@ -93,7 +93,7 @@
     ;
   method it1(dynamic x) → dynamic {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t1 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -111,7 +111,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -123,7 +123,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t3 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -137,7 +137,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t4 = :sync-for-iterator.{core::Iterator::current};
         {
@@ -153,7 +153,7 @@
     for (1 in x) {
          ^";
       {
-        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+        core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(x as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
         for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
           final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
           {
@@ -175,7 +175,7 @@
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
       {
@@ -189,7 +189,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t7 = :sync-for-iterator.{core::Iterator::current};
       {
@@ -201,7 +201,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
       {
@@ -215,7 +215,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       final dynamic #t9 = :sync-for-iterator.{core::Iterator::current};
       {
@@ -231,7 +231,7 @@
   for (1 in arguments) {
        ^";
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         final dynamic #t10 = :sync-for-iterator.{core::Iterator::current};
         {
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
index 4b691f5..7ababc1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -21,7 +21,7 @@
   for (int i = i;; false) {}
            ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
   for (int i = i;; false) {}
-               ^") as{TypeError} core::int*; ; false) {
+               ^") as{TypeError,ForDynamic} core::int*; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
index 4b691f5..7ababc1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
   for (int i = i;; false) {}
            ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
   for (int i = i;; false) {}
-               ^") as{TypeError} core::int*; ; false) {
+               ^") as{TypeError,ForDynamic} core::int*; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
index ffc6739..ed5c611 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
@@ -23,9 +23,9 @@
 static method bad() → dynamic {
   for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
   for (int i = 0, i > 10; i++) {}
-                  ^" as{TypeError} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
+                  ^" as{TypeError,ForDynamic} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^".>(10) as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+                    ^".>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.transformed.expect
index ffc6739..ed5c611 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.transformed.expect
@@ -23,9 +23,9 @@
 static method bad() → dynamic {
   for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
   for (int i = 0, i > 10; i++) {}
-                  ^" as{TypeError} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
+                  ^" as{TypeError,ForDynamic} core::int*; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
   for (int i = 0, i > 10; i++) {}
-                    ^".>(10) as{TypeError} core::bool*; i = i.{core::num::+}(1)) {
+                    ^".>(10) as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
index 4723bc6..b100603 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.strong.expect
@@ -25,7 +25,7 @@
 static method test2() → core::int* {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
   return (i) ++ (i);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   self::i;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
index 4723bc6..b100603 100644
--- a/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.strong.transformed.expect
@@ -25,7 +25,7 @@
 static method test2() → core::int* {
   return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
   return (i) ++ (i);
-           ^" as{TypeError} core::int*;
+           ^" as{TypeError,ForDynamic} core::int*;
   self::i;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
index 57ea785..5874008 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
@@ -34,6 +34,6 @@
  - 'Type' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named '<'.
 type T = Map<A, B>
-            ^" as{TypeError} invalid-type;
+            ^" as{TypeError,ForDynamic} invalid-type;
 static field invalid-type B;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
index 57ea785..5874008 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
@@ -34,6 +34,6 @@
  - 'Type' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named '<'.
 type T = Map<A, B>
-            ^" as{TypeError} invalid-type;
+            ^" as{TypeError,ForDynamic} invalid-type;
 static field invalid-type B;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect b/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
index d7c940a..555c1a6 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.strong.expect
@@ -29,5 +29,5 @@
 static method main() → dynamic {
   self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
   X x = new Supertype();
-            ^" as{TypeError} self::X*;
+            ^" as{TypeError,ForDynamic} self::X*;
 }
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
index a5bb9cf..a6de672 100644
--- a/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.strong.transformed.expect
@@ -29,5 +29,5 @@
 static method main() → dynamic {
   self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
   X x = new Supertype();
-            ^" as{TypeError} self::X*;
+            ^" as{TypeError,ForDynamic} self::X*;
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.strong.expect b/pkg/front_end/testcases/regress/issue_37681.dart.strong.expect
index 3166bc2..0ea7212 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.strong.expect
@@ -26,13 +26,13 @@
   function f_async_star() → core::int* async* {
     yield 42;
   }
-  await for (dynamic x in (f_async_star.call() as dynamic) as{TypeError} asy::Stream<dynamic>*) {
+  await for (dynamic x in (f_async_star.call() as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
     core::print(x);
   }
   function f_sync_star() → core::int* sync* {
     yield 42;
   }
-  for (dynamic x in (f_sync_star.call() as dynamic) as{TypeError} core::Iterable<dynamic>*) {
+  for (dynamic x in (f_sync_star.call() as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
     core::print(x);
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
index 12c970e..79ba707 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.strong.transformed.expect
@@ -100,7 +100,7 @@
           return :controller_stream;
         }
         {
-          dynamic :stream = (f_async_star.call() as dynamic) as{TypeError} asy::Stream<dynamic>*;
+          dynamic :stream = (f_async_star.call() as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*;
           asy::_asyncStarListenHelper(:stream, :async_op);
           asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           try
@@ -138,7 +138,7 @@
           return new core::_SyncIterable::•<dynamic>(:sync_op);
         }
         {
-          core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((f_sync_star.call() as dynamic) as{TypeError} core::Iterable<dynamic>*).{core::Iterable::iterator};
+          core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>((f_sync_star.call() as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
             dynamic x = :sync-for-iterator.{core::Iterator::current};
             {
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
index af9bd50..a71b9df 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.expect
@@ -13,6 +13,6 @@
   }
 }
 static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
index af9bd50..a71b9df 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.strong.transformed.expect
@@ -13,6 +13,6 @@
   }
 }
 static method g(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::y} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
index 81ef72b..c3985a6 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
@@ -13,15 +13,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
index 81ef72b..c3985a6 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.transformed.expect
@@ -13,15 +13,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = c.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
index 75a8771..55f630b 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
@@ -13,15 +13,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
index 75a8771..55f630b 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.transformed.expect
@@ -13,15 +13,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1}() as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}() as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
index c0b0076..cbf825e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.expect
@@ -13,7 +13,7 @@
     return this.{self::C::_x};
 }
 static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f} as{TypeError} () →* (core::num*) →* void;
+  return c.{self::C::f} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
 }
 static method h(core::int* i) → void {
   core::print("${i}");
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
index c0b0076..cbf825e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
     return this.{self::C::_x};
 }
 static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
-  return c.{self::C::f} as{TypeError} () →* (core::num*) →* void;
+  return c.{self::C::f} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
 }
 static method h(core::int* i) → void {
   core::print("${i}");
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
index 4fe5da3..6014e7af 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
@@ -13,6 +13,6 @@
   }
 }
 static method g(self::C<core::num*>* c) → void {
-  (c.{self::C::y} as{TypeError} (core::num*) →* void).call(1.5);
+  (c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void).call(1.5);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
index 4fe5da3..6014e7af 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.transformed.expect
@@ -13,6 +13,6 @@
   }
 }
 static method g(self::C<core::num*>* c) → void {
-  (c.{self::C::y} as{TypeError} (core::num*) →* void).call(1.5);
+  (c.{self::C::y} as{TypeError,CovarianceCheck} (core::num*) →* void).call(1.5);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
index 30b8696..77f902d 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
@@ -14,15 +14,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
index 30b8696..77f902d 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.transformed.expect
@@ -14,15 +14,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = c.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = c.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = c.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = c.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
index 2e4bee0..974091e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
@@ -14,15 +14,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
index 2e4bee0..974091e 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.transformed.expect
@@ -14,15 +14,15 @@
   }
 }
 static method g1(self::C<core::num*>* c) → void {
-  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1.{core::Object::==}(null) ?{(core::num*) →* void} null : #t1.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   core::print("hello");
   x.call(1.5);
 }
 static method g2(self::C<core::num*>* c) → void {
-  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError} (core::num*) →* void;
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2.{core::Object::==}(null) ?{(core::num*) →* void} null : #t2.{self::C::f1} as{TypeError,CovarianceCheck} (core::num*) →* void;
   x.call(1);
 }
 static method g3(self::C<core::num*>* c) → void {
-  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError} core::List<(core::num*) →* void>*;
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3.{core::Object::==}(null) ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
index 023e6058..61cd6f8e1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
@@ -32,7 +32,7 @@
   method f(covariant generic-covariant-impl core::int* x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
+  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
   x.call("hi");
   new self::E::•().{self::C::g1}(1.5);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
index 023e6058..61cd6f8e1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.transformed.expect
@@ -32,7 +32,7 @@
   method f(covariant generic-covariant-impl core::int* x) → void {}
 }
 static method test() → dynamic {
-  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
+  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}() as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
   x.call("hi");
   new self::E::•().{self::C::g1}(1.5);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
index 873a975..55cc7d2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
@@ -21,19 +21,19 @@
   operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
 }
 static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  b = b.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*);
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*);
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
 }
 static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  self::C::y = self::C::y.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
index 873a975..55cc7d2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.transformed.expect
@@ -21,19 +21,19 @@
   operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
 }
 static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
-  b = b.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  b = b.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test2(self::C* c) → void {
-  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*);
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2).{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*);
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4).{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
 }
 static method test3(self::C* c) → void {
-  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method test4(self::C* c) → void {
-  self::C::y = self::C::y.{self::B::+}(1) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
-  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError} self::B<core::num*, (core::num*) →* void>*;
+  self::C::y = self::C::y.{self::B::+}(1) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2) as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
index 1a716ef..d6df34f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
@@ -54,13 +54,13 @@
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
   let final self::D* #t1 = d in #t1.{self::D::value} = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   self::expect(d.{self::D::setValue}(0), 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → core::Null? {
     let final self::D* #t3 = d in #t3.{self::D::value} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                               ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
index 1a716ef..d6df34f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
@@ -54,13 +54,13 @@
   self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
   let final self::D* #t1 = d in #t1.{self::D::value} = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                             ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   self::expect(d.{self::D::setValue}(0), 1);
   d = new self::D::•(new self::C::•<core::num*>(#C2));
   self::expectTypeError(() → core::Null? {
     let final self::D* #t3 = d in #t3.{self::D::value} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
-                                               ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+                                               ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
   });
   self::expect(d.{self::D::setValue}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 8060719..2d0bf7f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -42,19 +42,19 @@
   set x(self::B<(self::C::T*) →* void>* value) → void {}
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                       ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num*) →* void>* in #t8.{core::Object::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8.{core::Object::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                               ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t8;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
index 8060719..2d0bf7f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
@@ -42,19 +42,19 @@
   set x(self::B<(self::C::T*) →* void>* value) → void {}
 }
 static method test(self::C<core::num*>* c) → void {
-  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*);
-  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  let final self::C<core::num*>* #t5 = c in (#t5.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<core::Object*>*} #t5.{self::C::x} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                       ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
-  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num*) →* void>* in #t8.{core::Object::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t7 = c in let final self::B<(core::num*) →* void>* #t8 = #t7.{self::C::x} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t8.{core::Object::==}(null) ?{self::B<core::Object*>*} #t7.{self::C::x} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
                                                               ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t8;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
index 41e53d1..a93c374 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
@@ -20,9 +20,9 @@
 }
 static method test(self::C<core::num*>* c) → void {
   c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>());
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError} self::B<(core::num*) →* void>* in #t11.{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
+  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
+  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11.{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
index 41e53d1..a93c374 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.transformed.expect
@@ -20,9 +20,9 @@
 }
 static method test(self::C<core::num*>* c) → void {
   c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>());
-  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
-  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
-  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
-  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError} self::B<(core::num*) →* void>* in #t11.{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
+  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()));
+  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()) in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5) in #t5;
+  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in (#t7.{self::C::[]}(#t8) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()) : null;
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10) as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11.{core::Object::==}(null) ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12) in #t12 : #t11;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
index a351f22..28a5438 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
@@ -11,6 +11,6 @@
     return null;
 }
 static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0) as{TypeError} (core::num*) →* void;
+  return c.{self::C::[]}(0) as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
index a351f22..28a5438 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.transformed.expect
@@ -11,6 +11,6 @@
     return null;
 }
 static method test(self::C<core::num*>* c) → (core::num*) →* void {
-  return c.{self::C::[]}(0) as{TypeError} (core::num*) →* void;
+  return c.{self::C::[]}(0) as{TypeError,CovarianceCheck} (core::num*) →* void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.outline.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.outline.expect
index 7d0b0e0..0014b22 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.outline.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.outline.expect
@@ -73,9 +73,9 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     ;
   no-such-method-forwarder get x() → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder method method(self::NoSuchMethod::T* x) → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#method, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder set y(self::NoSuchMethod::T* x) → void
     return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#y=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
   no-such-method-forwarder set x(self::NoSuchMethod::T* value) → void
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.expect
index fa18fb9..e28e55a5 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.expect
@@ -77,9 +77,9 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return 3;
   no-such-method-forwarder get x() → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder method method(self::NoSuchMethod::T* x) → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder set y(self::NoSuchMethod::T* x) → void
     return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
   no-such-method-forwarder set x(self::NoSuchMethod::T* value) → void
@@ -91,10 +91,10 @@
   a.{self::A::method}(3, (core::num* num) → core::Null? {}, "test");
   a.{self::A::method2}(3);
   a.{self::A::x} = 3;
-  core::Map<core::num*, self::Contravariant<core::String*>*>* mapContra = a.{self::A::mapContra} as{TypeError} core::Map<core::num*, self::Contravariant<core::String*>*>*;
-  core::Map<core::num*, (core::String*) →* void>* mapContraFn = a.{self::A::mapContraFn} as{TypeError} core::Map<core::num*, (core::String*) →* void>*;
-  core::Map<core::num*, self::Invariant<core::String*>*>* mapInv = a.{self::A::mapInv} as{TypeError} core::Map<core::num*, self::Invariant<core::String*>*>*;
-  core::Map<core::num*, (core::String*) →* core::String*>* mapInvFn = a.{self::A::mapInvFn} as{TypeError} core::Map<core::num*, (core::String*) →* core::String*>*;
+  core::Map<core::num*, self::Contravariant<core::String*>*>* mapContra = a.{self::A::mapContra} as{TypeError,CovarianceCheck} core::Map<core::num*, self::Contravariant<core::String*>*>*;
+  core::Map<core::num*, (core::String*) →* void>* mapContraFn = a.{self::A::mapContraFn} as{TypeError,CovarianceCheck} core::Map<core::num*, (core::String*) →* void>*;
+  core::Map<core::num*, self::Invariant<core::String*>*>* mapInv = a.{self::A::mapInv} as{TypeError,CovarianceCheck} core::Map<core::num*, self::Invariant<core::String*>*>*;
+  core::Map<core::num*, (core::String*) →* core::String*>* mapInvFn = a.{self::A::mapInvFn} as{TypeError,CovarianceCheck} core::Map<core::num*, (core::String*) →* core::String*>*;
   self::B<core::int*>* b = new self::B::•<core::int*>();
   b.{self::B::x} = 3;
   self::expect(3, b.{self::B::x});
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.transformed.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.transformed.expect
index fa18fb9..e28e55a5 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.strong.transformed.expect
@@ -77,9 +77,9 @@
   method noSuchMethod(core::Invocation* _) → dynamic
     return 3;
   no-such-method-forwarder get x() → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder method method(self::NoSuchMethod::T* x) → self::NoSuchMethod::T*
-    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError} self::NoSuchMethod::T*;
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic} self::NoSuchMethod::T*;
   no-such-method-forwarder set y(self::NoSuchMethod::T* x) → void
     return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
   no-such-method-forwarder set x(self::NoSuchMethod::T* value) → void
@@ -91,10 +91,10 @@
   a.{self::A::method}(3, (core::num* num) → core::Null? {}, "test");
   a.{self::A::method2}(3);
   a.{self::A::x} = 3;
-  core::Map<core::num*, self::Contravariant<core::String*>*>* mapContra = a.{self::A::mapContra} as{TypeError} core::Map<core::num*, self::Contravariant<core::String*>*>*;
-  core::Map<core::num*, (core::String*) →* void>* mapContraFn = a.{self::A::mapContraFn} as{TypeError} core::Map<core::num*, (core::String*) →* void>*;
-  core::Map<core::num*, self::Invariant<core::String*>*>* mapInv = a.{self::A::mapInv} as{TypeError} core::Map<core::num*, self::Invariant<core::String*>*>*;
-  core::Map<core::num*, (core::String*) →* core::String*>* mapInvFn = a.{self::A::mapInvFn} as{TypeError} core::Map<core::num*, (core::String*) →* core::String*>*;
+  core::Map<core::num*, self::Contravariant<core::String*>*>* mapContra = a.{self::A::mapContra} as{TypeError,CovarianceCheck} core::Map<core::num*, self::Contravariant<core::String*>*>*;
+  core::Map<core::num*, (core::String*) →* void>* mapContraFn = a.{self::A::mapContraFn} as{TypeError,CovarianceCheck} core::Map<core::num*, (core::String*) →* void>*;
+  core::Map<core::num*, self::Invariant<core::String*>*>* mapInv = a.{self::A::mapInv} as{TypeError,CovarianceCheck} core::Map<core::num*, self::Invariant<core::String*>*>*;
+  core::Map<core::num*, (core::String*) →* core::String*>* mapInvFn = a.{self::A::mapInvFn} as{TypeError,CovarianceCheck} core::Map<core::num*, (core::String*) →* core::String*>*;
   self::B<core::int*>* b = new self::B::•<core::int*>();
   b.{self::B::x} = 3;
   self::expect(3, b.{self::B::x});
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 12f3b1f..6c70435 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -143,7 +143,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 37;
+  UInt32 formatVersion = 38;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
   UriSource sourceMap;
@@ -776,6 +776,7 @@
 type IsExpression extends Expression {
   Byte tag = 37;
   FileOffset fileOffset;
+  Byte flags (isForNonNullableByDefault);
   Expression operand;
   DartType type;
 }
@@ -783,7 +784,7 @@
 type AsExpression extends Expression {
   Byte tag = 38;
   FileOffset fileOffset;
-  Byte flags (isTypeError);
+  Byte flags (isTypeError,isCovarianceCheck,isForDynamic,isForNonNullableByDefault);
   Expression operand;
   DartType type;
 }
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 2e89ba6..1b452d2 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -3952,6 +3952,7 @@
 
 /// Expression of form `x is T`.
 class IsExpression extends Expression {
+  int flags = 0;
   Expression operand;
   DartType type;
 
@@ -3959,6 +3960,22 @@
     operand?.parent = this;
   }
 
+  // Must match serialized bit positions.
+  static const int FlagForNonNullableByDefault = 1 << 0;
+
+  /// If `true`, this test take the nullability of [type] into account.
+  ///
+  /// This is the case for is-tests written in libraries that are opted in to
+  /// the non nullable by default feature.
+  bool get isForNonNullableByDefault =>
+      flags & FlagForNonNullableByDefault != 0;
+
+  void set isForNonNullableByDefault(bool value) {
+    flags = value
+        ? (flags | FlagForNonNullableByDefault)
+        : (flags & ~FlagForNonNullableByDefault);
+  }
+
   DartType getStaticType(StaticTypeContext context) =>
       context.typeEnvironment.coreTypes.boolRawType(context.nonNullable);
 
@@ -3992,17 +4009,66 @@
 
   // Must match serialized bit positions.
   static const int FlagTypeError = 1 << 0;
+  static const int FlagCovarianceCheck = 1 << 1;
+  static const int FlagForDynamic = 1 << 2;
+  static const int FlagForNonNullableByDefault = 1 << 3;
 
-  /// Indicates the type of error that should be thrown if the check fails.
+  /// If `true`, this test is an implicit down cast.
   ///
-  /// `true` means that a TypeError should be thrown.  `false` means that a
-  /// CastError should be thrown.
+  /// If `true` a TypeError should be thrown. If `false` a CastError should be
+  /// thrown.
   bool get isTypeError => flags & FlagTypeError != 0;
 
   void set isTypeError(bool value) {
     flags = value ? (flags | FlagTypeError) : (flags & ~FlagTypeError);
   }
 
+  /// If `true`, this test is needed to ensure soundness of covariant type
+  /// variables using in contravariant positions.
+  ///
+  /// For instance
+  ///
+  ///    class Class<T> {
+  ///      void Function(T) field;
+  ///      Class(this.field);
+  ///    }
+  ///    main() {
+  ///      Class<num> c = new Class<int>((int i) {});
+  ///      void Function<num> field = c.field; // Check needed on `c.field`
+  ///      field(0.5);
+  ///    }
+  ///
+  /// Here a covariant check `c.field as void Function(num)` is needed because
+  /// the field could be (and indeed is) not a subtype of the static type of
+  /// the expression.
+  bool get isCovarianceCheck => flags & FlagCovarianceCheck != 0;
+
+  void set isCovarianceCheck(bool value) {
+    flags =
+        value ? (flags | FlagCovarianceCheck) : (flags & ~FlagCovarianceCheck);
+  }
+
+  /// If `true`, this is an implicit down cast from an expression of type
+  /// `dynamic`.
+  bool get isForDynamic => flags & FlagForDynamic != 0;
+
+  void set isForDynamic(bool value) {
+    flags = value ? (flags | FlagForDynamic) : (flags & ~FlagForDynamic);
+  }
+
+  /// If `true`, this test take the nullability of [type] into account.
+  ///
+  /// This is the case for is-tests written in libraries that are opted in to
+  /// the non nullable by default feature.
+  bool get isForNonNullableByDefault =>
+      flags & FlagForNonNullableByDefault != 0;
+
+  void set isForNonNullableByDefault(bool value) {
+    flags = value
+        ? (flags | FlagForNonNullableByDefault)
+        : (flags & ~FlagForNonNullableByDefault);
+  }
+
   DartType getStaticType(StaticTypeContext context) => type;
 
   R accept<R>(ExpressionVisitor<R> v) => v.visitAsExpression(this);
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 4604782..aabfcf0 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1726,8 +1726,10 @@
           ..fileOffset = offset;
       case Tag.IsExpression:
         int offset = readOffset();
+        int flags = readByte();
         return new IsExpression(readExpression(), readDartType())
-          ..fileOffset = offset;
+          ..fileOffset = offset
+          ..flags = flags;
       case Tag.AsExpression:
         int offset = readOffset();
         int flags = readByte();
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 92ef6e8..3df06ad 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1597,6 +1597,7 @@
   void visitIsExpression(IsExpression node) {
     writeByte(Tag.IsExpression);
     writeOffset(node.fileOffset);
+    writeByte(node.flags);
     writeNode(node.operand);
     writeNode(node.type);
   }
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 9ed4051..f45810b 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -149,7 +149,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 37;
+  static const int BinaryFormatVersion = 38;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 122f956..6b4328a 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -248,7 +248,8 @@
   }
 
   visitIsExpression(IsExpression node) {
-    return new IsExpression(clone(node.operand), visitType(node.type));
+    return new IsExpression(clone(node.operand), visitType(node.type))
+      ..flags = node.flags;
   }
 
   visitAsExpression(AsExpression node) {
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 015b3b8..06bd220 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1442,13 +1442,27 @@
 
   visitIsExpression(IsExpression node) {
     writeExpression(node.operand, Precedence.BITWISE_OR);
-    writeSpaced('is');
+    writeSpaced(
+        node.isForNonNullableByDefault ? 'is{ForNonNullableByDefault}' : 'is');
     writeType(node.type);
   }
 
   visitAsExpression(AsExpression node) {
     writeExpression(node.operand, Precedence.BITWISE_OR);
-    writeSpaced(node.isTypeError ? 'as{TypeError}' : 'as');
+    List<String> flags = <String>[];
+    if (node.isTypeError) {
+      flags.add('TypeError');
+    }
+    if (node.isCovarianceCheck) {
+      flags.add('CovarianceCheck');
+    }
+    if (node.isForDynamic) {
+      flags.add('ForDynamic');
+    }
+    if (node.isForNonNullableByDefault) {
+      flags.add('ForNonNullableByDefault');
+    }
+    writeSpaced(flags.isNotEmpty ? 'as{${flags.join(',')}}' : 'as');
     writeType(node.type);
   }
 
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
index dd6936e..86e516b 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect
@@ -692,7 +692,7 @@
   class D<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::C<dart.core::int*, #lib::D::Q*, #lib::D::P*> {
     generic-covariant-impl field dart.core::Map<#lib::D::P*, #lib::D::Q*>* foo;
     constructor •(dynamic tt) → #lib::D<#lib::D::P*, #lib::D::Q*>*
-      : #lib::D::foo = tt as{TypeError} dart.core::Map<#lib::D::P*, #lib::D::Q*>*, super #lib::C::•()
+      : #lib::D::foo = tt as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*, super #lib::C::•()
       ;
     method foo2(dynamic y) → dynamic {
       if(y is #lib::A<#lib::D::P*>*) {
@@ -701,7 +701,7 @@
       if(y is #lib::C<dynamic, #lib::D::Q*, dart.core::List<#lib::D::P*>*>*) {
         dart.core::print("22");
       }
-      [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P*, #lib::D::Q*>*] this.{#lib::D::foo} = y as{TypeError} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
+      [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P*, #lib::D::Q*>*] this.{#lib::D::foo} = y as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
     }
     method foo3<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic>(dynamic z) → dynamic {
       if(z is #lib::A<#lib::D::foo3::T1*>*) {
@@ -713,8 +713,8 @@
       return (z as dart.core::Map<#lib::D::foo3::T2*, #lib::D::Q*>*).{dart.core::Map::values};
     }
     method foo4(dynamic w) → dart.core::Map<#lib::D::P*, #lib::D::Q*>* {
-      dart.core::List<dart.core::Map<#lib::D::P*, #lib::D::Q*>*>* list = <dart.core::Map<#lib::D::P*, #lib::D::Q*>*>[w as{TypeError} dart.core::Map<#lib::D::P*, #lib::D::Q*>*];
-      return w as{TypeError} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
+      dart.core::List<dart.core::Map<#lib::D::P*, #lib::D::Q*>*>* list = <dart.core::Map<#lib::D::P*, #lib::D::Q*>*>[w as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*];
+      return w as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
     }
   }
   class E<P extends dart.core::String* = dart.core::String*> extends dart.core::Object {
@@ -754,7 +754,7 @@
     return x as #lib::A<dart.core::int*>*;
   }
   static method foo5(dynamic x) → void {
-    #lib::globalVar = x as{TypeError} dart.core::List<dart.core::Iterable<dynamic>*>*;
+    #lib::globalVar = x as{TypeError,ForDynamic} dart.core::List<dart.core::Iterable<dynamic>*>*;
   }
   static method main() → dynamic {}
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
index 6857da0..f99332f 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
@@ -6,7 +6,7 @@
 RESULT: _T {}?
 ------------ #lib::bool_expressions ------------
 t0* = _Call direct [#lib::foo] ()
-t1 = _TypeCheck (t0 against dart.core::bool) (for #lib::foo() as{TypeError} dart.core::bool*)
+t1 = _TypeCheck (t0 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
 t2* = _Call direct [#lib::bar] ()
 t3* = _Call [dart.core::num::+] (_T (dart.core::int)+, _T (dart.core::_Smi, 1))
 i_0 = _Join [dart.core::int*] (_T (dart.core::_Smi, 0), t3)
@@ -14,13 +14,13 @@
 t6* = _Call direct [#lib::bar] ()
 t7* = _Call direct [#lib::foo] ()
 t8 = _Join [dynamic] (_T (dart.core::bool, true), t7)
-t9 = _TypeCheck (t8 against dart.core::bool) (for (x{dart.core::bool*} ?{dynamic} true : #lib::foo()) as{TypeError} dart.core::bool*)
+t9 = _TypeCheck (t8 against dart.core::bool) (for (x{dart.core::bool*} ?{dynamic} true : #lib::foo()) as{TypeError,ForDynamic} dart.core::bool*)
 t10* = _Call direct [#lib::bar] ()
 t11* = _Call direct [#lib::bar] ()
 t12* = _Call direct [#lib::foo] ()
-t13 = _TypeCheck (t12 against dart.core::bool) (for #lib::foo() as{TypeError} dart.core::bool*)
+t13 = _TypeCheck (t12 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
 t14* = _Call direct [#lib::foo] ()
-t15 = _TypeCheck (t14 against dart.core::bool) (for #lib::foo() as{TypeError} dart.core::bool*)
+t15 = _TypeCheck (t14 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
 y_0 = _Join [dart.core::bool*] (_T (dart.core::bool), _T (dart.core::bool, true))
 RESULT: _T {}?
 ------------ #lib::main ------------
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
index 1817a0f..9b8e411 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
@@ -38,7 +38,7 @@
 t6 = _Call [#lib::A::foo1] (%aa, _T (#lib::B))
 t7 = _Narrow (%aa to _T ANY)
 t8* = _Call get [#lib::A::foo2] (t7)
-t9 = _TypeCheck (t8 against dart.core::int) (for aa.{#lib::A::foo2} as{TypeError} dart.core::int*)
+t9 = _TypeCheck (t8 against dart.core::int) (for aa.{#lib::A::foo2} as{TypeError,ForDynamic} dart.core::int*)
 t10 = _Call set [#lib::A::foo3] (t7, t9)
 t11* = _Call get [#lib::A::foo1] (t7)
 t12* = _Call get [#lib::A::foo2] (t7)
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
index 0186d8b..eba9380 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
@@ -71,10 +71,10 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7* = _Call direct [#lib::foo] (_T (#lib::C3))
-t8 = _TypeCheck (t7 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError} dart.core::bool*)
+t8 = _TypeCheck (t7 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
 x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3))
 t10 = _Call direct [#lib::bar] (x_0)
 RESULT: x_0
@@ -82,10 +82,10 @@
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t1 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t2* = _Call direct [#lib::foo] (_T (#lib::C2))
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t4 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t5* = _Call direct [#lib::foo] (_T (#lib::C3))
-t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError} dart.core::bool*)
+t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t7 = _Call direct [#lib::bar] (_T (#lib::C3))
 x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3))
 RESULT: x_0
@@ -104,7 +104,7 @@
 RESULT: _T {}?
 ------------ #lib::if6b ------------
 %x = _Parameter #0 [_T ANY?]
-t1 = _TypeCheck (%x against dart.core::bool) (for x as{TypeError} dart.core::bool*)
+t1 = _TypeCheck (%x against dart.core::bool) (for x as{TypeError,ForDynamic} dart.core::bool*)
 t2 = _Call direct [#lib::foo] (_T (dart.core::bool, true))
 t3 = _Call direct [#lib::bar] (_T (dart.core::bool, false))
 x_0 = _Join [dynamic] (_T (dart.core::bool, true), _T (dart.core::bool, false))
@@ -138,7 +138,7 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7 = _Call direct [#lib::C4::] (_T (#lib::C4))
 x_0 = _Join [dynamic] (_T (#lib::C3), _T (#lib::C4))
@@ -153,7 +153,7 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7 = _Call direct [#lib::C4::] (_T (#lib::C4))
 t8* = _Call direct [#lib::foo] (_T (dart.core::_GrowableList<#lib::C4>))
@@ -165,7 +165,7 @@
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 x_0 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C2))
 t2* = _Call direct [#lib::foo] (x_0)
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
 t4 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t5 = _Call direct [#lib::bar] (x_0)
 RESULT: x_0
@@ -177,13 +177,13 @@
 t4 = _Call direct [#lib::bar] (_T (#lib::C2))
 t5 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t6* = _Call direct [#lib::bar] (_T (#lib::C3))
-t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x = new #lib::C3::•()) as{TypeError} dart.core::bool*)
+t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
 RESULT: _T (#lib::C3)
 ------------ #lib::loop3 ------------
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t1 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t2* = _Call direct [#lib::foo] (_T (#lib::C2))
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
 t4 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t5 = _Call direct [#lib::bar] (_T (#lib::C2))
 RESULT: _T (#lib::C2)
@@ -204,10 +204,10 @@
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 x_0 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C3))
 t2* = _Call direct [#lib::foo] (x_0)
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
 t4 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t5* = _Call direct [#lib::bar] (_T (#lib::C2))
-t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::bar(x) as{TypeError} dart.core::bool*)
+t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::bar(x) as{TypeError,ForDynamic} dart.core::bool*)
 t7 = _Call direct [#lib::C3::] (_T (#lib::C3))
 x_1 = _Join [dynamic] (x_0, _T (#lib::C2))
 RESULT: x_1
@@ -216,10 +216,10 @@
 x_1 = _Join [dynamic] (_T (#lib::C3), _T (#lib::C2))
 x_0 = _Join [dynamic] (_T (#lib::C1), x_1)
 t3* = _Call direct [#lib::foo] (x_0)
-t4 = _TypeCheck (t3 against dart.core::bool) (for #lib::foo(x) as{TypeError} dart.core::bool*)
+t4 = _TypeCheck (t3 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
 t5 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t6* = _Call direct [#lib::bar] (_T (#lib::C2))
-t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x) as{TypeError} dart.core::bool*)
+t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x) as{TypeError,ForDynamic} dart.core::bool*)
 t8 = _Call direct [#lib::C3::] (_T (#lib::C3))
 RESULT: x_0
 ------------ #lib::try1 ------------
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
index 2e9bc45..d7385b2 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
@@ -40,5 +40,5 @@
   return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
 static method main(core::List<core::String*>* args) → dynamic {
   self::foo1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•());
-  self::foo2(self::getDynamic() as{TypeError} asy::Future<self::A*>*, self::getDynamic() as{TypeError} self::A*, self::getDynamic() as{TypeError} asy::FutureOr<self::A*>*, self::getDynamic() as{TypeError} asy::FutureOr<self::A*>*);
+  self::foo2(self::getDynamic() as{TypeError,ForDynamic} asy::Future<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} self::A*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr<self::A*>*);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
index 21d4662..35e77bc 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
@@ -66,7 +66,7 @@
 static method getDynamic() → dynamic
   return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
 static method getValue() → core::Object* {
-  self::A* aa = self::getDynamic() as{TypeError} self::A*;
+  self::A* aa = self::getDynamic() as{TypeError,ForDynamic} self::A*;
   return [@vm.inferred-type.metadata=!] aa.{self::A::foo}();
 }
 static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCaller1* x) → dynamic
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
index 934ad1b..87ebd0c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
@@ -38,7 +38,7 @@
   new self::B::•();
 }
 static method main(core::List<core::String*>* args) → dynamic {
-  self::use1(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use1(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
   self::allocateB();
-  self::use2(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use2(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
index 7c66149..caa602a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
@@ -67,9 +67,9 @@
   new self::E::•();
 }
 static method main(core::List<core::String*>* args) → dynamic {
-  self::use1(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use1(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
   self::allocateB();
-  self::use2(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use2(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
   self::allocateE();
-  self::use3(new self::Intermediate::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use3(new self::Intermediate::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
index cd59c76..ccedd89 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
@@ -59,7 +59,7 @@
   new self::A::•();
   new self::T1::•();
   new self::T2::•();
-  self::use1(new self::DeepCaller1::•(), self::getDynamic() as{TypeError} self::A*);
-  self::use2(new self::DeepCaller2::•(), self::getDynamic() as{TypeError} self::A*);
+  self::use1(new self::DeepCaller1::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
+  self::use2(new self::DeepCaller2::•(), self::getDynamic() as{TypeError,ForDynamic} self::A*);
   self::setField2(new self::A::•(), new self::T2::•());
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index 062ebf9..4425a1c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -123,7 +123,7 @@
   core::print([@vm.direct-call.metadata=#lib::D::bar??] [@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bar});
   core::print([@vm.direct-call.metadata=#lib::D::bazz??] [@vm.inferred-type.metadata=#lib::T2 (skip check)] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bazz}(1, 2, 3, 4));
   new self::E::•();
-  self::A* xx = self::getDynamic() as{TypeError} self::A*;
+  self::A* xx = self::getDynamic() as{TypeError,ForDynamic} self::A*;
   core::print([@vm.inferred-type.metadata=!] xx.{self::A::bar});
   dynamic yy = self::getDynamic();
   core::print([@vm.inferred-type.metadata=!] yy.twoArg(1, 2, 3));
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
index 9fbf8c0..8b68037 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
@@ -53,10 +53,10 @@
 static method use(dynamic x) → dynamic
   return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(x);
 static method main(core::List<core::String*>* args) → dynamic {
-  self::func1(self::getDynamic() as{TypeError} self::T0*);
+  self::func1(self::getDynamic() as{TypeError,ForDynamic} self::T0*);
   self::use(#C1);
   self::use(new self::A::•().{self::A::method1});
-  self::B* bb = self::getDynamic() as{TypeError} self::B*;
+  self::B* bb = self::getDynamic() as{TypeError,ForDynamic} self::B*;
   [@vm.direct-call.metadata=#lib::C::method2??] [@vm.inferred-type.metadata=!? (skip check)] bb.{self::B::method2}(self::getDynamic());
   self::getDynamic().method3(self::getDynamic());
   new self::T2::•();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
index 44110b0..02808ea 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
@@ -12,7 +12,7 @@
     : super self::A::•()
     ;
 [@vm.procedure-attributes.metadata=hasThisUses:false]  method foo() → core::int*
-    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=! (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B::foo] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num*) as{TypeError} core::int*;
+    return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=! (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=#lib::B::foo] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
 }
 class TearOffDynamicMethod extends core::Object {
 [@vm.procedure-attributes.metadata=hasDynamicUses:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false]  field dynamic bazz;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
index b2c15f7..73eb1d5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
@@ -23,7 +23,7 @@
 [@vm.procedure-attributes.metadata=hasDynamicUses:false,hasThisUses:false,hasNonThisUses:false]  method foo() → core::int*
     return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 3.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=#lib::B::foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo())));
 [@vm.procedure-attributes.metadata=hasDynamicUses:false,hasNonThisUses:false,hasTearOffUses:false]  method doCall(dynamic x) → core::int*
-    return [@vm.call-site-attributes.metadata=receiverType:dynamic] x.call() as{TypeError} core::int*;
+    return [@vm.call-site-attributes.metadata=receiverType:dynamic] x.call() as{TypeError,ForDynamic} core::int*;
 }
 class TearOffSuperMethod extends self::Base {
   synthetic constructor •() → self::TearOffSuperMethod*
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 6441249..29501c7 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -3568,6 +3568,11 @@
   TokenPosition position = ReadPosition();  // read position.
   if (p != NULL) *p = position;
 
+  if (translation_helper_.info().kernel_binary_version() >= 38) {
+    // TODO(alexmarkov): Handle flags.
+    ReadFlags();  // read flags.
+  }
+
   Fragment instructions = BuildExpression();  // read operand.
 
   const AbstractType& type = T.BuildType();  // read type.
@@ -3619,6 +3624,7 @@
   TokenPosition position = ReadPosition();  // read position.
   if (p != NULL) *p = position;
 
+  // TODO(alexmarkov): Handle new flags.
   const uint8_t flags = ReadFlags();  // read flags.
   const bool is_type_error = (flags & (1 << 0)) != 0;
 
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index cf6f13d..4247dae 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -464,6 +464,9 @@
       return;
     case kIsExpression:
       ReadPosition();                    // read position.
+      if (translation_helper_.info().kernel_binary_version() >= 38) {
+        BuildHash(ReadFlags());  // read flags.
+      }
       CalculateExpressionFingerprint();  // read operand.
       CalculateDartTypeFingerprint();    // read type.
       return;
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index b803dcb..9c916a1 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2257,6 +2257,9 @@
       return;
     case kIsExpression:
       ReadPosition();    // read position.
+      if (translation_helper_.info().kernel_binary_version() >= 38) {
+        SkipFlags();  // read flags.
+      }
       SkipExpression();  // read operand.
       SkipDartType();    // read type.
       return;
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 2697f58..9025a13 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -803,6 +803,9 @@
     }
     case kIsExpression:
       helper_.ReadPosition();  // read position.
+      if (translation_helper_.info().kernel_binary_version() >= 38) {
+        helper_.ReadFlags();  // read flags.
+      }
       VisitExpression();       // read operand.
       VisitDartType();         // read type.
       return;
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 54ef994..4d90982 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -63,14 +63,14 @@
   V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x9bfbd6d5)     \
   V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x1a383408) \
   V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x59765a4a)                 \
-  V(_StringBase, _interpolate, StringBaseInterpolate, 0xe5a934d2)              \
+  V(_StringBase, _interpolate, StringBaseInterpolate, 0xc0a650e4)              \
   V(_IntegerImplementation, toDouble, IntegerToDouble, 0x22a26db3)             \
   V(_Double, _add, DoubleAdd, 0x2f5c036a)                                      \
   V(_Double, _sub, DoubleSub, 0x6d3cec71)                                      \
   V(_Double, _mul, DoubleMul, 0x648e67af)                                      \
   V(_Double, _div, DoubleDiv, 0x6d72d7d4)                                      \
-  V(::, min, MathMin, 0x07b1ad15)                                              \
-  V(::, max, MathMax, 0xa40283bc)                                              \
+  V(::, min, MathMin, 0x935b799b)                                              \
+  V(::, max, MathMax, 0xe188dec2)                                              \
   V(::, _doublePow, MathDoublePow, 0x5ae04e61)                                 \
   V(::, _intPow, MathIntPow, 0x569ffd3f)                                       \
   V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0xbe902b89)        \
@@ -191,7 +191,7 @@
   V(_Double, >=, Double_greaterEqualThan, 0x2961f8ee)                          \
   V(_Double, <, Double_lessThan, 0xcbff42e5)                                   \
   V(_Double, <=, Double_lessEqualThan, 0xd2253d90)                             \
-  V(_Double, ==, Double_equal, 0xa7dfa02b)                                     \
+  V(_Double, ==, Double_equal, 0x6a306911)                                     \
   V(_Double, +, Double_add, 0xf7d8da94)                                        \
   V(_Double, -, Double_sub, 0xc8dda725)                                        \
   V(_Double, *, Double_mul, 0x2dac85a2)                                        \
@@ -239,7 +239,7 @@
   V(_IntegerImplementation, *, Integer_mul, 0xefe7fbce)                        \
   V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger,     \
     0xbc75fece)                                                                \
-  V(_IntegerImplementation, ~/, Integer_truncDivide, 0xfb066107)               \
+  V(_IntegerImplementation, ~/, Integer_truncDivide, 0x42d9b723)               \
   V(_IntegerImplementation, unary-, Integer_negate, 0xdb5f0d70)                \
   V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger,     \
     0xb7e724d2)                                                                \
@@ -253,7 +253,7 @@
   V(_IntegerImplementation, _greaterThanFromInteger,                           \
     Integer_greaterThanFromInt, 0x3366ff66)                                    \
   V(_IntegerImplementation, >, Integer_greaterThan, 0xe74b678c)                \
-  V(_IntegerImplementation, ==, Integer_equal, 0xb6faea0e)                     \
+  V(_IntegerImplementation, ==, Integer_equal, 0xdf47652c)                     \
   V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger,           \
     0x39d3cd05)                                                                \
   V(_IntegerImplementation, <, Integer_lessThan, 0xcbff42e5)                   \
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 2061521..2a68fe5 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,7 +20,7 @@
 
 // Both version numbers are inclusive.
 static const uint32_t kMinSupportedKernelFormatVersion = 29;
-static const uint32_t kMaxSupportedKernelFormatVersion = 37;
+static const uint32_t kMaxSupportedKernelFormatVersion = 38;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \