Remove desugaredError

Change-Id: Ide688cb577457a642d989deb8d4c7c638274a1bc
Reviewed-on: https://dart-review.googlesource.com/c/80448
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index f2d6d90..c0b3045 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -787,12 +787,6 @@
       }
     }
 
-    // We finished the invalid body inference, desugar it into its error.
-    if (body is InvalidStatementJudgment) {
-      InvalidStatementJudgment judgment = body;
-      body = new ExpressionStatement(judgment.desugaredError);
-    }
-
     if (builder.kind == ProcedureKind.Setter) {
       if (formals?.parameters == null ||
           formals.parameters.length != 1 ||
@@ -1413,13 +1407,16 @@
         constantContext == ConstantContext.none) {
       addProblem(message.messageObject, message.charOffset, message.length,
           wasHandled: true, context: context);
-      return new Throw(library.loader.instantiateNoSuchMethodError(
-          receiver, name, forest.castArguments(arguments), charOffset,
-          isMethod: !isGetter && !isSetter,
-          isGetter: isGetter,
-          isSetter: isSetter,
-          isStatic: isStatic,
-          isTopLevel: !isStatic && !isSuper));
+      return new SyntheticExpressionJudgment(
+          new Throw(library.loader.instantiateNoSuchMethodError(
+              receiver, name, forest.castArguments(arguments), charOffset,
+              isMethod: !isGetter && !isSetter,
+              isGetter: isGetter,
+              isSetter: isSetter,
+              isStatic: isStatic,
+              isTopLevel: !isStatic && !isSuper))
+            ..fileOffset = charOffset)
+        ..fileOffset = charOffset;
     }
     return buildProblem(
             message.messageObject, message.charOffset, message.length,
@@ -2543,18 +2540,15 @@
   void handleThrowExpression(Token throwToken, Token endToken) {
     debugEvent("ThrowExpression");
     Expression expression = popForValue();
-
-    Expression error;
     if (constantContext != ConstantContext.none) {
-      error = buildProblem(
-              fasta.templateNotConstantExpression.withArguments('Throw'),
-              throwToken.offset,
-              throwToken.length)
-          .desugared;
+      push(buildProblem(
+          fasta.templateNotConstantExpression.withArguments('Throw'),
+          throwToken.offset,
+          throwToken.length));
+    } else {
+      push(new ThrowJudgment(expression)
+        ..fileOffset = offsetForToken(throwToken));
     }
-
-    push(new ThrowJudgment(expression, desugaredError: error)
-      ..fileOffset = offsetForToken(throwToken));
   }
 
   @override
@@ -3013,8 +3007,7 @@
   Expression buildStaticInvocation(Member target, Arguments arguments,
       {Constness constness: Constness.implicit,
       int charOffset: -1,
-      int charLength: noLength,
-      Expression error}) {
+      int charLength: noLength}) {
     // The argument checks for the initial target of redirecting factories
     // invocations are skipped in Dart 1.
     if (library.loader.target.strongMode || !isRedirectingFactory(target)) {
@@ -3026,23 +3019,13 @@
       LocatedMessage argMessage = checkArgumentsForFunction(
           target.function, arguments, charOffset, typeParameters);
       if (argMessage != null) {
-        Expression error = throwNoSuchMethodError(
+        return throwNoSuchMethodError(
             forest.literalNull(null)..fileOffset = charOffset,
             target.name.name,
             arguments,
             charOffset,
             candidate: target,
             message: argMessage);
-        if (target is Constructor) {
-          return new InvalidConstructorInvocationJudgment(
-              error, target, arguments)
-            ..fileOffset = charOffset;
-        } else {
-          return new StaticInvocationJudgment(
-              target, forest.castArguments(arguments),
-              desugaredError: error)
-            ..fileOffset = charOffset;
-        }
       }
     }
 
@@ -3087,7 +3070,7 @@
       } else {
         StaticInvocation node = new StaticInvocationJudgment(
             target, forest.castArguments(arguments),
-            desugaredError: error, isConst: isConst)
+            isConst: isConst)
           ..fileOffset = charOffset;
         library.checkBoundsInStaticInvocation(node, typeEnvironment);
         return node;
@@ -4192,9 +4175,8 @@
   @override
   void handleInvalidStatement(Token token, Message message) {
     Statement statement = pop();
-    push(new InvalidStatementJudgment(
-        buildProblem(message, statement.fileOffset, noLength).desugared,
-        statement));
+    push(new ExpressionStatement(
+        buildProblem(message, statement.fileOffset, noLength).desugared));
   }
 
   @override
@@ -4233,18 +4215,19 @@
       {List<LocatedMessage> context}) {
     // TODO(askesc): Produce explicit error expression wrapping the original.
     // See [issue 29717](https://github.com/dart-lang/sdk/issues/29717)
-    return new SyntheticExpressionJudgment(new Let(
-        new VariableDeclaration.forValue(buildProblem(
-            message.messageObject, message.charOffset, message.length,
-            context: context))
-          ..fileOffset = forest.readOffset(expression),
-        new Let(
-            new VariableDeclaration.forValue(expression)
-              ..fileOffset = forest.readOffset(expression),
-            forest.literalNull(null)
-              ..fileOffset = forest.readOffset(expression))
-          ..fileOffset = forest.readOffset(expression))
-      ..fileOffset = forest.readOffset(expression));
+    int offset = forest.readOffset(expression);
+    if (offset == -1) {
+      offset = message.charOffset;
+    }
+    return new Let(
+        new VariableDeclaration.forValue(
+            buildProblem(
+                    message.messageObject, message.charOffset, message.length,
+                    context: context)
+                .desugared,
+            type: const BottomType())
+          ..fileOffset = offset,
+        expression);
   }
 
   Expression buildFallThroughError(int charOffset) {
@@ -4521,7 +4504,8 @@
     }
     for (Expression argument in expressions.reversed) {
       expression = new Let(
-          new VariableDeclaration.forValue(argument, isFinal: true),
+          new VariableDeclaration.forValue(argument,
+              isFinal: true, type: coreTypes.objectClass.rawType),
           expression);
     }
     return expression;
@@ -4533,19 +4517,17 @@
   @override
   Expression buildMethodInvocation(
       Expression receiver, Name name, Arguments arguments, int offset,
-      {Expression error,
-      bool isConstantExpression: false,
+      {bool isConstantExpression: false,
       bool isNullAware: false,
       bool isImplicitCall: false,
       bool isSuper: false,
       Member interfaceTarget}) {
     if (constantContext != ConstantContext.none && !isConstantExpression) {
-      error = buildProblem(
-              fasta.templateNotConstantExpression
-                  .withArguments('Method invocation'),
-              offset,
-              name.name.length)
-          .desugared;
+      return buildProblem(
+          fasta.templateNotConstantExpression
+              .withArguments('Method invocation'),
+          offset,
+          name.name.length);
     }
     if (isSuper) {
       // We can ignore [isNullAware] on super sends.
@@ -4565,16 +4547,15 @@
         }
         return new SuperMethodInvocationJudgment(
             name, forest.castArguments(arguments),
-            interfaceTarget: target, desugaredError: error)
+            interfaceTarget: target)
           ..fileOffset = offset;
       }
 
-      receiver = new SuperPropertyGetJudgment(name,
-          interfaceTarget: target, desugaredError: error)
+      receiver = new SuperPropertyGetJudgment(name, interfaceTarget: target)
         ..fileOffset = offset;
       MethodInvocation node = new MethodInvocationJudgment(
           receiver, callName, forest.castArguments(arguments),
-          isImplicitCall: true, desugaredError: error)
+          isImplicitCall: true)
         ..fileOffset = forest.readOffset(arguments);
       delayedBoundsChecks.add(node);
       return node;
@@ -4592,15 +4573,12 @@
               new MethodInvocation(new VariableGet(variable), name,
                   forest.castArguments(arguments), interfaceTarget)
                 ..fileOffset = offset)
-            ..fileOffset = offset,
-          desugaredError: error)
+            ..fileOffset = offset)
         ..fileOffset = offset;
     } else {
       MethodInvocation node = new MethodInvocationJudgment(
           receiver, name, forest.castArguments(arguments),
-          isImplicitCall: isImplicitCall,
-          interfaceTarget: interfaceTarget,
-          desugaredError: error)
+          isImplicitCall: isImplicitCall, interfaceTarget: interfaceTarget)
         ..fileOffset = offset;
       delayedBoundsChecks.add(node);
       return node;
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index c7c2b56..3621504 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -71,7 +71,6 @@
         Member,
         Name,
         Procedure,
-        StaticInvocationJudgment,
         SyntheticExpressionJudgment,
         UnresolvedTargetInvocationJudgment,
         VariableDeclaration;
@@ -1063,13 +1062,10 @@
   @override
   /* Expression | Generator | Initializer */ doInvocation(
       int offset, Arguments arguments) {
-    return new StaticInvocationJudgment(null, forest.castArguments(arguments),
-        desugaredError: helper.wrapInLocatedProblem(
-            helper.evaluateArgumentsBefore(
-                arguments, forest.literalNull(token)),
-            messageCantUsePrefixAsExpression.withLocation(
-                helper.uri, offsetForToken(token), lengthForToken(token))))
-      ..fileOffset = offset;
+    return helper.wrapInLocatedProblem(
+        helper.evaluateArgumentsBefore(arguments, forest.literalNull(token)),
+        messageCantUsePrefixAsExpression.withLocation(
+            helper.uri, offsetForToken(token), lengthForToken(token)));
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index a01dbf6..095ae58 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -83,7 +83,7 @@
       [int charOffset = -1]);
 
   Expression buildStaticInvocation(Procedure target, Arguments arguments,
-      {Constness constness, int charOffset, Expression error});
+      {Constness constness, int charOffset});
 
   Expression throwNoSuchMethodError(
       Expression receiver, String name, Arguments arguments, int offset,
@@ -106,8 +106,7 @@
 
   Expression buildMethodInvocation(
       Expression receiver, Name name, Arguments arguments, int offset,
-      {Expression error,
-      bool isConstantExpression,
+      {bool isConstantExpression,
       bool isNullAware,
       bool isImplicitCall,
       bool isSuper,
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 ac897ab..082dbd0 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -566,10 +566,12 @@
 
     int intValue = node.asInt64();
     if (intValue == null) {
-      Expression replacement = inferrer.helper.buildProblem(
-          templateIntegerLiteralIsOutOfRange.withArguments(node.literal),
-          node.fileOffset,
-          node.literal.length);
+      Expression replacement = inferrer.helper
+          .buildProblem(
+              templateIntegerLiteralIsOutOfRange.withArguments(node.literal),
+              node.fileOffset,
+              node.literal.length)
+          .desugared;
       node.parent.replaceChild(node, replacement);
       node.inferredType = const BottomType();
       return null;
@@ -839,11 +841,13 @@
           }
           int intValue = receiver.asInt64(negated: true);
           if (intValue == null) {
-            Expression error = inferrer.helper.buildProblem(
-                templateIntegerLiteralIsOutOfRange
-                    .withArguments(receiver.literal),
-                receiver.fileOffset,
-                receiver.literal.length);
+            Expression error = inferrer.helper
+                .buildProblem(
+                    templateIntegerLiteralIsOutOfRange
+                        .withArguments(receiver.literal),
+                    receiver.fileOffset,
+                    receiver.literal.length)
+                .desugared;
             node.parent.replaceChild(node, error);
             node.inferredType = const BottomType();
             return null;
@@ -869,17 +873,12 @@
         node, node.receiver, node.fileOffset, node._isImplicitCall, typeContext,
         desugaredInvocation: node);
     node.inferredType = inferenceResult.type;
-    if (node.desugaredError != null) {
-      node.parent.replaceChild(node, node.desugaredError);
-      node.parent = null;
-    }
     KernelLibraryBuilder inferrerLibrary = inferrer.library;
     if (!hadExplicitTypeArguments && inferrerLibrary is KernelLibraryBuilder) {
       inferrerLibrary.checkBoundsInMethodInvocation(
           node, inferrer.thisType?.classNode, inferrer.typeSchemaEnvironment,
           inferred: true);
     }
-    return null;
   }
 
   void visitNamedFunctionExpressionJudgment(
@@ -927,6 +926,21 @@
   @override
   void visitNullLiteral(NullLiteral node, DartType typeContext) {}
 
+  @override
+  void visitLet(Let node, DartType typeContext) {
+    DartType variableType = node.variable.type;
+    if (variableType == const DynamicType()) {
+      return defaultExpression(node, typeContext);
+    }
+    Expression initializer = node.variable.initializer;
+    inferrer.inferExpression(initializer, variableType, true,
+        isVoidAllowed: true);
+    Expression body = node.body;
+    inferrer.inferExpression(body, typeContext, true, isVoidAllowed: true);
+    // TODO(ahe): This shouldn't be needed. See InferredTypeVisitor.visitLet.
+    inferrer.storeInferredType(node, getInferredType(body, inferrer));
+  }
+
   void visitPropertyAssignmentJudgment(
       PropertyAssignmentJudgment node, DartType typeContext) {
     var receiverType = node._inferReceiver(inferrer);
@@ -1056,10 +1070,6 @@
     var inferenceResult = inferrer.inferInvocation(typeContext, node.fileOffset,
         calleeType, calleeType.returnType, node.argumentJudgments);
     node.inferredType = inferenceResult.type;
-    if (node.desugaredError != null) {
-      node.parent.replaceChild(node, node.desugaredError);
-      node.parent = null;
-    }
     KernelLibraryBuilder inferrerLibrary = inferrer.library;
     if (!hadExplicitTypeArguments &&
         node.target != null &&
@@ -1068,7 +1078,6 @@
           node, inferrer.typeSchemaEnvironment,
           inferred: true);
     }
-    return null;
   }
 
   @override
@@ -1110,11 +1119,6 @@
         methodName: node.name,
         arguments: node.arguments);
     node.inferredType = inferenceResult.type;
-    if (node.desugaredError != null) {
-      node.parent.replaceChild(node, node.desugaredError);
-      node.parent = null;
-    }
-    return null;
   }
 
   void visitSuperPropertyGetJudgment(
@@ -1125,11 +1129,6 @@
     }
     inferrer.inferPropertyGet(node, null, node.fileOffset, typeContext,
         interfaceMember: node.interfaceTarget, propertyName: node.name);
-    if (node.desugaredError != null) {
-      node.parent.replaceChild(node, node.desugaredError);
-      node.parent = null;
-    }
-    return null;
   }
 
   void visitSwitchStatementJudgment(SwitchStatementJudgment node) {
@@ -1209,23 +1208,6 @@
   void visitThrowJudgment(ThrowJudgment node, DartType typeContext) {
     inferrer.inferExpression(node.judgment, const UnknownType(), false);
     node.inferredType = const BottomType();
-    if (node.desugaredError != null) {
-      node.parent.replaceChild(node, node.desugaredError);
-      node.parent = null;
-    }
-    return null;
-  }
-
-  void visitInvalidStatementJudgment(InvalidStatementJudgment node) {
-    inferrer.inferStatement(node.statement);
-
-    // If this judgment is a part of a Block, replace it there.
-    // Otherwise, the parent would be a FunctionNode, but not yet.
-    if (node.parent is Block) {
-      node.parent
-          .replaceChild(node, new ExpressionStatement(node.desugaredError));
-      node.parent = null;
-    }
   }
 
   void visitCatchJudgment(CatchJudgment node) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/inferred_type_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inferred_type_visitor.dart
index cd519f2..14a226f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inferred_type_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inferred_type_visitor.dart
@@ -129,4 +129,12 @@
   DartType visitStringLiteral(StringLiteral node, TypeInferrerImpl inferrer) {
     return inferrer.coreTypes.stringClass.rawType;
   }
+
+  @override
+  DartType visitLet(Let node, TypeInferrerImpl inferrer) {
+    // TODO(ahe): We should be able to return the inferred type of
+    // node.body. However, that type may be lost, for example, in
+    // VariableAssignmentJudgment._replaceWithDesugared.
+    return inferrer.readInferredType(node);
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index b5d8659..867c8ce 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -100,7 +100,6 @@
         IllegalAssignmentJudgment,
         IndexAssignmentJudgment,
         InvalidConstructorInvocationJudgment,
-        InvalidStatementJudgment,
         InvalidSuperInitializerJudgment,
         InvalidWriteJudgment,
         ShadowInvalidFieldInitializer,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index 1fefee5..21477ae 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -1129,27 +1129,23 @@
 
   @override
   Expression doInvocation(int offset, Arguments arguments) {
-    Expression error;
     if (helper.constantContext != ConstantContext.none &&
         !helper.isIdentical(readTarget)) {
-      error = helper
-          .buildProblem(
-              templateNotConstantExpression.withArguments('Method invocation'),
-              offset,
-              readTarget?.name?.name?.length ?? 0)
-          .desugared;
+      return helper.buildProblem(
+          templateNotConstantExpression.withArguments('Method invocation'),
+          offset,
+          readTarget?.name?.name?.length ?? 0);
     }
     if (readTarget == null || isFieldOrGetter(readTarget)) {
       return helper.buildMethodInvocation(buildSimpleRead(), callName,
           arguments, offset + (readTarget?.name?.name?.length ?? 0),
-          error: error,
           // This isn't a constant expression, but we have checked if a
           // constant expression error should be emitted already.
           isConstantExpression: true,
           isImplicitCall: true);
     } else {
       return helper.buildStaticInvocation(readTarget, arguments,
-          charOffset: offset, error: error);
+          charOffset: offset);
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 9fe645e..da38624 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -1112,7 +1112,6 @@
 /// Shadow object for [MethodInvocation].
 class MethodInvocationJudgment extends MethodInvocation
     implements ExpressionJudgment {
-  final kernel.Expression desugaredError;
   DartType inferredType;
 
   /// Indicates whether this method invocation is a call to a `call` method
@@ -1121,7 +1120,7 @@
 
   MethodInvocationJudgment(
       Expression receiver, Name name, ArgumentsJudgment arguments,
-      {this.desugaredError, bool isImplicitCall: false, Member interfaceTarget})
+      {bool isImplicitCall: false, Member interfaceTarget})
       : _isImplicitCall = isImplicitCall,
         super(receiver, name, arguments, interfaceTarget);
 
@@ -1165,12 +1164,10 @@
 ///     let v = a in v == null ? null : v.b(...)
 class NullAwareMethodInvocationJudgment extends Let
     implements ExpressionJudgment {
-  final kernel.Expression desugaredError;
   DartType inferredType;
 
   NullAwareMethodInvocationJudgment(
-      VariableDeclaration variable, Expression body,
-      {this.desugaredError})
+      VariableDeclaration variable, Expression body)
       : super(variable, body);
 
   @override
@@ -1348,11 +1345,10 @@
 /// Shadow object for [StaticInvocation].
 class StaticInvocationJudgment extends StaticInvocation
     implements ExpressionJudgment {
-  final kernel.Expression desugaredError;
   DartType inferredType;
 
   StaticInvocationJudgment(Procedure target, ArgumentsJudgment arguments,
-      {this.desugaredError, bool isConst: false})
+      {bool isConst: false})
       : super(target, arguments, isConst: isConst);
 
   ArgumentsJudgment get argumentJudgments => arguments;
@@ -1380,11 +1376,10 @@
 /// Shadow object for [SuperMethodInvocation].
 class SuperMethodInvocationJudgment extends SuperMethodInvocation
     implements ExpressionJudgment {
-  final kernel.Expression desugaredError;
   DartType inferredType;
 
   SuperMethodInvocationJudgment(Name name, ArgumentsJudgment arguments,
-      {this.desugaredError, Procedure interfaceTarget})
+      {Procedure interfaceTarget})
       : super(name, arguments, interfaceTarget);
 
   ArgumentsJudgment get argumentJudgments => arguments;
@@ -1398,11 +1393,9 @@
 /// Shadow object for [SuperPropertyGet].
 class SuperPropertyGetJudgment extends SuperPropertyGet
     implements ExpressionJudgment {
-  final kernel.Expression desugaredError;
   DartType inferredType;
 
-  SuperPropertyGetJudgment(Name name,
-      {this.desugaredError, Member interfaceTarget})
+  SuperPropertyGetJudgment(Name name, {Member interfaceTarget})
       : super(name, interfaceTarget);
 
   @override
@@ -1555,14 +1548,11 @@
 }
 
 class ThrowJudgment extends Throw implements ExpressionJudgment {
-  final kernel.Expression desugaredError;
-
   DartType inferredType;
 
   Expression get judgment => expression;
 
-  ThrowJudgment(Expression expression, {this.desugaredError})
-      : super(expression);
+  ThrowJudgment(Expression expression) : super(expression);
 
   @override
   void acceptInference(InferenceVistor visitor, DartType typeContext) {
@@ -1570,22 +1560,6 @@
   }
 }
 
-/// Synthetic judgment class representing a statement that is not allowed at
-/// the location it was found, and should be replaced with an error.
-class InvalidStatementJudgment extends ExpressionStatement
-    implements StatementJudgment {
-  final kernel.Expression desugaredError;
-  final StatementJudgment statement;
-
-  InvalidStatementJudgment(this.desugaredError, this.statement)
-      : super(new NullLiteral());
-
-  @override
-  void acceptInference(InferenceVistor visitor) {
-    return visitor.visitInvalidStatementJudgment(this);
-  }
-}
-
 /// Concrete shadow object representing a catch clause.
 class CatchJudgment extends Catch {
   CatchJudgment(VariableDeclaration exception, Statement body,
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index 026ee98..704126d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -2,7 +2,20 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
 
-import 'package:kernel/ast.dart' show TypeParameter;
+import 'package:kernel/ast.dart'
+    show
+        BottomType,
+        DartType,
+        DartTypeVisitor,
+        DynamicType,
+        FunctionType,
+        InterfaceType,
+        InvalidType,
+        NamedType,
+        TypeParameter,
+        TypeParameterType,
+        TypedefType,
+        VoidType;
 
 import 'package:kernel/type_algebra.dart' show containsTypeVariable;
 
@@ -773,3 +786,55 @@
     }
   }
 }
+
+/// Returns true if [type] contains any type variables whatsoever. This should
+/// only be used for working around transitional issues.
+// TODO(ahe): Remove this method.
+bool hasAnyTypeVariables(DartType type) {
+  return type.accept(const TypeVariableSearch());
+}
+
+/// Don't use this directly, use [hasAnyTypeVariables] instead. But don't use
+/// that either.
+// TODO(ahe): Remove this class.
+class TypeVariableSearch implements DartTypeVisitor<bool> {
+  const TypeVariableSearch();
+
+  bool defaultDartType(DartType node) => throw "unsupported";
+
+  bool anyTypeVariables(List<DartType> types) {
+    for (DartType type in types) {
+      if (type.accept(this)) return true;
+    }
+    return false;
+  }
+
+  bool visitInvalidType(InvalidType node) => false;
+
+  bool visitDynamicType(DynamicType node) => false;
+
+  bool visitVoidType(VoidType node) => false;
+
+  bool visitBottomType(BottomType node) => false;
+
+  bool visitInterfaceType(InterfaceType node) {
+    return anyTypeVariables(node.typeArguments);
+  }
+
+  bool visitFunctionType(FunctionType node) {
+    if (anyTypeVariables(node.positionalParameters)) return true;
+    for (TypeParameter variable in node.typeParameters) {
+      if (variable.bound.accept(this)) return true;
+    }
+    for (NamedType type in node.namedParameters) {
+      if (type.type.accept(this)) return true;
+    }
+    return false;
+  }
+
+  bool visitTypeParameterType(TypeParameterType node) => true;
+
+  bool visitTypedefType(TypedefType node) {
+    return anyTypeVariables(node.typeArguments);
+  }
+}
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 90ff6c2..145c84d 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
@@ -112,6 +112,8 @@
 
 import '../source/source_loader.dart' show SourceLoader;
 
+import '../kernel/type_algorithms.dart' show hasAnyTypeVariables;
+
 import 'inference_helper.dart' show InferenceHelper;
 
 import 'interface_resolver.dart' show ForwardingNode, SyntheticAccessor;
@@ -715,7 +717,17 @@
       // Error: not assignable.  Perform error recovery.
       var parent = expression.parent;
       var errorNode = helper.wrapInProblem(
-          expression,
+          new AsExpression(
+              expression,
+              // TODO(ahe): The outline phase doesn't correctly remove invalid
+              // uses of type variables, for example, on static members. Once
+              // that has been fixed, we should always be able to use
+              // [expectedType] directly here.
+              hasAnyTypeVariables(expectedType)
+                  ? const BottomType()
+                  : expectedType)
+            ..isTypeError = true
+            ..fileOffset = expression.fileOffset,
           (template ?? templateInvalidAssignment)
               .withArguments(actualType, expectedType),
           noLength);
@@ -804,10 +816,12 @@
           new Let(
               new VariableDeclaration.forValue(receiver)
                 ..fileOffset = receiver.fileOffset,
-              helper.buildProblem(
-                  errorTemplate.withArguments(name.name, receiverType),
-                  fileOffset,
-                  length))
+              helper
+                  .buildProblem(
+                      errorTemplate.withArguments(name.name, receiverType),
+                      fileOffset,
+                      length)
+                  .desugared)
             ..fileOffset = fileOffset);
     }
     return interfaceMember;
diff --git a/pkg/front_end/testcases/accessors.dart.direct.expect b/pkg/front_end/testcases/accessors.dart.direct.expect
index 9d3bdd4..a9452ce 100644
--- a/pkg/front_end/testcases/accessors.dart.direct.expect
+++ b/pkg/front_end/testcases/accessors.dart.direct.expect
@@ -53,7 +53,7 @@
 }
 static method main() → dynamic {
   try {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#onlySetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#onlySetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     throw "No error thrown";
   }
   on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
diff --git a/pkg/front_end/testcases/accessors.dart.direct.transformed.expect b/pkg/front_end/testcases/accessors.dart.direct.transformed.expect
index c6c025f..762a85e 100644
--- a/pkg/front_end/testcases/accessors.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/accessors.dart.direct.transformed.expect
@@ -39,7 +39,7 @@
 }
 static method main() → dynamic {
   try {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#onlySetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#onlySetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     throw "No error thrown";
   }
   on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
diff --git a/pkg/front_end/testcases/argument_mismatch.dart.direct.expect b/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
index 9f5b485..3716c84 100644
--- a/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
+++ b/pkg/front_end/testcases/argument_mismatch.dart.direct.expect
@@ -7,11 +7,6 @@
 // pkg/front_end/testcases/argument_mismatch.dart:7:29: Context: Found this candidate, but the arguments don't match.
 // /*@context=CandidateFound*/ foo() {}
 //                             ^^^
-//
-// pkg/front_end/testcases/argument_mismatch.dart:10:34: Warning: Too many positional arguments: 0 allowed, but 1 found.
-// Try removing the extra positional arguments.
-//   /*@warning=MethodNotFound*/ foo(null);
-//                                  ^
 
 library;
 import self as self;
diff --git a/pkg/front_end/testcases/bug21938.dart.strong.expect b/pkg/front_end/testcases/bug21938.dart.strong.expect
index aebfc5d..08cc80d 100644
--- a/pkg/front_end/testcases/bug21938.dart.strong.expect
+++ b/pkg/front_end/testcases/bug21938.dart.strong.expect
@@ -22,16 +22,16 @@
 static method test() → dynamic {
   core::Object x;
   core::Function f;
-  let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:10:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+  let final dynamic #t1 = x in invalid-expression "pkg/front_end/testcases/bug21938.dart:10:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x /*@error=UndefinedMethod*/ ();
    ^";
-  let final dynamic #t2 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:11:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+  let final dynamic #t2 = x in invalid-expression "pkg/front_end/testcases/bug21938.dart:11:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x /*@error=UndefinedMethod*/ (3);
    ^";
   f.call(5, 2);
-  let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:13:33: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+  let final dynamic #t3 = x in invalid-expression "pkg/front_end/testcases/bug21938.dart:13:33: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x. /*@error=UndefinedMethod*/ call();
                                 ^^^^";
diff --git a/pkg/front_end/testcases/bug32414a.dart.strong.expect b/pkg/front_end/testcases/bug32414a.dart.strong.expect
index bef880c..8e0e0b72 100644
--- a/pkg/front_end/testcases/bug32414a.dart.strong.expect
+++ b/pkg/front_end/testcases/bug32414a.dart.strong.expect
@@ -12,9 +12,9 @@
 static method test() → void {
   dynamic a = 5;
   core::String b = a.{core::Object::toString}();
-  b = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  b = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   b = 42;
-      ^" in let final dynamic #t2 = 42 in null;
+      ^" in 42 as{TypeError} core::String;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/bug32414a.dart.strong.transformed.expect b/pkg/front_end/testcases/bug32414a.dart.strong.transformed.expect
index 079972f..3fdd972 100644
--- a/pkg/front_end/testcases/bug32414a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/bug32414a.dart.strong.transformed.expect
@@ -5,9 +5,9 @@
 static method test() → void {
   dynamic a = 5;
   core::String b = a.{core::Object::toString}();
-  b = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  b = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   b = 42;
-      ^" in let final core::int #t2 = 42 in null;
+      ^" in 42 as{TypeError} core::String;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/bug33298.dart.strong.expect b/pkg/front_end/testcases/bug33298.dart.strong.expect
index 7e67d70..6e3697a 100644
--- a/pkg/front_end/testcases/bug33298.dart.strong.expect
+++ b/pkg/front_end/testcases/bug33298.dart.strong.expect
@@ -39,9 +39,9 @@
   core::List<core::String> list4 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(let final self::B<core::String> #t2 = b in #t2.==(null) ?{(core::String) → core::String} null : #t2.{self::B::call}).{core::Iterable::toList}();
   self::C c = new self::C::•();
   core::List<core::String> list5 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(c.{self::C::call}<core::String>).{core::Iterable::toList}();
-  core::List<core::String> list6 = <core::String>["a", "b", "c"].{core::Iterable::map}<dynamic>(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug33298.dart:28:44: Error: The argument type '<T extends dart.core::Object = dynamic>(#lib1::C::call::T) \u8594 #lib1::C::call::T' can't be assigned to the parameter type '(dart.core::String) \u8594 dynamic'.
+  core::List<core::String> list6 = <core::String>["a", "b", "c"].{core::Iterable::map}<dynamic>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/bug33298.dart:28:44: Error: The argument type '<T extends dart.core::Object = dynamic>(#lib1::C::call::T) \u8594 #lib1::C::call::T' can't be assigned to the parameter type '(dart.core::String) \u8594 dynamic'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::String) \u8594 dynamic'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
-                                           ^" in let final dynamic #t4 = let final self::C #t5 = c in #t5.==(null) ?{<T extends core::Object = dynamic>(self::C::call::T) → self::C::call::T} null : #t5.{self::C::call} in null).{core::Iterable::toList}() as{TypeError} core::List<core::String>;
+                                           ^" in (let final self::C #t4 = c in #t4.==(null) ?{<T extends core::Object = dynamic>(self::C::call::T) → self::C::call::T} null : #t4.{self::C::call}) as{TypeError} (core::String) → dynamic).{core::Iterable::toList}() as{TypeError} core::List<core::String>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/bug33298.dart.strong.transformed.expect b/pkg/front_end/testcases/bug33298.dart.strong.transformed.expect
index d874875..03d367a 100644
--- a/pkg/front_end/testcases/bug33298.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/bug33298.dart.strong.transformed.expect
@@ -32,9 +32,9 @@
   core::List<core::String> list4 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(let final self::B<core::String> #t2 = b in #t2.==(null) ?{(core::String) → core::String} null : #t2.{self::B::call}).{core::Iterable::toList}();
   self::C c = new self::C::•();
   core::List<core::String> list5 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(c.{self::C::call}<core::String>).{core::Iterable::toList}();
-  core::List<core::String> list6 = <core::String>["a", "b", "c"].{core::Iterable::map}<dynamic>(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/bug33298.dart:28:44: Error: The argument type '<T extends dart.core::Object = dynamic>(#lib1::C::call::T) \u8594 #lib1::C::call::T' can't be assigned to the parameter type '(dart.core::String) \u8594 dynamic'.
+  core::List<core::String> list6 = <core::String>["a", "b", "c"].{core::Iterable::map}<dynamic>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/bug33298.dart:28:44: Error: The argument type '<T extends dart.core::Object = dynamic>(#lib1::C::call::T) \u8594 #lib1::C::call::T' can't be assigned to the parameter type '(dart.core::String) \u8594 dynamic'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::String) \u8594 dynamic'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
-                                           ^" in let final <T extends core::Object = dynamic>(self::C::call::T) → self::C::call::T #t4 = let final self::C #t5 = c in #t5.==(null) ?{<T extends core::Object = dynamic>(self::C::call::T) → self::C::call::T} null : #t5.{self::C::call} in null).{core::Iterable::toList}() as{TypeError} core::List<core::String>;
+                                           ^" in (let final self::C #t4 = c in #t4.==(null) ?{<T extends core::Object = dynamic>(self::C::call::T) → self::C::call::T} null : #t4.{self::C::call}) as{TypeError} (core::String) → dynamic).{core::Iterable::toList}() as{TypeError} core::List<core::String>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/continue_inference_after_error.dart b/pkg/front_end/testcases/continue_inference_after_error.dart
new file mode 100644
index 0000000..edcb626
--- /dev/null
+++ b/pkg/front_end/testcases/continue_inference_after_error.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "continue_inference_after_error_lib.dart" as lib;
+
+class C {}
+
+test() {
+  lib(new C().missing());
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/continue_inference_after_error.dart.direct.expect b/pkg/front_end/testcases/continue_inference_after_error.dart.direct.expect
new file mode 100644
index 0000000..f613c96
--- /dev/null
+++ b/pkg/front_end/testcases/continue_inference_after_error.dart.direct.expect
@@ -0,0 +1,21 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+//   lib(new C().missing());
+//   ^^^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+  lib(new C().missing());
+  ^^^" in let final core::Object #t2 = new self::C::•().missing() in null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/continue_inference_after_error.dart.direct.transformed.expect b/pkg/front_end/testcases/continue_inference_after_error.dart.direct.transformed.expect
new file mode 100644
index 0000000..fab5a56
--- /dev/null
+++ b/pkg/front_end/testcases/continue_inference_after_error.dart.direct.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+  lib(new C().missing());
+  ^^^" in let final core::Object #t2 = new self::C::•().missing() in null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/continue_inference_after_error.dart.outline.expect b/pkg/front_end/testcases/continue_inference_after_error.dart.outline.expect
new file mode 100644
index 0000000..e2e68b1
--- /dev/null
+++ b/pkg/front_end/testcases/continue_inference_after_error.dart.outline.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/continue_inference_after_error.dart.strong.expect b/pkg/front_end/testcases/continue_inference_after_error.dart.strong.expect
new file mode 100644
index 0000000..b8eb6f4
--- /dev/null
+++ b/pkg/front_end/testcases/continue_inference_after_error.dart.strong.expect
@@ -0,0 +1,29 @@
+// Formatted problems:
+//
+// pkg/front_end/testcases/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+//   lib(new C().missing());
+//   ^^^
+//
+// pkg/front_end/testcases/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class '#lib1::C'.
+// Try correcting the name to the name of an existing method, or defining a method named 'missing'.
+//   lib(new C().missing());
+//               ^^^^^^^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+  lib(new C().missing());
+  ^^^" in let final core::Object #t2 = let final dynamic #t3 = new self::C::•() in invalid-expression "pkg/front_end/testcases/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing method, or defining a method named 'missing'.
+  lib(new C().missing());
+              ^^^^^^^" in null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/continue_inference_after_error.dart.strong.transformed.expect b/pkg/front_end/testcases/continue_inference_after_error.dart.strong.transformed.expect
new file mode 100644
index 0000000..5a51aa3
--- /dev/null
+++ b/pkg/front_end/testcases/continue_inference_after_error.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+  lib(new C().missing());
+  ^^^" in let final core::Object #t2 = let final self::C #t3 = new self::C::•() in invalid-expression "pkg/front_end/testcases/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing method, or defining a method named 'missing'.
+  lib(new C().missing());
+              ^^^^^^^" in null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/continue_inference_after_error_lib.dart b/pkg/front_end/testcases/continue_inference_after_error_lib.dart
new file mode 100644
index 0000000..87869b0
--- /dev/null
+++ b/pkg/front_end/testcases/continue_inference_after_error_lib.dart
@@ -0,0 +1,3 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
diff --git a/pkg/front_end/testcases/duplicated_declarations.dart.direct.expect b/pkg/front_end/testcases/duplicated_declarations.dart.direct.expect
index 200433c..bdfb562 100644
--- a/pkg/front_end/testcases/duplicated_declarations.dart.direct.expect
+++ b/pkg/front_end/testcases/duplicated_declarations.dart.direct.expect
@@ -253,7 +253,7 @@
 }
 class Sub extends core::Object {
   constructor •() → self::Sub
-    : final dynamic #t1 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Object, 0, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[null]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t1 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Object, 0, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[null]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
   method m() → dynamic
     return super.m();
diff --git a/pkg/front_end/testcases/duplicated_declarations.dart.direct.transformed.expect b/pkg/front_end/testcases/duplicated_declarations.dart.direct.transformed.expect
index 11fc84d..9782b0f 100644
--- a/pkg/front_end/testcases/duplicated_declarations.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/duplicated_declarations.dart.direct.transformed.expect
@@ -97,7 +97,7 @@
 }
 class Sub extends core::Object {
   constructor •() → self::Sub
-    : final dynamic #t1 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Object, 0, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[null]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t1 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Object, 0, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[null]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
   method m() → dynamic
     return super.m();
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
index e3781de..5697f43 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
@@ -6,5 +6,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
   return () → dart.core::Null {
-    main::A::debugExpr::T k = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'main::A<dynamic>' can't be assigned to a variable of type 'T'.\nTry changing the type of the left hand side, or casting the right hand side to 'T'.\n  T k = new A();\n            ^" in let final dynamic #t2 = new main::A::•<dynamic>() in null;
+    main::A::debugExpr::T k = let final<BottomType> #t1 = invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'main::A<dynamic>' can't be assigned to a variable of type 'T'.\nTry changing the type of the left hand side, or casting the right hand side to 'T'.\n  T k = new A();\n            ^" in new main::A::•<dynamic>() as{TypeError} <BottomType>;
   };
diff --git a/pkg/front_end/testcases/expressions.dart.direct.expect b/pkg/front_end/testcases/expressions.dart.direct.expect
index 158f1ec..d171a65 100644
--- a/pkg/front_end/testcases/expressions.dart.direct.expect
+++ b/pkg/front_end/testcases/expressions.dart.direct.expect
@@ -75,7 +75,7 @@
   core::print(core::int);
   core::print(let final dynamic #t5 = core::int in let final dynamic #t6 = #t5.toString() in #t5);
   try {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#int.toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#int.toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     throw "Shouldn't work";
   }
   on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
diff --git a/pkg/front_end/testcases/expressions.dart.direct.transformed.expect b/pkg/front_end/testcases/expressions.dart.direct.transformed.expect
index 04022a3..50a474a 100644
--- a/pkg/front_end/testcases/expressions.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/expressions.dart.direct.transformed.expect
@@ -69,7 +69,7 @@
   core::print(core::int);
   core::print(let final dynamic #t5 = core::int in let final dynamic #t6 = #t5.toString() in #t5);
   try {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#int.toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#int.toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     throw "Shouldn't work";
   }
   on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
diff --git a/pkg/front_end/testcases/implicit_new.dart.direct.expect b/pkg/front_end/testcases/implicit_new.dart.direct.expect
index d2fd4b41..a61a281 100644
--- a/pkg/front_end/testcases/implicit_new.dart.direct.expect
+++ b/pkg/front_end/testcases/implicit_new.dart.direct.expect
@@ -35,8 +35,8 @@
   operator []=(dynamic _a, dynamic _b) → void {}
 }
 static method testNSM() → dynamic {
-  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  dynamic y = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
 static method f(dynamic x) → dynamic
   return x;
diff --git a/pkg/front_end/testcases/implicit_new.dart.direct.transformed.expect b/pkg/front_end/testcases/implicit_new.dart.direct.transformed.expect
index 5a42d71..3c0f68f 100644
--- a/pkg/front_end/testcases/implicit_new.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/implicit_new.dart.direct.transformed.expect
@@ -25,8 +25,8 @@
   operator []=(dynamic _a, dynamic _b) → void {}
 }
 static method testNSM() → dynamic {
-  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  dynamic y = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
 static method f(dynamic x) → dynamic
   return x;
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
index 6cc9547..1f9b70e 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
@@ -28,7 +28,7 @@
 }
 static method test() → void {
   dynamic x = throw new core::AbstractClassInstantiationError::•("C");
-  dynamic y = let final dynamic #t1 = 1 in throw new core::AbstractClassInstantiationError::•("D");
-  self::D<core::List<core::int>> z = let final dynamic #t2 = <dynamic>[] in throw new core::AbstractClassInstantiationError::•("D");
+  dynamic y = let final core::Object #t1 = 1 in throw new core::AbstractClassInstantiationError::•("D");
+  self::D<core::List<core::int>> z = let final core::Object #t2 = <dynamic>[] in throw new core::AbstractClassInstantiationError::•("D");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.transformed.expect
index 34e2a90..50af77d 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.transformed.expect
@@ -14,7 +14,7 @@
 }
 static method test() → void {
   dynamic x = throw new core::AbstractClassInstantiationError::•("C");
-  dynamic y = let final dynamic #t1 = 1 in throw new core::AbstractClassInstantiationError::•("D");
-  self::D<core::List<core::int>> z = let final dynamic #t2 = <dynamic>[] in throw new core::AbstractClassInstantiationError::•("D");
+  dynamic y = let final core::Object #t1 = 1 in throw new core::AbstractClassInstantiationError::•("D");
+  self::D<core::List<core::int>> z = let final core::Object #t2 = <dynamic>[] in throw new core::AbstractClassInstantiationError::•("D");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
index f258371..ae3db91 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
@@ -14,9 +14,9 @@
     return null;
   () → core::String g = f;
   g = () → core::String {
-    return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
-                                            ^" in let final dynamic #t2 = 1 in null;
+                                            ^" in 1 as{TypeError} core::String;
   };
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.transformed.expect
index b4515d3..f57fa87 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.transformed.expect
@@ -7,9 +7,9 @@
     return null;
   () → core::String g = f;
   g = () → core::String {
-    return let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
-                                            ^" in let final core::int #t2 = 1 in null;
+                                            ^" in 1 as{TypeError} core::String;
   };
 }
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
index a8a3081..b088986 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
@@ -41,11 +41,11 @@
   core::int callA = new self::A::•().{self::A::call}();
   core::int callFieldA = new self::D::•().{self::D::fieldA}();
   core::int callGetA = new self::D::•().{self::D::getA}();
-  dynamic callFieldB = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:27:69: Error: 'fieldB' isn't a function or method and can't be invoked.
+  dynamic callFieldB = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:27:69: Error: 'fieldB' isn't a function or method and can't be invoked.
   var /*@type=dynamic*/ callFieldB = new D(). /*@target=D::fieldB*/ fieldB();
-                                                                    ^" in let final dynamic #t2 = new self::D::•().{self::D::fieldB}() in null;
-  dynamic callGetB = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:28:65: Error: 'getB' isn't a function or method and can't be invoked.
+                                                                    ^" in new self::D::•().{self::D::fieldB}();
+  dynamic callGetB = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:28:65: Error: 'getB' isn't a function or method and can't be invoked.
   var /*@type=dynamic*/ callGetB = new D(). /*@target=D::getB*/ getB();
-                                                                ^" in let final dynamic #t4 = new self::D::•().{self::D::getB}() in null;
+                                                                ^" in new self::D::•().{self::D::getB}();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.transformed.expect
index abc7cbc..3bcb5f4 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.transformed.expect
@@ -31,11 +31,11 @@
   core::int callA = new self::A::•().{self::A::call}();
   core::int callFieldA = new self::D::•().{self::D::fieldA}();
   core::int callGetA = new self::D::•().{self::D::getA}();
-  dynamic callFieldB = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:27:69: Error: 'fieldB' isn't a function or method and can't be invoked.
+  dynamic callFieldB = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:27:69: Error: 'fieldB' isn't a function or method and can't be invoked.
   var /*@type=dynamic*/ callFieldB = new D(). /*@target=D::fieldB*/ fieldB();
-                                                                    ^" in let final dynamic #t2 = new self::D::•().{self::D::fieldB}() in null;
-  dynamic callGetB = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:28:65: Error: 'getB' isn't a function or method and can't be invoked.
+                                                                    ^" in new self::D::•().{self::D::fieldB}();
+  dynamic callGetB = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:28:65: Error: 'getB' isn't a function or method and can't be invoked.
   var /*@type=dynamic*/ callGetB = new D(). /*@target=D::getB*/ getB();
-                                                                ^" in let final dynamic #t4 = new self::D::•().{self::D::getB}() in null;
+                                                                ^" in new self::D::•().{self::D::getB}();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
index 9fb1ff1..76bc230 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
@@ -22,9 +22,9 @@
   self::C<core::num> c_num = new self::C::•<core::num>(123);
   self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in let final dynamic #t2 = #t1.{self::C::t} = 1.0 in #t1;
   self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{self::C::t} = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-                                                       ^" in let final dynamic #t4 = "hello" in null;
+                                                       ^" in "hello" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
index 1df375d..53affbe 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
@@ -15,9 +15,9 @@
   self::C<core::num> c_num = new self::C::•<core::num>(123);
   self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in let final core::double #t2 = #t1.{self::C::t} = 1.0 in #t1;
   self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{self::C::t} = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-                                                       ^" in let final core::String #t4 = "hello" in null;
+                                                       ^" in "hello" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
index defe1a8..e6a731e 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
@@ -22,9 +22,9 @@
 }
 static method test() → dynamic {
   self::C<core::int> x = self::C::•<core::int>(42);
-  x.{self::C::t} = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{self::C::t} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-                                                       ^" in let final dynamic #t2 = "hello" in null;
+                                                       ^" in "hello" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
index a6b5644..032989a 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
@@ -15,9 +15,9 @@
 }
 static method test() → dynamic {
   self::C<core::int> x = self::C::•<core::int>(42);
-  x.{self::C::t} = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{self::C::t} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
-                                                       ^" in let final core::String #t2 = "hello" in null;
+                                                       ^" in "hello" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
index 1789c32..c6f4fea 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
@@ -11,10 +11,10 @@
 
 static method test() → void {
   core::List<core::int> l;
-  l = <core::int>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  l = <core::int>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
-                                                                    ^" in let final dynamic #t2 = "hello" in null];
+                                                                    ^" in "hello" as{TypeError} core::int];
   l = l = <core::int>[1];
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.transformed.expect
index 993ac52..48f872c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.transformed.expect
@@ -4,10 +4,10 @@
 
 static method test() → void {
   core::List<core::int> l;
-  l = <core::int>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  l = <core::int>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
-                                                                    ^" in let final core::String #t2 = "hello" in null];
+                                                                    ^" in "hello" as{TypeError} core::int];
   l = l = <core::int>[1];
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
index 5216da9..6ee0824 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
@@ -77,53 +77,53 @@
 static method test() → void {
   new self::F0::•(<core::int>[]);
   new self::F0::•(<core::int>[3]);
-  new self::F0::•(<core::int>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•(<core::int>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                    ^" in let final dynamic #t2 = "hello" in null]);
-  new self::F0::•(<core::int>[let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                    ^" in "hello" as{TypeError} core::int]);
+  new self::F0::•(<core::int>[let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t4 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F1::•(a: <core::int>[]);
   new self::F1::•(a: <core::int>[3]);
-  new self::F1::•(a: <core::int>[let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•(a: <core::int>[let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in let final dynamic #t6 = "hello" in null]);
-  new self::F1::•(a: <core::int>[let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                               ^" in "hello" as{TypeError} core::int]);
+  new self::F1::•(a: <core::int>[let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t8 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F2::•(<core::int>[]);
   new self::F2::•(<core::int>[3]);
-  new self::F2::•(<core::int>[let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•(<core::int>[let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                    ^" in let final dynamic #t10 = "hello" in null]);
-  new self::F2::•(<core::int>[let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                    ^" in "hello" as{TypeError} core::int]);
+  new self::F2::•(<core::int>[let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t12 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F3::•(<core::Iterable<core::int>>[]);
   new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final dynamic #t14 = "hello" in null]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final dynamic #t16 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
   new self::F4::•(a: <core::Iterable<core::int>>[]);
   new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final dynamic #t18 = "hello" in null]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final dynamic #t20 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.transformed.expect
index 37f1cb7..b8671a5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.transformed.expect
@@ -25,53 +25,53 @@
 static method test() → void {
   new self::F0::•(<core::int>[]);
   new self::F0::•(<core::int>[3]);
-  new self::F0::•(<core::int>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•(<core::int>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                    ^" in let final core::String #t2 = "hello" in null]);
-  new self::F0::•(<core::int>[let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                    ^" in "hello" as{TypeError} core::int]);
+  new self::F0::•(<core::int>[let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t4 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F1::•(a: <core::int>[]);
   new self::F1::•(a: <core::int>[3]);
-  new self::F1::•(a: <core::int>[let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•(a: <core::int>[let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in let final core::String #t6 = "hello" in null]);
-  new self::F1::•(a: <core::int>[let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                               ^" in "hello" as{TypeError} core::int]);
+  new self::F1::•(a: <core::int>[let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t8 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F2::•(<core::int>[]);
   new self::F2::•(<core::int>[3]);
-  new self::F2::•(<core::int>[let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•(<core::int>[let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                    ^" in let final core::String #t10 = "hello" in null]);
-  new self::F2::•(<core::int>[let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                    ^" in "hello" as{TypeError} core::int]);
+  new self::F2::•(<core::int>[let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t12 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F3::•(<core::Iterable<core::int>>[]);
   new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final core::String #t14 = "hello" in null]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final core::String #t16 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
   new self::F4::•(a: <core::Iterable<core::int>>[]);
   new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final core::String #t18 = "hello" in null]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final core::String #t20 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
index cb21af9..63f9eb3 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
@@ -62,53 +62,53 @@
 static method test() → void {
   self::f0(<core::int>[]);
   self::f0(<core::int>[3]);
-  self::f0(<core::int>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f0(<core::int>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                   ^" in let final dynamic #t2 = "hello" in null]);
-  self::f0(<core::int>[let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                   ^" in "hello" as{TypeError} core::int]);
+  self::f0(<core::int>[let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                   ^" in let final dynamic #t4 = "hello" in null, 3]);
+                                                                   ^" in "hello" as{TypeError} core::int, 3]);
   self::f1(a: <core::int>[]);
   self::f1(a: <core::int>[3]);
-  self::f1(a: <core::int>[let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f1(a: <core::int>[let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                      ^" in let final dynamic #t6 = "hello" in null]);
-  self::f1(a: <core::int>[let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                      ^" in "hello" as{TypeError} core::int]);
+  self::f1(a: <core::int>[let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t8 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   self::f2(<core::int>[]);
   self::f2(<core::int>[3]);
-  self::f2(<core::int>[let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f2(<core::int>[let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                   ^" in let final dynamic #t10 = "hello" in null]);
-  self::f2(<core::int>[let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                   ^" in "hello" as{TypeError} core::int]);
+  self::f2(<core::int>[let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                   ^" in let final dynamic #t12 = "hello" in null, 3]);
+                                                                   ^" in "hello" as{TypeError} core::int, 3]);
   self::f3(<core::Iterable<core::int>>[]);
   self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f3(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final dynamic #t14 = "hello" in null]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final dynamic #t16 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
   self::f4(a: <core::Iterable<core::int>>[]);
   self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final dynamic #t18 = "hello" in null]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final dynamic #t20 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.transformed.expect
index c6f1d56..a9d8585 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.transformed.expect
@@ -10,53 +10,53 @@
 static method test() → void {
   self::f0(<core::int>[]);
   self::f0(<core::int>[3]);
-  self::f0(<core::int>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f0(<core::int>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                   ^" in let final core::String #t2 = "hello" in null]);
-  self::f0(<core::int>[let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                   ^" in "hello" as{TypeError} core::int]);
+  self::f0(<core::int>[let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                   ^" in let final core::String #t4 = "hello" in null, 3]);
+                                                                   ^" in "hello" as{TypeError} core::int, 3]);
   self::f1(a: <core::int>[]);
   self::f1(a: <core::int>[3]);
-  self::f1(a: <core::int>[let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f1(a: <core::int>[let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                      ^" in let final core::String #t6 = "hello" in null]);
-  self::f1(a: <core::int>[let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                      ^" in "hello" as{TypeError} core::int]);
+  self::f1(a: <core::int>[let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t8 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   self::f2(<core::int>[]);
   self::f2(<core::int>[3]);
-  self::f2(<core::int>[let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f2(<core::int>[let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                   ^" in let final core::String #t10 = "hello" in null]);
-  self::f2(<core::int>[let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                   ^" in "hello" as{TypeError} core::int]);
+  self::f2(<core::int>[let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
-                                                                   ^" in let final core::String #t12 = "hello" in null, 3]);
+                                                                   ^" in "hello" as{TypeError} core::int, 3]);
   self::f3(<core::Iterable<core::int>>[]);
   self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f3(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final core::String #t14 = "hello" in null]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final core::String #t16 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
   self::f4(a: <core::Iterable<core::int>>[]);
   self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final core::String #t18 = "hello" in null]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final core::String #t20 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
 }
 static method main() → dynamic {}
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 9cf887d..8ad660f 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
@@ -64,67 +64,67 @@
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
+    (core::int) → core::String l2 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
-                                                                 ^" in let final dynamic #t2 = (core::String x) → core::String => "hello" in null;
-    (core::int) → core::String l3 = (core::int x) → core::String => let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                 ^" in ((core::String x) → core::String => "hello") as{TypeError} (core::int) → core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
-                                                                            ^" in let final dynamic #t4 = 3 in null;
+                                                                            ^" in 3 as{TypeError} core::String;
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in let final dynamic #t6 = 3 in null;
+                                              ^" in 3 as{TypeError} core::String;
     };
   }
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = (core::int x) → core::String => let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l2 = (core::int x) → core::String => let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
             3;
-            ^" in let final dynamic #t8 = 3 in null;
+            ^" in 3 as{TypeError} core::String;
     (core::int) → core::String l3 = (core::int x) → core::String {
-      return let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in let final dynamic #t10 = 3 in null;
+                                              ^" in 3 as{TypeError} core::String;
     };
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in let final dynamic #t12 = x in null;
+                                              ^" in x as{TypeError} core::String;
     };
   }
   {
     (core::int) → core::List<core::String> l0 = (core::int x) → core::Null => null;
     (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
-    (core::int) → core::List<core::String> l2 = let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    (core::int) → core::List<core::String> l2 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
-                                                                       ^" in let final dynamic #t14 = (core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                       ^" in ((core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError} (core::int) → core::List<core::String>;
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                         ^" in let final dynamic #t16 = 3 in null];
+                                                         ^" in 3 as{TypeError} core::String];
     (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
-      return <core::String>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return <core::String>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in let final dynamic #t18 = 3 in null];
+                                                   ^" in 3 as{TypeError} core::String];
     };
   }
   {
     (core::int) → core::int l0 = (core::int x) → core::int => x;
     (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1);
-    (core::int) → core::String l2 = (core::int x) → core::String => let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l2 = (core::int x) → core::String => let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
             x;
-            ^" in let final dynamic #t20 = x in null;
-    (core::int) → core::String l3 = (core::int x) → core::String => (let final dynamic #t21 = x in let dynamic _ = null in 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 'dart.core::int'.
+            ^" in x as{TypeError} core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => (let final dynamic #t11 = x in 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 'dart.core::int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
              ^^^^^^^^^") as{TypeError} core::String;
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 1364abf..9b02a81 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
@@ -7,67 +7,67 @@
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
+    (core::int) → core::String l2 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
-                                                                 ^" in let final (core::String) → core::String #t2 = (core::String x) → core::String => "hello" in null;
-    (core::int) → core::String l3 = (core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                 ^" in ((core::String x) → core::String => "hello") as{TypeError} (core::int) → core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
-                                                                            ^" in let final core::int #t4 = 3 in null;
+                                                                            ^" in 3 as{TypeError} core::String;
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in let final core::int #t6 = 3 in null;
+                                              ^" in 3 as{TypeError} core::String;
     };
   }
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = (core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l2 = (core::int x) → core::String => let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
             3;
-            ^" in let final core::int #t8 = 3 in null;
+            ^" in 3 as{TypeError} core::String;
     (core::int) → core::String l3 = (core::int x) → core::String {
-      return let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in let final core::int #t10 = 3 in null;
+                                              ^" in 3 as{TypeError} core::String;
     };
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in let final core::int #t12 = x in null;
+                                              ^" in x as{TypeError} core::String;
     };
   }
   {
     (core::int) → core::List<core::String> l0 = (core::int x) → core::Null => null;
     (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
-    (core::int) → core::List<core::String> l2 = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    (core::int) → core::List<core::String> l2 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
-                                                                       ^" in let final (core::String) → core::List<core::String> #t14 = (core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                       ^" in ((core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError} (core::int) → core::List<core::String>;
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                         ^" in let final core::int #t16 = 3 in null];
+                                                         ^" in 3 as{TypeError} core::String];
     (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
-      return <core::String>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return <core::String>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in let final core::int #t18 = 3 in null];
+                                                   ^" in 3 as{TypeError} core::String];
     };
   }
   {
     (core::int) → core::int l0 = (core::int x) → core::int => x;
     (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1);
-    (core::int) → core::String l2 = (core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l2 = (core::int x) → core::String => let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
             x;
-            ^" in let final core::int #t20 = x in null;
-    (core::int) → core::String l3 = (core::int x) → core::String => (let final core::int #t21 = x in let<BottomType> _ = null in 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 'dart.core::int'.
+            ^" in x as{TypeError} core::String;
+    (core::int) → core::String l3 = (core::int x) → core::String => (let final core::int #t11 = x in 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 'dart.core::int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
             .substring(3);
              ^^^^^^^^^") as{TypeError} core::String;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
index f17e324..795566c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
@@ -77,54 +77,54 @@
 static method test() → void {
   new self::F0::•<core::int>(<core::int>[]);
   new self::F0::•<core::int>(<core::int>[3]);
-  new self::F0::•<core::int>(<core::int>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•<core::int>(<core::int>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                    ^" in let final dynamic #t2 = "hello" in null]);
-  new self::F0::•<core::int>(<core::int>[let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                    ^" in "hello" as{TypeError} core::int]);
+  new self::F0::•<core::int>(<core::int>[let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t4 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F1::•<core::int>(a: <core::int>[]);
   new self::F1::•<core::int>(a: <core::int>[3]);
-  new self::F1::•<core::int>(a: <core::int>[let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•<core::int>(a: <core::int>[let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in let final dynamic #t6 = "hello" in null]);
-  new self::F1::•<core::int>(a: <core::int>[let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                               ^" in "hello" as{TypeError} core::int]);
+  new self::F1::•<core::int>(a: <core::int>[let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t8 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F2::•<core::int>(<core::int>[]);
   new self::F2::•<core::int>(<core::int>[3]);
-  new self::F2::•<core::int>(<core::int>[let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•<core::int>(<core::int>[let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                    ^" in let final dynamic #t10 = "hello" in null]);
-  new self::F2::•<core::int>(<core::int>[let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                    ^" in "hello" as{TypeError} core::int]);
+  new self::F2::•<core::int>(<core::int>[let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t12 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final dynamic #t14 = "hello" in null]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final dynamic #t16 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final dynamic #t18 = "hello" in null]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final dynamic #t20 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
   new self::F3::•<dynamic>(<core::Iterable<dynamic>>[]);
   self::F3<core::int> f31 = new self::F3::•<core::int>(<core::List<core::int>>[<core::int>[3]]);
   self::F3<core::String> f32 = new self::F3::•<core::String>(<core::List<core::String>>[<core::String>["hello"]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
index 98b578f..f64de44 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
@@ -25,54 +25,54 @@
 static method test() → void {
   new self::F0::•<core::int>(<core::int>[]);
   new self::F0::•<core::int>(<core::int>[3]);
-  new self::F0::•<core::int>(<core::int>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•<core::int>(<core::int>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                    ^" in let final core::String #t2 = "hello" in null]);
-  new self::F0::•<core::int>(<core::int>[let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                    ^" in "hello" as{TypeError} core::int]);
+  new self::F0::•<core::int>(<core::int>[let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t4 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F1::•<core::int>(a: <core::int>[]);
   new self::F1::•<core::int>(a: <core::int>[3]);
-  new self::F1::•<core::int>(a: <core::int>[let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•<core::int>(a: <core::int>[let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                               ^" in let final core::String #t6 = "hello" in null]);
-  new self::F1::•<core::int>(a: <core::int>[let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                               ^" in "hello" as{TypeError} core::int]);
+  new self::F1::•<core::int>(a: <core::int>[let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t8 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F2::•<core::int>(<core::int>[]);
   new self::F2::•<core::int>(<core::int>[3]);
-  new self::F2::•<core::int>(<core::int>[let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•<core::int>(<core::int>[let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
-                                                                    ^" in let final core::String #t10 = "hello" in null]);
-  new self::F2::•<core::int>(<core::int>[let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                    ^" in "hello" as{TypeError} core::int]);
+  new self::F2::•<core::int>(<core::int>[let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t12 = "hello" in null, 3]);
+                                               ^" in "hello" as{TypeError} core::int, 3]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final core::String #t14 = "hello" in null]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final core::String #t16 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
-                                                                  ^" in let final core::String #t18 = "hello" in null]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hello" as{TypeError} core::int]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
-                                                                  ^" in let final core::String #t20 = "hello" in null], <core::int>[3]]);
+                                                                  ^" in "hello" as{TypeError} core::int], <core::int>[3]]);
   new self::F3::•<dynamic>(<core::Iterable<dynamic>>[]);
   self::F3<core::int> f31 = new self::F3::•<core::int>(<core::List<core::int>>[<core::int>[3]]);
   self::F3<core::String> f32 = new self::F3::•<core::String>(<core::List<core::String>>[<core::String>["hello"]]);
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 252b9546..90925fc 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
@@ -66,19 +66,19 @@
     <S extends core::Object = dynamic>(core::int) → core::String v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
-    v = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
+    v = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
-                                                                ^" in let final dynamic #t2 = <T extends core::Object = dynamic>(core::String x) → core::String => "hello" in null;
-    v = <T extends core::Object = dynamic>(core::int x) → core::String => let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                ^" in (<T extends core::Object = dynamic>(core::String x) → core::String => "hello") as{TypeError} <S extends core::Object = dynamic>(core::int) → core::String;
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
-                                                                           ^" in let final dynamic #t4 = 3 in null;
+                                                                           ^" in 3 as{TypeError} core::String;
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in let final dynamic #t6 = 3 in null;
+                                              ^" in 3 as{TypeError} core::String;
     };
   }
   {
@@ -87,21 +87,21 @@
     <S extends core::Object = dynamic>(core::int) → core::String v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
-    v = <T extends core::Object = dynamic>(core::int x) → core::String => let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         3;
-        ^" in let final dynamic #t8 = 3 in null;
+        ^" in 3 as{TypeError} core::String;
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in let final dynamic #t10 = 3 in null;
+                                              ^" in 3 as{TypeError} core::String;
     };
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in let final dynamic #t12 = x in null;
+                                              ^" in x as{TypeError} core::String;
     };
   }
   {
@@ -110,19 +110,19 @@
     <S extends core::Object = dynamic>(core::int) → core::List<core::String> v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
-    v = let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    v = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
-                                                                      ^" in let final dynamic #t14 = <T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                      ^" in (<T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError} <S extends core::Object = dynamic>(core::int) → core::List<core::String>;
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in let final dynamic #t16 = 3 in null];
+                                                     ^" in 3 as{TypeError} core::String];
     v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> {
-      return <core::String>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return <core::String>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in let final dynamic #t18 = 3 in null];
+                                                   ^" in 3 as{TypeError} core::String];
     };
   }
   {
@@ -136,11 +136,11 @@
     x = <T extends core::Object = dynamic>(core::int x) → core::int => x;
     x = <T extends core::Object = dynamic>(core::int x) → core::int => x.{core::num::+}(1);
     <T extends core::Object = dynamic>(core::int) → core::String y = int2String;
-    y = <T extends core::Object = dynamic>(core::int x) → core::String => let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         x;
-        ^" in let final dynamic #t20 = x in null;
-    y = <T extends core::Object = dynamic>(core::int x) → core::String => (let final dynamic #t21 = x in let dynamic _ = null in 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 'dart.core::int'.
+        ^" in x as{TypeError} core::String;
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => (let final dynamic #t11 = x in 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 'dart.core::int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
          ^^^^^^^^^") as{TypeError} core::String;
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 789c242..00cb91c 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
@@ -9,19 +9,19 @@
     <S extends core::Object = dynamic>(core::int) → core::String v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
-    v = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
+    v = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
-                                                                ^" in let final <T extends core::Object = dynamic>(core::String) → core::String #t2 = <T extends core::Object = dynamic>(core::String x) → core::String => "hello" in null;
-    v = <T extends core::Object = dynamic>(core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                ^" in (<T extends core::Object = dynamic>(core::String x) → core::String => "hello") as{TypeError} <S extends core::Object = dynamic>(core::int) → core::String;
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
-                                                                           ^" in let final core::int #t4 = 3 in null;
+                                                                           ^" in 3 as{TypeError} core::String;
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in let final core::int #t6 = 3 in null;
+                                              ^" in 3 as{TypeError} core::String;
     };
   }
   {
@@ -30,21 +30,21 @@
     <S extends core::Object = dynamic>(core::int) → core::String v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
-    v = <T extends core::Object = dynamic>(core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         3;
-        ^" in let final core::int #t8 = 3 in null;
+        ^" in 3 as{TypeError} core::String;
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
-                                              ^" in let final core::int #t10 = 3 in null;
+                                              ^" in 3 as{TypeError} core::String;
     };
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
-                                              ^" in let final core::int #t12 = x in null;
+                                              ^" in x as{TypeError} core::String;
     };
   }
   {
@@ -53,19 +53,19 @@
     <S extends core::Object = dynamic>(core::int) → core::List<core::String> v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
-    v = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    v = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
-                                                                      ^" in let final <T extends core::Object = dynamic>(core::String) → core::List<core::String> #t14 = <T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                      ^" in (<T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError} <S extends core::Object = dynamic>(core::int) → core::List<core::String>;
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in let final core::int #t16 = 3 in null];
+                                                     ^" in 3 as{TypeError} core::String];
     v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> {
-      return <core::String>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return <core::String>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                   ^" in let final core::int #t18 = 3 in null];
+                                                   ^" in 3 as{TypeError} core::String];
     };
   }
   {
@@ -79,11 +79,11 @@
     x = <T extends core::Object = dynamic>(core::int x) → core::int => x;
     x = <T extends core::Object = dynamic>(core::int x) → core::int => x.{core::num::+}(1);
     <T extends core::Object = dynamic>(core::int) → core::String y = int2String;
-    y = <T extends core::Object = dynamic>(core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         x;
-        ^" in let final core::int #t20 = x in null;
-    y = <T extends core::Object = dynamic>(core::int x) → core::String => (let final core::int #t21 = x in let<BottomType> _ = null in 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 'dart.core::int'.
+        ^" in x as{TypeError} core::String;
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => (let final core::int #t11 = x in 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 'dart.core::int'.
 Try correcting the name to the name of an existing method, or defining a method named 'substring'.
         .substring(3);
          ^^^^^^^^^") as{TypeError} core::String;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
index 5120a62..6415a50 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
@@ -182,134 +182,134 @@
     self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
 Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
-                                                 ^" in let final dynamic #t2 = new self::A::•<core::int, dynamic>(3, "hello") in null;
-    self::A<core::int, core::String> a5 = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+                                                 ^" in new self::A::•<core::int, dynamic>(3, "hello");
+    self::A<core::int, core::String> a5 = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
 Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
-                                                 ^" in let final dynamic #t4 = new self::A::named<dynamic, dynamic>(3, "hello") in null;
+                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello");
   }
   {
-    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t6 = "hello" in null, let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in "hello" as{TypeError} core::int, let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final dynamic #t8 = 3 in null);
-    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in 3 as{TypeError} core::String);
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t10 = "hello" in null, let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in "hello" as{TypeError} core::int, let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final dynamic #t12 = 3 in null);
+                                               ^" in 3 as{TypeError} core::String);
   }
   {
     self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
-    self::A<core::int, core::String> a4 = let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
-                                              ^" in let final dynamic #t14 = new self::B::•<core::String, dynamic>("hello", 3) in null;
-    self::A<core::int, core::String> a5 = let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+                                              ^" in new self::B::•<core::String, dynamic>("hello", 3) as{TypeError} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
-                                              ^" in let final dynamic #t16 = new self::B::named<dynamic, dynamic>("hello", 3) in null;
+                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in let final dynamic #t18 = 3 in null, let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in 3 as{TypeError} core::String, let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final dynamic #t20 = "hello" in null);
-    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let dynamic _ = null in let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in "hello" as{TypeError} core::int);
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in let final dynamic #t22 = 3 in null, let dynamic _ = null in let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in 3 as{TypeError} core::String, let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final dynamic #t24 = "hello" in null);
+                                               ^" in "hello" as{TypeError} core::int);
   }
   {
     self::A<core::int, core::int> a0 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
     self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
-    self::A<core::int, core::int> a4 = let dynamic _ = null in let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+    self::A<core::int, core::int> a4 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
-                                                      ^" in let final dynamic #t26 = new self::C::•<dynamic>(3) in null;
-    self::A<core::int, core::int> a5 = let dynamic _ = null in let final dynamic #t27 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+                                                      ^" in new self::C::•<dynamic>(3) as{TypeError} self::A<core::int, core::int>;
+    self::A<core::int, core::int> a5 = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
-                                                      ^" in let final dynamic #t28 = new self::C::named<dynamic>(3) in null;
+                                                      ^" in new self::C::named<dynamic>(3) as{TypeError} self::A<core::int, core::int>;
   }
   {
-    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let dynamic _ = null in let final dynamic #t29 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final dynamic #t30 = "hello" in null);
-    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let dynamic _ = null in let final dynamic #t31 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in "hello" as{TypeError} core::int);
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final dynamic #t32 = "hello" in null);
+                                               ^" in "hello" as{TypeError} core::int);
   }
   {
     self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>("hello");
     self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
     self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
     self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
-    self::A<core::int, core::String> a4 = let dynamic _ = null in let final dynamic #t33 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
-                                              ^" in let final dynamic #t34 = new self::D::•<core::num, dynamic>("hello") in null;
-    self::A<core::int, core::String> a5 = let dynamic _ = null in let final dynamic #t35 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+                                              ^" in new self::D::•<core::num, dynamic>("hello") as{TypeError} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
-                                              ^" in let final dynamic #t36 = new self::D::named<dynamic, dynamic>("hello") in null;
+                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let dynamic _ = null in let final dynamic #t37 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final dynamic #t38 = 3 in null);
-    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let dynamic _ = null in let final dynamic #t39 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in 3 as{TypeError} core::String);
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final dynamic #t40 = 3 in null);
+                                               ^" in 3 as{TypeError} core::String);
   }
   {
     self::A<self::C<core::int>, core::String> a0 = new self::E::•<core::int, core::String>("hello");
   }
   {
     self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
-    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let dynamic _ = null in let final dynamic #t41 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in let final dynamic #t42 = "hello" in null], b: <core::String>[let dynamic _ = null in let final dynamic #t43 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                     ^" in "hello" as{TypeError} core::int], b: <core::String>[let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in let final dynamic #t44 = 3 in null]);
+                                                     ^" in 3 as{TypeError} core::String]);
     self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
     self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let dynamic _ = null in let final dynamic #t45 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t46 = "hello" in null, let dynamic _ = null in let final dynamic #t47 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in "hello" as{TypeError} core::int, let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final dynamic #t48 = 3 in null);
-    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let dynamic _ = null in let final dynamic #t49 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in 3 as{TypeError} core::String);
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final dynamic #t50 = "hello" in null);
+                                               ^" in "hello" as{TypeError} core::int);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
index 7b39416..c2e4a2b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
@@ -55,134 +55,134 @@
     self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
 Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
-                                                 ^" in let final self::A<core::int, dynamic> #t2 = new self::A::•<core::int, dynamic>(3, "hello") in null;
-    self::A<core::int, core::String> a5 = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+                                                 ^" in new self::A::•<core::int, dynamic>(3, "hello");
+    self::A<core::int, core::String> a5 = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
 Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
-                                                 ^" in let final self::A<dynamic, dynamic> #t4 = new self::A::named<dynamic, dynamic>(3, "hello") in null;
+                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello");
   }
   {
-    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t6 = "hello" in null, let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in "hello" as{TypeError} core::int, let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final core::int #t8 = 3 in null);
-    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in 3 as{TypeError} core::String);
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t10 = "hello" in null, let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in "hello" as{TypeError} core::int, let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final core::int #t12 = 3 in null);
+                                               ^" in 3 as{TypeError} core::String);
   }
   {
     self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
-    self::A<core::int, core::String> a4 = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
-                                              ^" in let final self::B<core::String, dynamic> #t14 = new self::B::•<core::String, dynamic>("hello", 3) in null;
-    self::A<core::int, core::String> a5 = let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+                                              ^" in new self::B::•<core::String, dynamic>("hello", 3) as{TypeError} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
-                                              ^" in let final self::B<dynamic, dynamic> #t16 = new self::B::named<dynamic, dynamic>("hello", 3) in null;
+                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in let final core::int #t18 = 3 in null, let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in 3 as{TypeError} core::String, let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final core::String #t20 = "hello" in null);
-    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let<BottomType> _ = null in let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in "hello" as{TypeError} core::int);
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in let final core::int #t22 = 3 in null, let<BottomType> _ = null in let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in 3 as{TypeError} core::String, let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final core::String #t24 = "hello" in null);
+                                               ^" in "hello" as{TypeError} core::int);
   }
   {
     self::A<core::int, core::int> a0 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
     self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
-    self::A<core::int, core::int> a4 = let<BottomType> _ = null in let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+    self::A<core::int, core::int> a4 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
-                                                      ^" in let final self::C<dynamic> #t26 = new self::C::•<dynamic>(3) in null;
-    self::A<core::int, core::int> a5 = let<BottomType> _ = null in let final dynamic #t27 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+                                                      ^" in new self::C::•<dynamic>(3) as{TypeError} self::A<core::int, core::int>;
+    self::A<core::int, core::int> a5 = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
-                                                      ^" in let final self::C<dynamic> #t28 = new self::C::named<dynamic>(3) in null;
+                                                      ^" in new self::C::named<dynamic>(3) as{TypeError} self::A<core::int, core::int>;
   }
   {
-    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let<BottomType> _ = null in let final dynamic #t29 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final core::String #t30 = "hello" in null);
-    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let<BottomType> _ = null in let final dynamic #t31 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in "hello" as{TypeError} core::int);
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final core::String #t32 = "hello" in null);
+                                               ^" in "hello" as{TypeError} core::int);
   }
   {
     self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>("hello");
     self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
     self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
     self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
-    self::A<core::int, core::String> a4 = let<BottomType> _ = null in let final dynamic #t33 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
-                                              ^" in let final self::D<core::num, dynamic> #t34 = new self::D::•<core::num, dynamic>("hello") in null;
-    self::A<core::int, core::String> a5 = let<BottomType> _ = null in let final dynamic #t35 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+                                              ^" in new self::D::•<core::num, dynamic>("hello") as{TypeError} self::A<core::int, core::String>;
+    self::A<core::int, core::String> a5 = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
-                                              ^" in let final self::D<dynamic, dynamic> #t36 = new self::D::named<dynamic, dynamic>("hello") in null;
+                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int, core::String>;
   }
   {
-    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let<BottomType> _ = null in let final dynamic #t37 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final core::int #t38 = 3 in null);
-    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let<BottomType> _ = null in let final dynamic #t39 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in 3 as{TypeError} core::String);
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final core::int #t40 = 3 in null);
+                                               ^" in 3 as{TypeError} core::String);
   }
   {
     self::A<self::C<core::int>, core::String> a0 = new self::E::•<core::int, core::String>("hello");
   }
   {
     self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
-    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let<BottomType> _ = null in let final dynamic #t41 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in let final core::String #t42 = "hello" in null], b: <core::String>[let<BottomType> _ = null in let final dynamic #t43 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                     ^" in "hello" as{TypeError} core::int], b: <core::String>[let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
-                                                     ^" in let final core::int #t44 = 3 in null]);
+                                                     ^" in 3 as{TypeError} core::String]);
     self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
     self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let<BottomType> _ = null in let final dynamic #t45 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t46 = "hello" in null, let<BottomType> _ = null in let final dynamic #t47 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
+                                               ^" in "hello" as{TypeError} core::int, let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'dart.core::int' can't be assigned to the parameter type 'dart.core::String'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
-                                               ^" in let final core::int #t48 = 3 in null);
-    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let<BottomType> _ = null in let final dynamic #t49 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                               ^" in 3 as{TypeError} core::String);
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
-                                               ^" in let final core::String #t50 = "hello" in null);
+                                               ^" in "hello" as{TypeError} core::int);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
index 49c6469..a41f60c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
@@ -69,22 +69,22 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
-                                                                                        ^" in let final dynamic #t2 = 42 in null]]) → void {}
+                                                                                        ^" in 42 as{TypeError} core::String]]) → void {}
 static method main() → void {
   {
     core::List<core::int> l0 = <core::int>[];
     core::List<core::int> l1 = <core::int>[3];
-    core::List<core::int> l2 = <core::int>[let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::List<core::int> l2 = <core::int>[let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                 ^" in let final dynamic #t4 = "hello" in null];
-    core::List<core::int> l3 = <core::int>[let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                 ^" in "hello" as{TypeError} core::int];
+    core::List<core::int> l3 = <core::int>[let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                                 ^" in let final dynamic #t6 = "hello" in null, 3];
+                                                 ^" in "hello" as{TypeError} core::int, 3];
   }
   {
     core::List<dynamic> l0 = <dynamic>[];
@@ -93,51 +93,51 @@
     core::List<dynamic> l3 = <dynamic>["hello", 3];
   }
   {
-    core::List<core::int> l0 = let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l0 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
-                                                            ^" in let final dynamic #t8 = <core::num>[] in null;
-    core::List<core::int> l1 = let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+                                                            ^" in <core::num>[];
+    core::List<core::int> l1 = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
-                                                            ^" in let final dynamic #t10 = <core::num>[3] in null;
-    core::List<core::int> l2 = let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+                                                            ^" in <core::num>[3];
+    core::List<core::int> l2 = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in let final dynamic #t12 = <core::num>[let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+                                                            ^" in <core::num>[let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                 ^" in let final dynamic #t14 = "hello" in null] in null;
-    core::List<core::int> l3 = let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+                                                 ^" in "hello" as{TypeError} core::num];
+    core::List<core::int> l3 = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in let final dynamic #t16 = <core::num>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+                                                            ^" in <core::num>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                                 ^" in let final dynamic #t18 = "hello" in null, 3] in null;
+                                                 ^" in "hello" as{TypeError} core::num, 3];
   }
   {
     core::Iterable<core::int> i0 = <core::int>[];
     core::Iterable<core::int> i1 = <core::int>[3];
-    core::Iterable<core::int> i2 = <core::int>[let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Iterable<core::int> i2 = <core::int>[let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                 ^" in let final dynamic #t20 = "hello" in null];
-    core::Iterable<core::int> i3 = <core::int>[let dynamic _ = null in let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                 ^" in "hello" as{TypeError} core::int];
+    core::Iterable<core::int> i3 = <core::int>[let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                                 ^" in let final dynamic #t22 = "hello" in null, 3];
+                                                 ^" in "hello" as{TypeError} core::int, 3];
   }
   {
     const core::List<core::int> c0 = const <core::int>[];
     const core::List<core::int> c1 = const <core::int>[3];
-    const core::List<core::int> c2 = const <core::int>[let dynamic _ = null in let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::List<core::int> c2 = const <core::int>[let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                                                        ^" in let final dynamic #t24 = "hello" in null];
-    const core::List<core::int> c3 = const <core::int>[let dynamic _ = null in let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                                        ^" in "hello" as{TypeError} core::int];
+    const core::List<core::int> c3 = const <core::int>[let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                                                                        ^" in let final dynamic #t26 = "hello" in null, 3];
+                                                                                        ^" in "hello" as{TypeError} core::int, 3];
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.transformed.expect
index 0bbe2ae..2b4c187 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.transformed.expect
@@ -2,22 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
-                                                                                        ^" in let final core::int #t2 = 42 in null]]) → void {}
+                                                                                        ^" in 42 as{TypeError} core::String]]) → void {}
 static method main() → void {
   {
     core::List<core::int> l0 = <core::int>[];
     core::List<core::int> l1 = <core::int>[3];
-    core::List<core::int> l2 = <core::int>[let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::List<core::int> l2 = <core::int>[let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                 ^" in let final core::String #t4 = "hello" in null];
-    core::List<core::int> l3 = <core::int>[let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                 ^" in "hello" as{TypeError} core::int];
+    core::List<core::int> l3 = <core::int>[let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                                 ^" in let final core::String #t6 = "hello" in null, 3];
+                                                 ^" in "hello" as{TypeError} core::int, 3];
   }
   {
     core::List<dynamic> l0 = <dynamic>[];
@@ -26,51 +26,51 @@
     core::List<dynamic> l3 = <dynamic>["hello", 3];
   }
   {
-    core::List<core::int> l0 = let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l0 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
-                                                            ^" in let final core::List<core::num> #t8 = <core::num>[] in null;
-    core::List<core::int> l1 = let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+                                                            ^" in <core::num>[];
+    core::List<core::int> l1 = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
-                                                            ^" in let final core::List<core::num> #t10 = <core::num>[3] in null;
-    core::List<core::int> l2 = let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+                                                            ^" in <core::num>[3];
+    core::List<core::int> l2 = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in let final core::List<core::num> #t12 = <core::num>[let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+                                                            ^" in <core::num>[let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                 ^" in let final core::String #t14 = "hello" in null] in null;
-    core::List<core::int> l3 = let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+                                                 ^" in "hello" as{TypeError} core::num];
+    core::List<core::int> l3 = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in let final core::List<core::num> #t16 = <core::num>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+                                                            ^" in <core::num>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                                 ^" in let final core::String #t18 = "hello" in null, 3] in null;
+                                                 ^" in "hello" as{TypeError} core::num, 3];
   }
   {
     core::Iterable<core::int> i0 = <core::int>[];
     core::Iterable<core::int> i1 = <core::int>[3];
-    core::Iterable<core::int> i2 = <core::int>[let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Iterable<core::int> i2 = <core::int>[let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                 ^" in let final core::String #t20 = "hello" in null];
-    core::Iterable<core::int> i3 = <core::int>[let<BottomType> _ = null in let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                 ^" in "hello" as{TypeError} core::int];
+    core::Iterable<core::int> i3 = <core::int>[let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                                 ^" in let final core::String #t22 = "hello" in null, 3];
+                                                 ^" in "hello" as{TypeError} core::int, 3];
   }
   {
     const core::List<core::int> c0 = const <core::int>[];
     const core::List<core::int> c1 = const <core::int>[3];
-    const core::List<core::int> c2 = const <core::int>[let<BottomType> _ = null in let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::List<core::int> c2 = const <core::int>[let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                                                        ^" in let final core::String #t24 = "hello" in null];
-    const core::List<core::int> c3 = const <core::int>[let<BottomType> _ = null in let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                                        ^" in "hello" as{TypeError} core::int];
+    const core::List<core::int> c3 = const <core::int>[let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                                                                        ^" in let final core::String #t26 = "hello" in null, 3];
+                                                                                        ^" in "hello" as{TypeError} core::int, 3];
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
index c422b68..10afb3c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
@@ -84,29 +84,29 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                                                              ^" in let final dynamic #t2 = "hello" in null: "world"}]) → void {}
+                                                                              ^" in "hello" as{TypeError} core::int: "world"}]) → void {}
 static method test() → void {
   {
     core::Map<core::int, core::String> l0 = <core::int, core::String>{};
     core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
-    core::Map<core::int, core::String> l2 = <core::int, core::String>{let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
-                                            ^" in let final dynamic #t4 = "hello" in null: "hello"};
-    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                            ^" in "hello" as{TypeError} core::int: "hello"};
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                 ^" in let final dynamic #t6 = 3 in null};
-    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                 ^" in 3 as{TypeError} core::String};
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in let final dynamic #t8 = "hello" in null: let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                            ^" in "hello" as{TypeError} core::int: let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                  ^" in let final dynamic #t10 = 3 in null};
+                                                  ^" in 3 as{TypeError} core::String};
   }
   {
     core::Map<dynamic, dynamic> l0 = <dynamic, dynamic>{};
@@ -119,60 +119,60 @@
     core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
     core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
     core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
-    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                 ^" in let final dynamic #t12 = 3 in null};
-    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                 ^" in 3 as{TypeError} core::String};
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                       ^" in let final dynamic #t14 = 3 in null};
+                                                       ^" in 3 as{TypeError} core::String};
   }
   {
     core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
     core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
-    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
-                                            ^" in let final dynamic #t16 = "hello" in null: "hello"};
+                                            ^" in "hello" as{TypeError} core::int: "hello"};
     core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
-    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
-                                            ^" in let final dynamic #t18 = "hello" in null: 3};
+                                            ^" in "hello" as{TypeError} core::int: 3};
   }
   {
-    core::Map<core::int, core::String> l0 = let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+    core::Map<core::int, core::String> l0 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
-                                                                           ^" in let final dynamic #t20 = <core::num, dynamic>{} in null;
-    core::Map<core::int, core::String> l1 = let dynamic _ = null in let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+                                                                           ^" in <core::num, dynamic>{};
+    core::Map<core::int, core::String> l1 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
-                                                                           ^" in let final dynamic #t22 = <core::num, dynamic>{3: "hello"} in null;
-    core::Map<core::int, core::String> l3 = let dynamic _ = null in let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+                                                                           ^" in <core::num, dynamic>{3: "hello"};
+    core::Map<core::int, core::String> l3 = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
-                                                                           ^" in let final dynamic #t24 = <core::num, dynamic>{3: 3} in null;
+                                                                           ^" in <core::num, dynamic>{3: 3};
   }
   {
     const core::Map<core::int, core::String> l0 = const <core::int, core::String>{};
     const core::Map<core::int, core::String> l1 = const <core::int, core::String>{3: "hello"};
-    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let dynamic _ = null in let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                                                              ^" in let final dynamic #t26 = "hello" in null: "hello"};
-    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let dynamic _ = null in let final dynamic #t27 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                              ^" in "hello" as{TypeError} core::int: "hello"};
+    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                                                     ^" in let final dynamic #t28 = 3 in null};
-    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let dynamic _ = null in let final dynamic #t29 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                                     ^" in 3 as{TypeError} core::String};
+    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                                                              ^" in let final dynamic #t30 = "hello" in null: let dynamic _ = null in let final dynamic #t31 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                              ^" in "hello" as{TypeError} core::int: let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                                                      ^" in let final dynamic #t32 = 3 in null};
+                                                                                      ^" in 3 as{TypeError} core::String};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.transformed.expect
index a825f73..c9507e6 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.transformed.expect
@@ -2,29 +2,29 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                                                              ^" in let final core::String #t2 = "hello" in null: "world"}]) → void {}
+                                                                              ^" in "hello" as{TypeError} core::int: "world"}]) → void {}
 static method test() → void {
   {
     core::Map<core::int, core::String> l0 = <core::int, core::String>{};
     core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
-    core::Map<core::int, core::String> l2 = <core::int, core::String>{let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
-                                            ^" in let final core::String #t4 = "hello" in null: "hello"};
-    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                            ^" in "hello" as{TypeError} core::int: "hello"};
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                 ^" in let final core::int #t6 = 3 in null};
-    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                 ^" in 3 as{TypeError} core::String};
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in let final core::String #t8 = "hello" in null: let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                            ^" in "hello" as{TypeError} core::int: let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                  ^" in let final core::int #t10 = 3 in null};
+                                                  ^" in 3 as{TypeError} core::String};
   }
   {
     core::Map<dynamic, dynamic> l0 = <dynamic, dynamic>{};
@@ -37,60 +37,60 @@
     core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
     core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
     core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
-    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                 ^" in let final core::int #t12 = 3 in null};
-    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                 ^" in 3 as{TypeError} core::String};
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                       ^" in let final core::int #t14 = 3 in null};
+                                                       ^" in 3 as{TypeError} core::String};
   }
   {
     core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
     core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
-    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
-                                            ^" in let final core::String #t16 = "hello" in null: "hello"};
+                                            ^" in "hello" as{TypeError} core::int: "hello"};
     core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
-    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
-                                            ^" in let final core::String #t18 = "hello" in null: 3};
+                                            ^" in "hello" as{TypeError} core::int: 3};
   }
   {
-    core::Map<core::int, core::String> l0 = let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+    core::Map<core::int, core::String> l0 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
-                                                                           ^" in let final core::Map<core::num, dynamic> #t20 = <core::num, dynamic>{} in null;
-    core::Map<core::int, core::String> l1 = let<BottomType> _ = null in let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+                                                                           ^" in <core::num, dynamic>{};
+    core::Map<core::int, core::String> l1 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
-                                                                           ^" in let final core::Map<core::num, dynamic> #t22 = <core::num, dynamic>{3: "hello"} in null;
-    core::Map<core::int, core::String> l3 = let<BottomType> _ = null in let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+                                                                           ^" in <core::num, dynamic>{3: "hello"};
+    core::Map<core::int, core::String> l3 = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
-                                                                           ^" in let final core::Map<core::num, dynamic> #t24 = <core::num, dynamic>{3: 3} in null;
+                                                                           ^" in <core::num, dynamic>{3: 3};
   }
   {
     const core::Map<core::int, core::String> l0 = const <core::int, core::String>{};
     const core::Map<core::int, core::String> l1 = const <core::int, core::String>{3: "hello"};
-    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let<BottomType> _ = null in let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                                                              ^" in let final core::String #t26 = "hello" in null: "hello"};
-    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let<BottomType> _ = null in let final dynamic #t27 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                              ^" in "hello" as{TypeError} core::int: "hello"};
+    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                                                     ^" in let final core::int #t28 = 3 in null};
-    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let<BottomType> _ = null in let final dynamic #t29 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                                                                     ^" in 3 as{TypeError} core::String};
+    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                                                              ^" in let final core::String #t30 = "hello" in null: let<BottomType> _ = null in let final dynamic #t31 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                              ^" in "hello" as{TypeError} core::int: let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
-                                                                                      ^" in let final core::int #t32 = 3 in null};
+                                                                                      ^" in 3 as{TypeError} core::String};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
index 48fb3e0..d629560 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
@@ -31,26 +31,26 @@
 }
 static method foo() → asy::Stream<core::List<core::int>> async* {
   yield<core::int>[];
-  yield let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.
+  yield let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();
-                                                                  ^" in let final dynamic #t2 = self::MyStream::•<dynamic>() in null;
-  yield* let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+                                                                  ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int>;
+  yield* let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
-                                                               ^" in let final dynamic #t4 = <dynamic>[] in null;
+                                                               ^" in <dynamic>[] as{TypeError} asy::Stream<core::List<core::int>>;
   yield* self::MyStream::•<core::List<core::int>>();
 }
 static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
   yield<core::int, core::int>{};
-  yield let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.
+  yield let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
-                                                                  ^" in let final dynamic #t6 = core::List::•<dynamic>() in null;
-  yield* let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+                                                                  ^" in core::List::•<dynamic>() as{TypeError} core::Map<core::int, core::int>;
+  yield* let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                        ^" in let final dynamic #t8 = <dynamic, dynamic>{} in null;
+                                                                        ^" in <dynamic, dynamic>{} as{TypeError} core::Iterable<core::Map<core::int, core::int>>;
   yield* core::List::•<core::Map<core::int, core::int>>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect
new file mode 100644
index 0000000..304f6a2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect
@@ -0,0 +1,95 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+abstract class MyStream<T extends core::Object = dynamic> extends asy::Stream<self::MyStream::T> {
+  static factory •<T extends core::Object = dynamic>() → self::MyStream<self::MyStream::•::T>
+    return null;
+}
+static method foo() → asy::Stream<core::List<core::int>> /* originally async* */ {
+  asy::_AsyncStarStreamController<core::List<core::int>> :controller;
+  dynamic :controller_stream;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  dynamic :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  dynamic :saved_try_context_var1;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try
+      try {
+        #L1:
+        {
+          if(:controller.{asy::_AsyncStarStreamController::add}(<core::int>[]))
+            return null;
+          else
+            [yield] null;
+          if(:controller.{asy::_AsyncStarStreamController::add}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.
+  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();
+                                                                  ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int>))
+            return null;
+          else
+            [yield] null;
+          if(:controller.{asy::_AsyncStarStreamController::addStream}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
+                                                               ^" in <dynamic>[] as{TypeError} asy::Stream<core::List<core::int>>))
+            return null;
+          else
+            [yield] null;
+          if(:controller.{asy::_AsyncStarStreamController::addStream}(self::MyStream::•<core::List<core::int>>()))
+            return null;
+          else
+            [yield] null;
+        }
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
+      }
+    finally {
+      :controller.{asy::_AsyncStarStreamController::close}();
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :controller = new asy::_AsyncStarStreamController::•<core::List<core::int>>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
+  return :controller_stream;
+}
+static method bar() → core::Iterable<core::Map<core::int, core::int>> /* originally sync* */ {
+  dynamic :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :sync_op(core::_SyncIterator<core::Map<core::int, core::int>> :iterator) → core::bool yielding {
+    {
+      {
+        :iterator.{core::_SyncIterator::_current} = <core::int, core::int>{};
+        [yield] true;
+      }
+      {
+        :iterator.{core::_SyncIterator::_current} = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.
+  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
+                                                                  ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} core::Map<core::int, core::int>;
+        [yield] true;
+      }
+      {
+        :iterator.{core::_SyncIterator::_yieldEachIterable} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};
+                                                                        ^" in <dynamic, dynamic>{} as{TypeError} core::Iterable<core::Map<core::int, core::int>>;
+        [yield] true;
+      }
+      {
+        :iterator.{core::_SyncIterator::_yieldEachIterable} = core::_GrowableList::•<core::Map<core::int, core::int>>(0);
+        [yield] true;
+      }
+    }
+    return false;
+  }
+  return new core::_SyncIterable::•<core::Map<core::int, core::int>>(:sync_op);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
index 0af7ce5..b709a6f 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
@@ -18,9 +18,9 @@
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
   core::int get_hashCode = d.{core::Object::hashCode};
-  dynamic call_hashCode = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+  dynamic call_hashCode = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object::hashCode*/ hashCode();
-                                      ^" in let final dynamic #t2 = d.{core::Object::hashCode}() in null;
+                                      ^" in d.{core::Object::hashCode}();
   core::String call_toString = d.{core::Object::toString}();
   dynamic call_toStringArg = d.toString(color: "pink");
   dynamic call_foo0 = d.foo();
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
index 53e0e8d..49e07c8 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
@@ -12,9 +12,9 @@
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
   core::int get_hashCode = d.{core::Object::hashCode};
-  dynamic call_hashCode = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+  dynamic call_hashCode = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object::hashCode*/ hashCode();
-                                      ^" in let final dynamic #t2 = d.{core::Object::hashCode}() in null;
+                                      ^" in d.{core::Object::hashCode}();
   core::String call_toString = d.{core::Object::toString}();
   dynamic call_toStringArg = d.toString(color: "pink");
   dynamic call_foo0 = d.foo();
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 ec22073..251a36e 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
@@ -30,10 +30,10 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+  asy::Future<core::int> f2 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in let final dynamic #t2 = f in null;
+                                                ^" in f as{TypeError} asy::Future<core::int>;
   asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
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 d32175c..0bbdac3 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
@@ -23,10 +23,10 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+  asy::Future<core::int> f2 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in let final self::MyFuture<core::double> #t2 = f in null;
+                                                ^" in f as{TypeError} asy::Future<core::int>;
   asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
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 be1ed22..1693468 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
@@ -30,10 +30,10 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  self::MyFuture<core::int> f2 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
+  self::MyFuture<core::int> f2 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                  ^" in let final dynamic #t2 = f in null;
+                                                  ^" in f as{TypeError} self::MyFuture<core::int>;
   self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as self::MyFuture<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
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 4cd8622..eb14026 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,10 +23,10 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  self::MyFuture<core::int> f2 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
+  self::MyFuture<core::int> f2 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                  ^" in let final self::MyFuture<core::double> #t2 = f in null;
+                                                  ^" in f as{TypeError} self::MyFuture<core::int>;
   self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as self::MyFuture<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
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 fbb110e..dfe6a69 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
@@ -30,10 +30,10 @@
 }
 static method test() → void {
   asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+  asy::Future<core::int> f2 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in let final dynamic #t2 = f in null;
+                                                ^" in f as{TypeError} asy::Future<core::int>;
   asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
 }
 static method foo() → asy::Future<dynamic>
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 7cf0b1c..d430699 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,10 +23,10 @@
 }
 static method test() → void {
   asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+  asy::Future<core::int> f2 = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
-                                                ^" in let final asy::Future<core::double> #t2 = f in null;
+                                                ^" in f as{TypeError} asy::Future<core::int>;
   asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
 }
 static method foo() → asy::Future<dynamic>
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 55da4f8..da08993 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
@@ -29,10 +29,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withoutType("asStream", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} 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 dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
+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:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
 Try changing the type of the parameter, or casting the argument to 'dart.async::FutureOr<dart.core::int>'.
         new /*@typeArgs=int*/ Future.value('hi'));
-                                           ^" in let final dynamic #t2 = "hi" in null));
+                                           ^" in "hi" as{TypeError} asy::FutureOr<core::int>));
 static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
 static method g2() → asy::Future<core::List<core::int>> async {
   return <core::int>[3];
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 f3bccc5..f2b9012 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
@@ -22,10 +22,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withoutType("asStream", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} 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<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
+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:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
 Try changing the type of the parameter, or casting the argument to 'dart.async::FutureOr<dart.core::int>'.
         new /*@typeArgs=int*/ Future.value('hi'));
-                                           ^" in let final core::String #t2 = "hi" in null));
+                                           ^" in "hi" as{TypeError} asy::FutureOr<core::int>));
 static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
 static method g2() → asy::Future<core::List<core::int>> /* originally async */ {
   final asy::Completer<core::List<core::int>> :async_completer = asy::Completer::sync<core::List<core::int>>();
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 76241fa..deb23d4 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
@@ -29,10 +29,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withoutType("asStream", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} 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 dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
+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:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
 Try changing the type of the parameter, or casting the argument to 'dart.async::FutureOr<dart.core::int>'.
         new /*@typeArgs=int*/ Future.value('hi'));
-                                           ^" in let final dynamic #t2 = "hi" in null));
+                                           ^" in "hi" as{TypeError} asy::FutureOr<core::int>));
 static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
 static method g2() → asy::Future<core::List<core::int>> async {
   return <core::int>[3];
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 ef7b284..801bbda 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
@@ -22,10 +22,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withoutType("asStream", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} 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<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
+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:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.async::FutureOr<dart.core::int>'.
 Try changing the type of the parameter, or casting the argument to 'dart.async::FutureOr<dart.core::int>'.
         new /*@typeArgs=int*/ Future.value('hi'));
-                                           ^" in let final core::String #t2 = "hi" in null));
+                                           ^" in "hi" as{TypeError} asy::FutureOr<core::int>));
 static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
 static method g2() → asy::Future<core::List<core::int>> /* originally async */ {
   final asy::Completer<core::List<core::int>> :async_completer = asy::Completer::sync<core::List<core::int>>();
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
index 5191245..88d3f6c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
@@ -38,22 +38,22 @@
   self::printDouble(math::min<core::double>(1.0, 2.0));
   self::printInt(self::myMax(1, 2) as{TypeError} core::int);
   self::printInt(self::myMax(1, 2) as core::int);
-  self::printInt(math::max<core::int>(1, let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:69: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+  self::printInt(math::max<core::int>(1, let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:69: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
       /*@typeArgs=int*/ max(1, /*@error=ArgumentTypeNotAssignable*/ 2.0));
-                                                                    ^" in let final dynamic #t2 = 2.0 in null));
-  self::printInt(math::min<core::int>(1, let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:69: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+                                                                    ^" in 2.0 as{TypeError} core::int));
+  self::printInt(math::min<core::int>(1, let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:69: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
       /*@typeArgs=int*/ min(1, /*@error=ArgumentTypeNotAssignable*/ 2.0));
-                                                                    ^" in let final dynamic #t4 = 2.0 in null));
+                                                                    ^" in 2.0 as{TypeError} core::int));
   self::printDouble(math::max<core::double>(1.0, 2.0));
   self::printDouble(math::min<core::double>(1.0, 2.0));
-  self::printInt(math::min<core::int>(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:38:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+  self::printInt(math::min<core::int>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:38:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
       /*@error=ArgumentTypeNotAssignable*/ \"hi\",
-                                           ^" in let final dynamic #t6 = "hi" in null, let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                           ^" in "hi" as{TypeError} core::int, let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
       /*@error=ArgumentTypeNotAssignable*/ \"there\"));
-                                           ^" in let final dynamic #t8 = "there" in null));
+                                           ^" in "there" as{TypeError} core::int));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.transformed.expect
index a4fa81e..471d44c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.transformed.expect
@@ -16,22 +16,22 @@
   self::printDouble(math::min<core::double>(1.0, 2.0));
   self::printInt(self::myMax(1, 2) as{TypeError} core::int);
   self::printInt(self::myMax(1, 2) as core::int);
-  self::printInt(math::max<core::int>(1, let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:69: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+  self::printInt(math::max<core::int>(1, let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:69: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
       /*@typeArgs=int*/ max(1, /*@error=ArgumentTypeNotAssignable*/ 2.0));
-                                                                    ^" in let final core::double #t2 = 2.0 in null));
-  self::printInt(math::min<core::int>(1, let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:69: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+                                                                    ^" in 2.0 as{TypeError} core::int));
+  self::printInt(math::min<core::int>(1, let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:69: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
       /*@typeArgs=int*/ min(1, /*@error=ArgumentTypeNotAssignable*/ 2.0));
-                                                                    ^" in let final core::double #t4 = 2.0 in null));
+                                                                    ^" in 2.0 as{TypeError} core::int));
   self::printDouble(math::max<core::double>(1.0, 2.0));
   self::printDouble(math::min<core::double>(1.0, 2.0));
-  self::printInt(math::min<core::int>(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:38:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+  self::printInt(math::min<core::int>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:38:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
       /*@error=ArgumentTypeNotAssignable*/ \"hi\",
-                                           ^" in let final core::String #t6 = "hi" in null, let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+                                           ^" in "hi" as{TypeError} core::int, let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:44: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
       /*@error=ArgumentTypeNotAssignable*/ \"there\"));
-                                           ^" in let final core::String #t8 = "there" in null));
+                                           ^" in "there" as{TypeError} core::int));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
index f83fd7b..4033a7c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
@@ -13,9 +13,9 @@
   return null;
 static method test() → dynamic {
   core::String x = self::f<core::String>(<core::String>["hi"]);
-  core::String y = self::f<core::String>(<core::String>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = self::f<core::String>(<core::String>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-                                                                           ^" in let final dynamic #t2 = 42 in null]);
+                                                                           ^" in 42 as{TypeError} core::String]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
index 6fbf8af..3ce2207 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
@@ -6,9 +6,9 @@
   return null;
 static method test() → dynamic {
   core::String x = self::f<core::String>(<core::String>["hi"]);
-  core::String y = self::f<core::String>(<core::String>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = self::f<core::String>(<core::String>[let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
-                                                                           ^" in let final core::int #t2 = 42 in null]);
+                                                                           ^" in 42 as{TypeError} core::String]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
index 635109b..9e2f29f 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
@@ -53,14 +53,14 @@
   self::takeIIO(math::max<core::int>);
   self::takeDDO(math::max<core::double>);
   self::takeOOI((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
-                                                                        ^" in let final dynamic #t2 = math::max<core::num> in null);
-  self::takeDID(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+                                                                        ^" in (math::max<core::num>) as{TypeError} (core::double, core::int) → core::int);
+  self::takeDID(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
-                                                                        ^" in let final dynamic #t4 = math::max<core::num> in null);
+                                                                        ^" in (math::max<core::num>) as{TypeError} (core::int, core::double) → core::double);
   self::takeOON((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeIII(math::min<core::int>);
@@ -73,14 +73,14 @@
   self::takeIIO(math::min<core::int>);
   self::takeDDO(math::min<core::double>);
   self::takeOOI((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
-                                                                       ^" in let final dynamic #t6 = math::min<core::num> in null);
-  self::takeDID(let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+                                                                       ^" in (math::min<core::num>) as{TypeError} (core::double, core::int) → core::int);
+  self::takeDID(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
-                                                                       ^" in let final dynamic #t8 = math::min<core::num> in null);
+                                                                       ^" in (math::min<core::num>) as{TypeError} (core::int, core::double) → core::double);
   self::takeOON((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeIII(new self::C::•().{self::C::m}<core::int>);
@@ -95,14 +95,14 @@
   self::takeOON((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOI((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
           . /*@target=C::m*/ m);
-                             ^" in let final dynamic #t10 = new self::C::•().{self::C::m}<core::num> in null);
-  self::takeDID(let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+                             ^" in (new self::C::•().{self::C::m}<core::num>) as{TypeError} (core::double, core::int) → core::int);
+  self::takeDID(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
           . /*@target=C::m*/ m);
-                             ^" in let final dynamic #t12 = new self::C::•().{self::C::m}<core::num> in null);
+                             ^" in (new self::C::•().{self::C::m}<core::num>) as{TypeError} (core::int, core::double) → core::double);
 }
 static method takeIII((core::int, core::int) → core::int fn) → void {}
 static method takeDDD((core::double, core::double) → core::double fn) → void {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
index cd564cf..6dde83c 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
@@ -21,14 +21,14 @@
   self::takeIIO(math::max<core::int>);
   self::takeDDO(math::max<core::double>);
   self::takeOOI((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
-                                                                        ^" in let final (core::num, core::num) → core::num #t2 = math::max<core::num> in null);
-  self::takeDID(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+                                                                        ^" in (math::max<core::num>) as{TypeError} (core::double, core::int) → core::int);
+  self::takeDID(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
-                                                                        ^" in let final (core::num, core::num) → core::num #t4 = math::max<core::num> in null);
+                                                                        ^" in (math::max<core::num>) as{TypeError} (core::int, core::double) → core::double);
   self::takeOON((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeIII(math::min<core::int>);
@@ -41,14 +41,14 @@
   self::takeIIO(math::min<core::int>);
   self::takeDDO(math::min<core::double>);
   self::takeOOI((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
-                                                                       ^" in let final (core::num, core::num) → core::num #t6 = math::min<core::num> in null);
-  self::takeDID(let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+                                                                       ^" in (math::min<core::num>) as{TypeError} (core::double, core::int) → core::int);
+  self::takeDID(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
-                                                                       ^" in let final (core::num, core::num) → core::num #t8 = math::min<core::num> in null);
+                                                                       ^" in (math::min<core::num>) as{TypeError} (core::int, core::double) → core::double);
   self::takeOON((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeIII(new self::C::•().{self::C::m}<core::int>);
@@ -63,14 +63,14 @@
   self::takeOON((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOI((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
           . /*@target=C::m*/ m);
-                             ^" in let final (core::num, core::num) → core::num #t10 = new self::C::•().{self::C::m}<core::num> in null);
-  self::takeDID(let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+                             ^" in (new self::C::•().{self::C::m}<core::num>) as{TypeError} (core::double, core::int) → core::int);
+  self::takeDID(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: The argument type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to the parameter type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the parameter, or casting the argument to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
           . /*@target=C::m*/ m);
-                             ^" in let final (core::num, core::num) → core::num #t12 = new self::C::•().{self::C::m}<core::num> in null);
+                             ^" in (new self::C::•().{self::C::m}<core::num>) as{TypeError} (core::int, core::double) → core::double);
 }
 static method takeIII((core::int, core::int) → core::int fn) → void {}
 static method takeDDD((core::double, core::double) → core::double fn) → void {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.expect
index 5b0e517..4d18a21 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.expect
@@ -31,8 +31,8 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::String x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["int", "42"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["String", "\"hello\""]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  core::String x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["int", "42"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  dynamic y = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["String", "\"hello\""]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
   y = "world";
   y = 42;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.transformed.expect
index 89adde8..38e8d5b1 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.direct.transformed.expect
@@ -13,8 +13,8 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::String x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["int", "42"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["String", "\"hello\""]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  core::String x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["int", "42"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  dynamic y = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#JS, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["String", "\"hello\""]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
   y = "world";
   y = 42;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
index 8bb727b..b21df2e 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
@@ -11,9 +11,9 @@
 
 static method f() → void {
   core::List<core::String> y;
-  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           1.0);
-          ^" in let final dynamic #t2 = 1.0 in null);
+          ^" in 1.0 as{TypeError} core::String);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.transformed.expect
index 113e131..1e283f0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.transformed.expect
@@ -4,9 +4,9 @@
 
 static method f() → void {
   core::List<core::String> y;
-  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           1.0);
-          ^" in let final core::double #t2 = 1.0 in null);
+          ^" in 1.0 as{TypeError} core::String);
 }
 static method main() → dynamic {}
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 80c8abf..64d369e 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
@@ -20,14 +20,14 @@
 static method test() → dynamic {
   core::Iterable<asy::Future<core::int>> list = <core::int>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int>>(self::make);
   asy::Future<core::List<core::int>> results = asy::Future::wait<core::int>(list);
-  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => (let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.
+  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => (let final dynamic #t1 = x in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.
 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>));
-  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 dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to the parameter type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.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> #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to the parameter type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
 Try changing the type of the parameter, or casting the argument to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
-                                                                                                           ^" in let final dynamic #t3 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in null));
+                                                                                                           ^" in ((core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}())) as{TypeError} (asy::FutureOr<core::String>, core::int) → asy::FutureOr<core::String>));
   asy::Future<core::String> results4 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → core::String => list.{core::Iterable::fold}<core::String>("", (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}())));
 }
 static method main() → dynamic {}
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 221ebfd..6bd4abe 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
@@ -8,14 +8,14 @@
 static method test() → dynamic {
   core::Iterable<asy::Future<core::int>> list = <core::int>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int>>(self::make);
   asy::Future<core::List<core::int>> results = asy::Future::wait<core::int>(list);
-  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => (let final asy::FutureOr<core::String> #t1 = x in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.
+  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => (let final asy::FutureOr<core::String> #t1 = x in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.
 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>));
-  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<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to the parameter type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.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> #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: The argument type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to the parameter type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
 Try changing the type of the parameter, or casting the argument to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
-                                                                                                           ^" in let final (core::String, core::int) → core::String #t3 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in null));
+                                                                                                           ^" in ((core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}())) as{TypeError} (asy::FutureOr<core::String>, core::int) → asy::FutureOr<core::String>));
   asy::Future<core::String> results4 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → core::String => list.{core::Iterable::fold}<core::String>("", (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}())));
 }
 static method main() → dynamic {}
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 7a3091d..ac98055 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
@@ -40,21 +40,21 @@
   core::String s;
   core::int i;
   s = new self::B::•().{self::B::x} as{TypeError} core::String;
-  s = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  s = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
-                                                             ^" in let final dynamic #t2 = new self::B::•().{self::B::y} in null;
+                                                             ^" in new self::B::•().{self::B::y} as{TypeError} core::String;
   s = new self::B::•().{self::B::z};
-  s = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
-                                                             ^" in let final dynamic #t4 = new self::B::•().{self::B::w} in null;
+                                                             ^" 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::y};
-  i = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
-                                                             ^" in let final dynamic #t6 = new self::B::•().{self::B::z} in null;
+                                                             ^" in new self::B::•().{self::B::z} as{TypeError} core::int;
   i = new self::B::•().{self::B::w};
 }
 static method main() → dynamic {}
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 b755212..6337119 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
@@ -23,21 +23,21 @@
   core::String s;
   core::int i;
   s = new self::B::•().{self::B::x} as{TypeError} core::String;
-  s = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  s = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
-                                                             ^" in let final core::int #t2 = new self::B::•().{self::B::y} in null;
+                                                             ^" in new self::B::•().{self::B::y} as{TypeError} core::String;
   s = new self::B::•().{self::B::z};
-  s = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
-                                                             ^" in let final core::int #t4 = new self::B::•().{self::B::w} in null;
+                                                             ^" 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::y};
-  i = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
-                                                             ^" in let final core::String #t6 = new self::B::•().{self::B::z} in null;
+                                                             ^" in new self::B::•().{self::B::z} as{TypeError} core::int;
   i = new self::B::•().{self::B::w};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
index c1990f1..2e6223f 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
@@ -26,8 +26,8 @@
     ;
 }
 static field dynamic a = new self::A::•();
-static field dynamic b = new self::B::•(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-static field dynamic c1 = <dynamic>[throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))];
+static field dynamic b = new self::B::•(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+static field dynamic c1 = <dynamic>[let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))];
 static field dynamic c2 = const <dynamic>[];
 static field dynamic d = <dynamic, dynamic>{"a": "b"};
 static field dynamic e = let final dynamic #t1 = new self::A::•() in let final dynamic #t2 = #t1.x = 3 in #t1;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.transformed.expect
index 9c6ee49..5140db2 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.transformed.expect
@@ -16,8 +16,8 @@
     ;
 }
 static field dynamic a = new self::A::•();
-static field dynamic b = new self::B::•(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-static field dynamic c1 = <dynamic>[throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))];
+static field dynamic b = new self::B::•(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+static field dynamic c1 = <dynamic>[let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))];
 static field dynamic c2 = const <dynamic>[];
 static field dynamic d = <dynamic, dynamic>{"a": "b"};
 static field dynamic e = let final dynamic #t1 = new self::A::•() in let final dynamic #t2 = #t1.x = 3 in #t1;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 144cd0f..f779922 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -98,66 +98,66 @@
 static field core::int f = 2.{core::num::+}(3);
 static field core::int g = 3.{core::int::unary-}();
 static field self::B h = new self::A::•().{self::A::+}(3);
-static field dynamic i = let final dynamic #t3 = new self::A::•() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.
+static field dynamic i = let final dynamic #t3 = new self::A::•() in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.
 Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
 var /*@topType=dynamic*/ i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
                                                                               ^";
 static field self::B j = null as self::B;
 static method test1() → dynamic {
-  self::a = let dynamic _ = null in let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
+  self::a = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t5 = "hi" in null;
+                                   ^" in "hi" as{TypeError} self::A;
   self::a = new self::B::•(3);
-  self::b = let dynamic _ = null in let final dynamic #t6 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
+  self::b = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t7 = "hi" in null;
+                                   ^" in "hi" as{TypeError} self::B;
   self::b = new self::B::•(3);
   self::c1 = <dynamic>[];
-  self::c1 = let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+  self::c1 = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                   ^" in let final dynamic #t9 = <dynamic, dynamic>{} in null;
+                                                                   ^" in <dynamic, dynamic>{} as{TypeError} core::List<dynamic>;
   self::c2 = <dynamic>[];
-  self::c2 = let dynamic _ = null in let final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+  self::c2 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                   ^" in let final dynamic #t11 = <dynamic, dynamic>{} in null;
+                                                                   ^" in <dynamic, dynamic>{} as{TypeError} core::List<dynamic>;
   self::d = <dynamic, dynamic>{};
-  self::d = let dynamic _ = null in let final dynamic #t12 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
+  self::d = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
-                                   ^" in let final dynamic #t13 = 3 in null;
+                                   ^" in 3 as{TypeError} core::Map<dynamic, dynamic>;
   self::e = new self::A::•();
-  self::e = let dynamic _ = null in let final dynamic #t14 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
+  self::e = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                  ^" in let final dynamic #t15 = <dynamic, dynamic>{} in null;
+                                                                  ^" in <dynamic, dynamic>{} as{TypeError} self::A;
   self::f = 3;
-  self::f = let dynamic _ = null in let final dynamic #t16 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+  self::f = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in let final dynamic #t17 = false in null;
+                                   ^" in false as{TypeError} core::int;
   self::g = 1;
-  self::g = let dynamic _ = null in let final dynamic #t18 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+  self::g = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in let final dynamic #t19 = false in null;
-  self::h = let dynamic _ = null in let final dynamic #t20 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+                                   ^" in false as{TypeError} core::int;
+  self::h = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in let final dynamic #t21 = false in null;
+                                   ^" in false as{TypeError} self::B;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
-  self::j = let dynamic _ = null in let final dynamic #t22 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+  self::j = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in let final dynamic #t23 = false in null;
-  self::j = let dynamic _ = null in let final dynamic #t24 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
+                                   ^" in false as{TypeError} self::B;
+  self::j = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
-                                                         ^" in let final dynamic #t25 = <dynamic>[] in null;
+                                                         ^" in <dynamic>[] as{TypeError} self::B;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
index 4707ec5..6987569 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
@@ -28,66 +28,66 @@
 static field core::int f = 2.{core::num::+}(3);
 static field core::int g = 3.{core::int::unary-}();
 static field self::B h = new self::A::•().{self::A::+}(3);
-static field dynamic i = let final self::A #t3 = new self::A::•() in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.
+static field dynamic i = let final self::A #t3 = new self::A::•() in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.
 Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
 var /*@topType=dynamic*/ i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
                                                                               ^";
 static field self::B j = null as self::B;
 static method test1() → dynamic {
-  self::a = let<BottomType> _ = null in let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
+  self::a = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t5 = "hi" in null;
+                                   ^" in "hi" as{TypeError} self::A;
   self::a = new self::B::•(3);
-  self::b = let<BottomType> _ = null in let final dynamic #t6 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
+  self::b = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t7 = "hi" in null;
+                                   ^" in "hi" as{TypeError} self::B;
   self::b = new self::B::•(3);
   self::c1 = <dynamic>[];
-  self::c1 = let<BottomType> _ = null in let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+  self::c1 = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                   ^" in let final core::Map<dynamic, dynamic> #t9 = <dynamic, dynamic>{} in null;
+                                                                   ^" in <dynamic, dynamic>{} as{TypeError} core::List<dynamic>;
   self::c2 = <dynamic>[];
-  self::c2 = let<BottomType> _ = null in let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+  self::c2 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                   ^" in let final core::Map<dynamic, dynamic> #t11 = <dynamic, dynamic>{} in null;
+                                                                   ^" in <dynamic, dynamic>{} as{TypeError} core::List<dynamic>;
   self::d = <dynamic, dynamic>{};
-  self::d = let<BottomType> _ = null in let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
+  self::d = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
-                                   ^" in let final core::int #t13 = 3 in null;
+                                   ^" in 3 as{TypeError} core::Map<dynamic, dynamic>;
   self::e = new self::A::•();
-  self::e = let<BottomType> _ = null in let final dynamic #t14 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
+  self::e = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
-                                                                  ^" in let final core::Map<dynamic, dynamic> #t15 = <dynamic, dynamic>{} in null;
+                                                                  ^" in <dynamic, dynamic>{} as{TypeError} self::A;
   self::f = 3;
-  self::f = let<BottomType> _ = null in let final dynamic #t16 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+  self::f = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in let final core::bool #t17 = false in null;
+                                   ^" in false as{TypeError} core::int;
   self::g = 1;
-  self::g = let<BottomType> _ = null in let final dynamic #t18 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+  self::g = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in let final core::bool #t19 = false in null;
-  self::h = let<BottomType> _ = null in let final dynamic #t20 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+                                   ^" in false as{TypeError} core::int;
+  self::h = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in let final core::bool #t21 = false in null;
+                                   ^" in false as{TypeError} self::B;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
-  self::j = let<BottomType> _ = null in let final dynamic #t22 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+  self::j = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
-                                   ^" in let final core::bool #t23 = false in null;
-  self::j = let<BottomType> _ = null in let final dynamic #t24 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
+                                   ^" in false as{TypeError} self::B;
+  self::j = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
-                                                         ^" in let final core::List<dynamic> #t25 = <dynamic>[] in null;
+                                                         ^" in <dynamic>[] as{TypeError} self::B;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
index 7e3bee0..a43d328 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
@@ -17,13 +17,13 @@
 
 static field core::int y = inf::x;
 static method test1() → dynamic {
-  inf::x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  inf::x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t2 = "hi" in null;
-  self::y = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                   ^" in "hi" as{TypeError} core::int;
+  self::y = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t4 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.transformed.expect
index 5889b18..3f2a51c4 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.transformed.expect
@@ -5,13 +5,13 @@
 
 static field core::int y = inf::x;
 static method test1() → dynamic {
-  inf::x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  inf::x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t2 = "hi" in null;
-  self::y = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                   ^" in "hi" as{TypeError} core::int;
+  self::y = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t4 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
index 394d994..0e683ae 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
@@ -22,13 +22,13 @@
     ;
 }
 static method test1() → dynamic {
-  inf::A::x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  inf::A::x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final dynamic #t2 = "hi" in null;
-  self::B::y = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                     ^" in "hi" as{TypeError} core::int;
+  self::B::y = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final dynamic #t4 = "hi" in null;
+                                     ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.transformed.expect
index 72a6817..2faada5 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.transformed.expect
@@ -10,13 +10,13 @@
     ;
 }
 static method test1() → dynamic {
-  inf::A::x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  inf::A::x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final core::String #t2 = "hi" in null;
-  self::B::y = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                     ^" in "hi" as{TypeError} core::int;
+  self::B::y = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final core::String #t4 = "hi" in null;
+                                     ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
index 45294a7..22fa159 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
@@ -17,7 +17,7 @@
 
 static method test() → dynamic {
   function f() → dynamic
-    return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    return let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
   {
     invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
   g() => 0;
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.transformed.expect
index 9071805..7a403de 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.transformed.expect
@@ -4,7 +4,7 @@
 
 static method test() → dynamic {
   function f() → dynamic
-    return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    return let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
   {
     invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
   g() => 0;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
index 4d381de..ee619f7 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
@@ -23,10 +23,10 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
-                                                                    ^" in let final dynamic #t2 = new self::B::•().{self::B::x} in null;
+                                                                    ^" in new self::B::•().{self::B::x} as{TypeError} core::String;
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.transformed.expect
index 966e4b4..876c070 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.transformed.expect
@@ -16,10 +16,10 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
-                                                                    ^" in let final core::int #t2 = new self::B::•().{self::B::x} in null;
+                                                                    ^" in new self::B::•().{self::B::x} as{TypeError} core::String;
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
index bb01fc3..54c5948 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
@@ -23,10 +23,10 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
-                                                                    ^" in let final dynamic #t2 = new self::B::•().{self::B::x} in null;
+                                                                    ^" in new self::B::•().{self::B::x} as{TypeError} core::String;
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.transformed.expect
index 451094c..146b3b8 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.transformed.expect
@@ -16,10 +16,10 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
-                                                                    ^" in let final core::int #t2 = new self::B::•().{self::B::x} in null;
+                                                                    ^" in new self::B::•().{self::B::x} as{TypeError} core::String;
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
index 67fece6..87bfaa8 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
@@ -11,9 +11,9 @@
 
 static method test1() → dynamic {
   core::int x = 3;
-  x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t2 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.transformed.expect
index efe4122..76e056d 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.transformed.expect
@@ -4,9 +4,9 @@
 
 static method test1() → dynamic {
   core::int x = 3;
-  x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t2 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
index 71ad907..4bcb3e9 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
@@ -11,9 +11,9 @@
 
 static method test2() → dynamic {
   core::int x = 3;
-  x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t2 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.transformed.expect
index 93650c3..326869e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.transformed.expect
@@ -4,9 +4,9 @@
 
 static method test2() → dynamic {
   core::int x = 3;
-  x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t2 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
index af78a18..07ab628 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
@@ -28,22 +28,22 @@
     ;
   method test1() → dynamic {
     core::int a = this.{self::A::x};
-    a = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    a = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final dynamic #t2 = "hi" in null;
+                                     ^" in "hi" as{TypeError} core::int;
     a = 3;
     core::int b = this.{self::A::y};
-    b = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    b = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final dynamic #t4 = "hi" in null;
+                                     ^" in "hi" as{TypeError} core::int;
     b = 4;
     core::int c = this.{self::A::z};
-    c = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    c = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final dynamic #t6 = "hi" in null;
+                                     ^" in "hi" as{TypeError} core::int;
     c = 4;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.transformed.expect
index 3df085f..1c23586 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.transformed.expect
@@ -11,22 +11,22 @@
     ;
   method test1() → dynamic {
     core::int a = this.{self::A::x};
-    a = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    a = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final core::String #t2 = "hi" in null;
+                                     ^" in "hi" as{TypeError} core::int;
     a = 3;
     core::int b = this.{self::A::y};
-    b = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    b = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final core::String #t4 = "hi" in null;
+                                     ^" in "hi" as{TypeError} core::int;
     b = 4;
     core::int c = this.{self::A::z};
-    c = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    c = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                     ^" in let final core::String #t6 = "hi" in null;
+                                     ^" in "hi" as{TypeError} core::int;
     c = 4;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
index 21d3ddd..cdf82c5 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
@@ -24,22 +24,22 @@
 static final field core::int z = 42;
 static method test1() → dynamic {
   core::int a = self::x;
-  a = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t2 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
   a = 3;
   core::int b = self::y;
-  b = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  b = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t4 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
   b = 4;
   core::int c = self::z;
-  c = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  c = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final dynamic #t6 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
   c = 4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.transformed.expect
index 6f715a0..36eda3f 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.transformed.expect
@@ -7,22 +7,22 @@
 static final field core::int z = 42;
 static method test1() → dynamic {
   core::int a = self::x;
-  a = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t2 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
   a = 3;
   core::int b = self::y;
-  b = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  b = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t4 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
   b = 4;
   core::int c = self::z;
-  c = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  c = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                   ^" in let final core::String #t6 = "hi" in null;
+                                   ^" in "hi" as{TypeError} core::int;
   c = 4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
index 5da8202..006b968 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
@@ -26,10 +26,10 @@
 }
 static method foo() → dynamic {
   core::int y = new self::C::•().{self::C::x};
-  core::String z = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String z = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
-                                                                    ^" in let final dynamic #t2 = new self::C::•().{self::C::x} in null;
+                                                                    ^" in new self::C::•().{self::C::x} as{TypeError} core::String;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.transformed.expect
index fb30f31..16a77f1 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.transformed.expect
@@ -19,10 +19,10 @@
 }
 static method foo() → dynamic {
   core::int y = new self::C::•().{self::C::x};
-  core::String z = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String z = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
-                                                                    ^" in let final core::int #t2 = new self::C::•().{self::C::x} in null;
+                                                                    ^" in new self::C::•().{self::C::x} as{TypeError} core::String;
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
index ff997cc..1b089f4 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
@@ -28,16 +28,16 @@
   get x() → core::int
     return 3;
   get w() → core::int
-    return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
-                                                             ^" in let final dynamic #t2 = "hello" in null;
+                                                             ^" in "hello" as{TypeError} core::int;
 }
 static method foo() → dynamic {
-  core::String y = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
-                                                                    ^" in let final dynamic #t4 = new self::B::•().{self::B::x} in null;
+                                                                    ^" in new self::B::•().{self::B::x} as{TypeError} core::String;
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
index 03e0fca..15ab94b 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
@@ -16,16 +16,16 @@
   get x() → core::int
     return 3;
   get w() → core::int
-    return let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
-                                                             ^" in let final core::String #t2 = "hello" in null;
+                                                             ^" in "hello" as{TypeError} core::int;
 }
 static method foo() → dynamic {
-  core::String y = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
-                                                                    ^" in let final core::int #t4 = new self::B::•().{self::B::x} in null;
+                                                                    ^" in new self::B::•().{self::B::x} as{TypeError} core::String;
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
index fb3dde7..7e26f47 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
@@ -24,10 +24,10 @@
     return this.{self::B::y};
 }
 static method foo() → dynamic {
-  core::int y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;
-                                                                         ^" in let final dynamic #t2 = new self::B::•<core::String>().{self::B::x} in null;
+                                                                         ^" in new self::B::•<core::String>().{self::B::x} as{TypeError} core::int;
   core::String z = new self::B::•<core::String>().{self::B::x};
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
index 561f5a2..8e951e7 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
@@ -17,10 +17,10 @@
     return this.{self::B::y};
 }
 static method foo() → dynamic {
-  core::int y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;
-                                                                         ^" in let final core::String #t2 = new self::B::•<core::String>().{self::B::x} in null;
+                                                                         ^" in new self::B::•<core::String>().{self::B::x} as{TypeError} core::int;
   core::String z = new self::B::•<core::String>().{self::B::x};
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
index 80d67c3..102ec33 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
@@ -36,10 +36,10 @@
   method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
 }
 static method foo() → dynamic {
-  core::int y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       . /*@target=B::m*/ m(null, null);
-                         ^" in let final dynamic #t2 = new self::B::•<dynamic>().{self::B::m}(null, null) in null;
+                         ^" in new self::B::•<dynamic>().{self::B::m}(null, null) as{TypeError} core::int;
   core::String z = new self::B::•<dynamic>().{self::B::m}(null, null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
index 4ab82e5..2ca699b 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
@@ -29,10 +29,10 @@
   method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
 }
 static method foo() → dynamic {
-  core::int y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       . /*@target=B::m*/ m(null, null);
-                         ^" in let final core::String #t2 = new self::B::•<dynamic>().{self::B::m}(null, null) in null;
+                         ^" in new self::B::•<dynamic>().{self::B::m}(null, null) as{TypeError} core::int;
   core::String z = new self::B::•<dynamic>().{self::B::m}(null, null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
index e44c5b7..9c11d3e 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
@@ -31,10 +31,10 @@
   method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
 }
 static method foo() → dynamic {
-  core::int y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       . /*@target=A::value*/ value;
-                             ^" in let final dynamic #t2 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in null;
+                             ^" in new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} as{TypeError} core::int;
   core::String z = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
index 6038c2c..49312eb 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
@@ -24,10 +24,10 @@
   method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
 }
 static method foo() → dynamic {
-  core::int y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       . /*@target=A::value*/ value;
-                             ^" in let final core::String #t2 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in null;
+                             ^" in new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} as{TypeError} core::int;
   core::String z = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value};
 }
 static method main() → dynamic {}
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 020af4b..112fadb 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
@@ -40,10 +40,10 @@
     ;
   method foo(generic-covariant-impl self::Bar::T t) → void {
     for (core::String i in t) {
-      core::int x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in let final dynamic #t2 = i in null;
+                                           ^" in i as{TypeError} core::int;
     }
   }
 }
@@ -53,10 +53,10 @@
     ;
   method foo(generic-covariant-impl self::Baz::S t) → void {
     for (self::Baz::T i in t) {
-      core::int x = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in let final dynamic #t4 = i in null;
+                                           ^" in i as{TypeError} core::int;
       self::Baz::T y = i;
     }
   }
@@ -64,40 +64,40 @@
 static method test() → dynamic {
   core::List<self::Foo> list = <self::Foo>[];
   for (self::Foo x in list) {
-    core::String y = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String y = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in let final dynamic #t6 = x in null;
+                                            ^" in x as{TypeError} core::String;
   }
   for (dynamic x in list) {
     core::String y = x as{TypeError} core::String;
   }
-  for (final self::Foo #t7 in list) {
-    core::String x = let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.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 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the variable.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
-              ^" in let final dynamic #t9 = #t7 in null;
+              ^" in #t4 as{TypeError} core::String;
     core::String y = x;
   }
   dynamic z;
-  for (final self::Foo #t10 in list) {
-    z = #t10;
+  for (final self::Foo #t6 in list) {
+    z = #t6;
     core::String y = z as{TypeError} core::String;
   }
   core::Iterable<dynamic> iter = list;
-  for (final dynamic #t11 in iter) {
-    self::Foo x = #t11 as{TypeError} self::Foo;
+  for (final dynamic #t7 in iter) {
+    self::Foo x = #t7 as{TypeError} self::Foo;
     self::Foo y = x;
   }
   dynamic iter2 = list;
-  for (final dynamic #t12 in iter2 as{TypeError} core::Iterable<dynamic>) {
-    self::Foo x = #t12 as{TypeError} self::Foo;
+  for (final dynamic #t8 in iter2 as{TypeError} core::Iterable<dynamic>) {
+    self::Foo x = #t8 as{TypeError} self::Foo;
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  for (dynamic x in let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+  for (dynamic x in let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
   for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
-                                                                   ^" in let final dynamic #t14 = map in null) {
+                                                                   ^" in map as{TypeError} core::Iterable<dynamic>) {
     core::String y = x as{TypeError} core::String;
   }
   for (core::String x in map.{core::Map::keys}) {
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 08d6327..83284f9 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
@@ -14,10 +14,10 @@
     ;
   method foo(generic-covariant-impl self::Bar::T t) → void {
     for (core::String i in t) {
-      core::int x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in let final core::String #t2 = i in null;
+                                           ^" in i as{TypeError} core::int;
     }
   }
 }
@@ -27,10 +27,10 @@
     ;
   method foo(generic-covariant-impl self::Baz::S t) → void {
     for (self::Baz::T i in t) {
-      core::int x = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in let final self::Baz::T #t4 = i in null;
+                                           ^" in i as{TypeError} core::int;
       self::Baz::T y = i;
     }
   }
@@ -38,40 +38,40 @@
 static method test() → dynamic {
   core::List<self::Foo> list = <self::Foo>[];
   for (self::Foo x in list) {
-    core::String y = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String y = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in let final self::Foo #t6 = x in null;
+                                            ^" in x as{TypeError} core::String;
   }
   for (dynamic x in list) {
     core::String y = x as{TypeError} core::String;
   }
-  for (final self::Foo #t7 in list) {
-    core::String x = let<BottomType> _ = null in let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.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 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the variable.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
-              ^" in let final self::Foo #t9 = #t7 in null;
+              ^" in #t4 as{TypeError} core::String;
     core::String y = x;
   }
   dynamic z;
-  for (final self::Foo #t10 in list) {
-    z = #t10;
+  for (final self::Foo #t6 in list) {
+    z = #t6;
     core::String y = z as{TypeError} core::String;
   }
   core::Iterable<dynamic> iter = list;
-  for (final dynamic #t11 in iter) {
-    self::Foo x = #t11 as{TypeError} self::Foo;
+  for (final dynamic #t7 in iter) {
+    self::Foo x = #t7 as{TypeError} self::Foo;
     self::Foo y = x;
   }
   dynamic iter2 = list;
-  for (final dynamic #t12 in iter2 as{TypeError} core::Iterable<dynamic>) {
-    self::Foo x = #t12 as{TypeError} self::Foo;
+  for (final dynamic #t8 in iter2 as{TypeError} core::Iterable<dynamic>) {
+    self::Foo x = #t8 as{TypeError} self::Foo;
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  for (dynamic x in let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+  for (dynamic x in let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
   for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
-                                                                   ^" in let final core::Map<core::String, self::Foo> #t14 = map in null) {
+                                                                   ^" in map as{TypeError} core::Iterable<dynamic>) {
     core::String y = x as{TypeError} core::String;
   }
   for (core::String x in map.{core::Map::keys}) {
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 d47a9c1..6da61a8c 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
@@ -41,10 +41,10 @@
     ;
   method foo(generic-covariant-impl self::Bar::T t) → dynamic async {
     await for (core::String i in t) {
-      core::int x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in let final dynamic #t2 = i in null;
+                                           ^" in i as{TypeError} core::int;
     }
   }
 }
@@ -54,10 +54,10 @@
     ;
   method foo(generic-covariant-impl self::Baz::S t) → dynamic async {
     await for (self::Baz::T i in t) {
-      core::int x = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in let final dynamic #t4 = i in null;
+                                           ^" in i as{TypeError} core::int;
       self::Baz::T y = i;
     }
   }
@@ -69,40 +69,40 @@
 static method test() → dynamic async {
   self::MyStream<self::Foo> myStream = self::MyStream::•<self::Foo>();
   await for (self::Foo x in myStream) {
-    core::String y = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String y = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in let final dynamic #t6 = x in null;
+                                            ^" in x as{TypeError} core::String;
   }
   await for (dynamic x in myStream) {
     core::String y = x as{TypeError} core::String;
   }
-  await for (final self::Foo #t7 in myStream) {
-    core::String x = let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.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 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the variable.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
-                    ^" in let final dynamic #t9 = #t7 in null;
+                    ^" in #t4 as{TypeError} core::String;
     core::String y = x;
   }
   dynamic z;
-  await for (final self::Foo #t10 in myStream) {
-    z = #t10;
+  await for (final self::Foo #t6 in myStream) {
+    z = #t6;
     core::String y = z as{TypeError} core::String;
   }
   asy::Stream<dynamic> stream = myStream;
-  await for (final dynamic #t11 in stream) {
-    self::Foo x = #t11 as{TypeError} self::Foo;
+  await for (final dynamic #t7 in stream) {
+    self::Foo x = #t7 as{TypeError} self::Foo;
     self::Foo y = x;
   }
   dynamic stream2 = myStream;
-  await for (final dynamic #t12 in stream2 as{TypeError} asy::Stream<dynamic>) {
-    self::Foo x = #t12 as{TypeError} self::Foo;
+  await for (final dynamic #t8 in stream2 as{TypeError} asy::Stream<dynamic>) {
+    self::Foo x = #t8 as{TypeError} self::Foo;
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  await for (dynamic x in let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+  await for (dynamic x in let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
   await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
-                                                                         ^" in let final dynamic #t14 = map in null) {
+                                                                         ^" in map as{TypeError} asy::Stream<dynamic>) {
     core::String y = x as{TypeError} core::String;
   }
 }
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 8cf054d..9fb1a36 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
@@ -42,10 +42,10 @@
                 if(:result) {
                   core::String i = :for-iterator.{asy::_StreamIterator::current};
                   {
-                    core::int x = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                    core::int x = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in let final core::String #t4 = i in null;
+                                           ^" in i as{TypeError} core::int;
                   }
                 }
                 else
@@ -53,7 +53,7 @@
               }
             finally
               if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-                [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
                 :result;
               }
           }
@@ -99,15 +99,15 @@
             try
               #L4:
               while (true) {
-                dynamic #t6 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+                dynamic #t5 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+                [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
                 if(:result) {
                   self::Baz::T i = :for-iterator.{asy::_StreamIterator::current};
                   {
-                    core::int x = let<BottomType> _ = null in let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+                    core::int x = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
-                                           ^" in let final self::Baz::T #t9 = i in null;
+                                           ^" in i as{TypeError} core::int;
                     self::Baz::T y = i;
                   }
                 }
@@ -116,7 +116,7 @@
               }
             finally
               if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-                [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+                [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
                 :result;
               }
           }
@@ -163,15 +163,15 @@
           try
             #L6:
             while (true) {
-              dynamic #t11 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t9 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
                 self::Foo x = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::String y = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+                  core::String y = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
-                                            ^" in let final self::Foo #t14 = x in null;
+                                            ^" in x as{TypeError} core::String;
                 }
               }
               else
@@ -179,7 +179,7 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -191,8 +191,8 @@
           try
             #L7:
             while (true) {
-              dynamic #t16 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t13 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current};
                 {
@@ -204,7 +204,7 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -216,15 +216,15 @@
           try
             #L8:
             while (true) {
-              dynamic #t19 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t16 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
-                final self::Foo #t21 = :for-iterator.{asy::_StreamIterator::current};
+                final self::Foo #t18 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::String x = let<BottomType> _ = null in let final dynamic #t22 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+                  core::String x = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the variable.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
-                    ^" in let final self::Foo #t23 = #t21 in null;
+                    ^" in #t18 as{TypeError} core::String;
                   core::String y = x;
                 }
               }
@@ -233,7 +233,7 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -246,12 +246,12 @@
           try
             #L9:
             while (true) {
-              dynamic #t25 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t26 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t21 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
-                final self::Foo #t27 = :for-iterator.{asy::_StreamIterator::current};
+                final self::Foo #t23 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  z = #t27;
+                  z = #t23;
                   core::String y = z as{TypeError} core::String;
                 }
               }
@@ -260,7 +260,7 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t28 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -273,12 +273,12 @@
           try
             #L10:
             while (true) {
-              dynamic #t29 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t30 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t25 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t26 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
-                final dynamic #t31 = :for-iterator.{asy::_StreamIterator::current};
+                final dynamic #t27 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  self::Foo x = #t31 as{TypeError} self::Foo;
+                  self::Foo x = #t27 as{TypeError} self::Foo;
                   self::Foo y = x;
                 }
               }
@@ -287,7 +287,7 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t32 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t28 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
@@ -300,12 +300,12 @@
           try
             #L11:
             while (true) {
-              dynamic #t33 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t34 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t29 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t30 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
-                final dynamic #t35 = :for-iterator.{asy::_StreamIterator::current};
+                final dynamic #t31 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  self::Foo x = #t35 as{TypeError} self::Foo;
+                  self::Foo x = #t31 as{TypeError} self::Foo;
                   self::Foo y = x;
                 }
               }
@@ -314,23 +314,23 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t36 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t32 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
         core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
         {
-          dynamic :stream = let<BottomType> _ = null in let final dynamic #t37 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+          dynamic :stream = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: The type 'dart.core::Map<dart.core::String, test::Foo>' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
   await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
-                                                                         ^" in let final core::Map<core::String, self::Foo> #t38 = map in null;
+                                                                         ^" in map as{TypeError} asy::Stream<dynamic>;
           asy::_asyncStarListenHelper(:stream, :async_op);
           asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           const core::bool :product-mode = const core::bool::fromEnvironment("dart.vm.product");
           try
             #L12:
             while (true) {
-              dynamic #t39 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t40 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t34 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t35 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current};
                 {
@@ -342,7 +342,7 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t41 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t36 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
index e19f20c..490375b 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
@@ -11,10 +11,10 @@
 
 class Foo extends core::Object {
   field core::int x = 1;
-  constructor •([core::int x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  constructor •([core::int x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
-                                             ^" in let final dynamic #t2 = "1" in null]) → self::Foo
+                                             ^" in "1" as{TypeError} core::int]) → self::Foo
     : self::Foo::x = x, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.transformed.expect
index 15eee28..8e2e655 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.transformed.expect
@@ -4,10 +4,10 @@
 
 class Foo extends core::Object {
   field core::int x = 1;
-  constructor •([core::int x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  constructor •([core::int x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
-                                             ^" in let final core::String #t2 = "1" in null]) → self::Foo
+                                             ^" in "1" as{TypeError} core::int]) → self::Foo
     : self::Foo::x = x, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
index 1cd0d49..a8da79f 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
@@ -21,23 +21,23 @@
 
 static method test1() → dynamic {
   core::List<core::int> x = <core::int>[1, 2, 3];
-  x.{core::List::add}(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+  x.{core::List::add}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in let final dynamic #t2 = "hi" in null);
-  x.{core::List::add}(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+                                                                      ^" in "hi" as{TypeError} core::int);
+  x.{core::List::add}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                      ^" in let final dynamic #t4 = 4.0 in null);
+                                                                      ^" in 4.0 as{TypeError} core::int);
   x.{core::List::add}(4);
   core::List<core::num> y = x;
 }
 static method test2() → dynamic {
   core::List<core::num> x = <core::num>[1, 2.0, 3];
-  x.{core::List::add}(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
+  x.{core::List::add}(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::num'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in let final dynamic #t6 = "hi" in null);
+                                                                      ^" in "hi" as{TypeError} core::num);
   x.{core::List::add}(4.0);
   core::List<core::int> y = x as{TypeError} core::List<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/list_literals.dart.strong.transformed.expect
index c91995d..e30fbb0 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.strong.transformed.expect
@@ -4,23 +4,23 @@
 
 static method test1() → dynamic {
   core::List<core::int> x = <core::int>[1, 2, 3];
-  x.{core::List::add}(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+  x.{core::List::add}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in let final core::String #t2 = "hi" in null);
-  x.{core::List::add}(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+                                                                      ^" in "hi" as{TypeError} core::int);
+  x.{core::List::add}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                      ^" in let final core::double #t4 = 4.0 in null);
+                                                                      ^" in 4.0 as{TypeError} core::int);
   x.{core::List::add}(4);
   core::List<core::num> y = x;
 }
 static method test2() → dynamic {
   core::List<core::num> x = <core::num>[1, 2.0, 3];
-  x.{core::List::add}(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
+  x.{core::List::add}(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::num'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                      ^" in let final core::String #t6 = "hi" in null);
+                                                                      ^" in "hi" as{TypeError} core::num);
   x.{core::List::add}(4.0);
   core::List<core::int> y = x as{TypeError} core::List<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
index dadf046..270ead7 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
@@ -22,22 +22,22 @@
 static field core::List<core::int> x1 = <core::int>[1, 2, 3];
 static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
 static method test1() → dynamic {
-  self::x1.{core::List::add}(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+  self::x1.{core::List::add}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                       ^" in let final dynamic #t2 = "hi" in null);
-  self::x1.{core::List::add}(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+                                                                       ^" in "hi" as{TypeError} core::int);
+  self::x1.{core::List::add}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                       ^" in let final dynamic #t4 = 4.0 in null);
+                                                                       ^" in 4.0 as{TypeError} core::int);
   self::x1.{core::List::add}(4);
   core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::List::add}(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
+  self::x2.{core::List::add}(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::num'.
   x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                       ^" in let final dynamic #t6 = "hi" in null);
+                                                                       ^" in "hi" as{TypeError} core::num);
   self::x2.{core::List::add}(4.0);
   core::List<core::int> y = self::x2 as{TypeError} core::List<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.transformed.expect
index b26fec1..c6f9e28 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.transformed.expect
@@ -5,22 +5,22 @@
 static field core::List<core::int> x1 = <core::int>[1, 2, 3];
 static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
 static method test1() → dynamic {
-  self::x1.{core::List::add}(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
+  self::x1.{core::List::add}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                       ^" in let final core::String #t2 = "hi" in null);
-  self::x1.{core::List::add}(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
+                                                                       ^" in "hi" as{TypeError} core::int);
+  self::x1.{core::List::add}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'dart.core::int'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::int'.
   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
-                                                                       ^" in let final core::double #t4 = 4.0 in null);
+                                                                       ^" in 4.0 as{TypeError} core::int);
   self::x1.{core::List::add}(4);
   core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::List::add}(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
+  self::x2.{core::List::add}(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: The argument type 'dart.core::String' can't be assigned to the parameter type 'dart.core::num'.
 Try changing the type of the parameter, or casting the argument to 'dart.core::num'.
   x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
-                                                                       ^" in let final core::String #t6 = "hi" in null);
+                                                                       ^" in "hi" as{TypeError} core::num);
   self::x2.{core::List::add}(4.0);
   core::List<core::int> y = self::x2 as{TypeError} core::List<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
index 2841354..01ba56b 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
@@ -16,10 +16,10 @@
     return (core::int x) → core::int => x;
   }
   function b() → asy::Future<(core::int) → core::int> async {
-    return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
     return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
-                                   ^" in let final dynamic #t2 = (dynamic x) → dynamic => x in null;
+                                   ^" in ((dynamic x) → dynamic => x) as{TypeError} asy::FutureOr<(core::int) → core::int>;
   }
   function c() → core::Iterable<(core::int) → core::int> sync* {
     yield(core::int x) → core::int => x;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
index 4a4640d..f6fc957 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
@@ -20,10 +20,10 @@
       try {
         #L1:
         {
-          :return_value = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+          :return_value = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
     return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
-                                   ^" in let final (dynamic) → dynamic #t2 = (dynamic x) → dynamic => x in null;
+                                   ^" in ((dynamic x) → dynamic => x) as{TypeError} asy::FutureOr<(core::int) → core::int>;
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_completer, :return_value);
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
index 82c5211..9fa1326 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
@@ -32,32 +32,32 @@
 static method test1() → dynamic {
   core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::Map::[]=}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in let final dynamic #t2 = "hi" in null, "w");
-  x.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                             ^" in "hi" as{TypeError} core::int, "w");
+  x.{core::Map::[]=}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                             ^" in let final dynamic #t4 = 4.0 in null, "u");
-  x.{core::Map::[]=}(3, let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                             ^" in 4.0 as{TypeError} core::int, "u");
+  x.{core::Map::[]=}(3, let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in let final dynamic #t6 = 42 in null);
+                                                            ^" in 42 as{TypeError} core::String);
   core::Map<core::num, core::String> y = x;
 }
 static method test2() → dynamic {
   core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  x.{core::Map::[]=}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in let final dynamic #t8 = "hi" in null, "w");
+                                             ^" in "hi" as{TypeError} core::num, "w");
   x.{core::Map::[]=}(4.0, "u");
-  x.{core::Map::[]=}(3, let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+  x.{core::Map::[]=}(3, let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in let final dynamic #t10 = 42 in null);
+                                                            ^" in 42 as{TypeError} core::Pattern);
   core::Pattern p = null;
   x.{core::Map::[]=}(2, p);
   core::Map<core::int, core::String> y = x as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/map_literals.dart.strong.transformed.expect
index 3405df2..bdf50a5 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.strong.transformed.expect
@@ -5,32 +5,32 @@
 static method test1() → dynamic {
   core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::Map::[]=}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in let final core::String #t2 = "hi" in null, "w");
-  x.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                             ^" in "hi" as{TypeError} core::int, "w");
+  x.{core::Map::[]=}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                             ^" in let final core::double #t4 = 4.0 in null, "u");
-  x.{core::Map::[]=}(3, let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                             ^" in 4.0 as{TypeError} core::int, "u");
+  x.{core::Map::[]=}(3, let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in let final core::int #t6 = 42 in null);
+                                                            ^" in 42 as{TypeError} core::String);
   core::Map<core::num, core::String> y = x;
 }
 static method test2() → dynamic {
   core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  x.{core::Map::[]=}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                             ^" in let final core::String #t8 = "hi" in null, "w");
+                                             ^" in "hi" as{TypeError} core::num, "w");
   x.{core::Map::[]=}(4.0, "u");
-  x.{core::Map::[]=}(3, let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+  x.{core::Map::[]=}(3, let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                            ^" in let final core::int #t10 = 42 in null);
+                                                            ^" in 42 as{TypeError} core::Pattern);
   core::Pattern p = null;
   x.{core::Map::[]=}(2, p);
   core::Map<core::int, core::String> y = x as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
index 358d35f..a1067c9 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
@@ -33,31 +33,31 @@
 static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
   self::x1.{core::Map::[]=}(3, "z");
-  self::x1.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::Map::[]=}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                  ^" in let final dynamic #t2 = "hi" in null, "w");
-  self::x1.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hi" as{TypeError} core::int, "w");
+  self::x1.{core::Map::[]=}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                                                  ^" in let final dynamic #t4 = 4.0 in null, "u");
-  self::x1.{core::Map::[]=}(3, let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                  ^" in 4.0 as{TypeError} core::int, "u");
+  self::x1.{core::Map::[]=}(3, let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                             ^" in let final dynamic #t6 = 42 in null);
+                                                             ^" in 42 as{TypeError} core::String);
   core::Map<core::num, core::String> y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::Map::[]=}(3, "z");
-  self::x2.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  self::x2.{core::Map::[]=}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
   x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                  ^" in let final dynamic #t8 = "hi" in null, "w");
+                                                                  ^" in "hi" as{TypeError} core::num, "w");
   self::x2.{core::Map::[]=}(4.0, "u");
-  self::x2.{core::Map::[]=}(3, let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+  self::x2.{core::Map::[]=}(3, let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
   x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                             ^" in let final dynamic #t10 = 42 in null);
+                                                             ^" in 42 as{TypeError} core::Pattern);
   core::Pattern p = null;
   self::x2.{core::Map::[]=}(2, p);
   core::Map<core::int, core::String> y = self::x2 as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.transformed.expect
index 05fb52e..a53ccf0 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.transformed.expect
@@ -6,31 +6,31 @@
 static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
   self::x1.{core::Map::[]=}(3, "z");
-  self::x1.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::Map::[]=}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                  ^" in let final core::String #t2 = "hi" in null, "w");
-  self::x1.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                                                  ^" in "hi" as{TypeError} core::int, "w");
+  self::x1.{core::Map::[]=}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
-                                                                  ^" in let final core::double #t4 = 4.0 in null, "u");
-  self::x1.{core::Map::[]=}(3, let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                  ^" in 4.0 as{TypeError} core::int, "u");
+  self::x1.{core::Map::[]=}(3, let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                             ^" in let final core::int #t6 = 42 in null);
+                                                             ^" in 42 as{TypeError} core::String);
   core::Map<core::num, core::String> y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::Map::[]=}(3, "z");
-  self::x2.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  self::x2.{core::Map::[]=}(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
   x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
-                                                                  ^" in let final core::String #t8 = "hi" in null, "w");
+                                                                  ^" in "hi" as{TypeError} core::num, "w");
   self::x2.{core::Map::[]=}(4.0, "u");
-  self::x2.{core::Map::[]=}(3, let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+  self::x2.{core::Map::[]=}(3, let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
   x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
-                                                             ^" in let final core::int #t10 = 42 in null);
+                                                             ^" in 42 as{TypeError} core::Pattern);
   core::Pattern p = null;
   self::x2.{core::Map::[]=}(2, p);
   core::Map<core::int, core::String> y = self::x2 as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
index e390fd9..a52d4f9 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
@@ -22,14 +22,14 @@
 }
 static method test5() → dynamic {
   self::A a1 = new self::A::•();
-  a1.{self::A::x} = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a1.{self::A::x} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                        ^" in let final dynamic #t2 = "hi" in null;
+                                                        ^" in "hi" as{TypeError} core::int;
   self::A a2 = new self::A::•();
-  a2.{self::A::x} = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a2.{self::A::x} = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                        ^" in let final dynamic #t4 = "hi" in null;
+                                                        ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.transformed.expect
index 0af35ab..a70683b 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.transformed.expect
@@ -10,14 +10,14 @@
 }
 static method test5() → dynamic {
   self::A a1 = new self::A::•();
-  a1.{self::A::x} = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a1.{self::A::x} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                        ^" in let final core::String #t2 = "hi" in null;
+                                                        ^" in "hi" as{TypeError} core::int;
   self::A a2 = new self::A::•();
-  a2.{self::A::x} = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a2.{self::A::x} = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
-                                                        ^" in let final core::String #t4 = "hi" in null;
+                                                        ^" in "hi" as{TypeError} core::int;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
index baf4a8c..0166552 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
@@ -15,10 +15,10 @@
   return (core::int x) → core::int => x;
 }
 static method b() → asy::Future<(core::int) → core::int> async {
-  return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+  return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
   return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
-                                 ^" in let final dynamic #t2 = (dynamic x) → dynamic => x in null;
+                                 ^" in ((dynamic x) → dynamic => x) as{TypeError} asy::FutureOr<(core::int) → core::int>;
 }
 static method c() → core::Iterable<(core::int) → core::int> sync* {
   yield(core::int x) → core::int => x;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
index c5d800e..1172594 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
@@ -19,10 +19,10 @@
     try {
       #L1:
       {
-        :return_value = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+        :return_value = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
   return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
-                                 ^" in let final (dynamic) → dynamic #t2 = (dynamic x) → dynamic => x in null;
+                                 ^" in ((dynamic x) → dynamic => x) as{TypeError} asy::FutureOr<(core::int) → core::int>;
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_completer, :return_value);
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 ac08e1d..8512363 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
@@ -19,29 +19,30 @@
 library test;
 import self as self;
 import "dart:core" as core;
+import "dart:async" as asy;
 
 static method test() → dynamic async {
   core::String s;
-  for (final dynamic #t1 in let dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:53: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+  for (final dynamic #t1 in let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:53: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
   for (int x in /*@error=ForInLoopTypeNotIterable*/ s) {}
-                                                    ^" in let final dynamic #t3 = s in null) {
+                                                    ^" in s as{TypeError} core::Iterable<dynamic>) {
     core::int x = #t1 as{TypeError} core::int;
   }
-  await for (final dynamic #t4 in let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:59: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+  await for (final dynamic #t3 in let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:59: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
   await for (int x in /*@error=ForInLoopTypeNotIterable*/ s) {}
-                                                          ^" in let final dynamic #t6 = s in null) {
-    core::int x = #t4 as{TypeError} core::int;
+                                                          ^" in s as{TypeError} asy::Stream<dynamic>) {
+    core::int x = #t3 as{TypeError} core::int;
   }
   core::int y;
-  for (final dynamic #t7 in let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:49: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+  for (final dynamic #t5 in let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:49: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
   for (y in /*@error=ForInLoopTypeNotIterable*/ s) {}
-                                                ^" in let final dynamic #t9 = s in null) {
-    y = #t7 as{TypeError} core::int;
+                                                ^" in s as{TypeError} core::Iterable<dynamic>) {
+    y = #t5 as{TypeError} core::int;
   }
-  await for (final dynamic #t10 in let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:55: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+  await for (final dynamic #t7 in let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:55: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
   await for (y in /*@error=ForInLoopTypeNotIterable*/ s) {}
-                                                      ^" in let final dynamic #t12 = s in null) {
-    y = #t10 as{TypeError} core::int;
+                                                      ^" in s as{TypeError} asy::Stream<dynamic>) {
+    y = #t7 as{TypeError} 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 002d2e6..7418afc 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
@@ -20,27 +20,27 @@
       #L1:
       {
         core::String s;
-        for (final dynamic #t1 in let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:53: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+        for (final dynamic #t1 in let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:53: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
   for (int x in /*@error=ForInLoopTypeNotIterable*/ s) {}
-                                                    ^" in let final core::String #t3 = s in null) {
+                                                    ^" in s as{TypeError} core::Iterable<dynamic>) {
           core::int x = #t1 as{TypeError} core::int;
         }
         {
-          dynamic :stream = let<BottomType> _ = null in let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:59: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+          dynamic :stream = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:59: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
   await for (int x in /*@error=ForInLoopTypeNotIterable*/ s) {}
-                                                          ^" in let final core::String #t5 = s in null;
+                                                          ^" in s as{TypeError} asy::Stream<dynamic>;
           asy::_asyncStarListenHelper(:stream, :async_op);
           asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           const core::bool :product-mode = const core::bool::fromEnvironment("dart.vm.product");
           try
             #L2:
             while (true) {
-              dynamic #t6 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t4 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
-                final dynamic #t8 = :for-iterator.{asy::_StreamIterator::current};
+                final dynamic #t6 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::int x = #t8 as{TypeError} core::int;
+                  core::int x = #t6 as{TypeError} core::int;
                 }
               }
               else
@@ -48,32 +48,32 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t9 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
         core::int y;
-        for (final dynamic #t10 in let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:49: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
+        for (final dynamic #t8 in let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:49: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.core::Iterable<dynamic>'.
   for (y in /*@error=ForInLoopTypeNotIterable*/ s) {}
-                                                ^" in let final core::String #t12 = s in null) {
-          y = #t10 as{TypeError} core::int;
+                                                ^" in s as{TypeError} core::Iterable<dynamic>) {
+          y = #t8 as{TypeError} core::int;
         }
         {
-          dynamic :stream = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:55: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
+          dynamic :stream = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:55: Error: The type 'dart.core::String' used in the 'for' loop must implement 'dart.async::Stream<dynamic>'.
   await for (y in /*@error=ForInLoopTypeNotIterable*/ s) {}
-                                                      ^" in let final core::String #t14 = s in null;
+                                                      ^" in s as{TypeError} asy::Stream<dynamic>;
           asy::_asyncStarListenHelper(:stream, :async_op);
           asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           const core::bool :product-mode = const core::bool::fromEnvironment("dart.vm.product");
           try
             #L3:
             while (true) {
-              dynamic #t15 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t16 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t11 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
-                final dynamic #t17 = :for-iterator.{asy::_StreamIterator::current};
+                final dynamic #t13 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  y = #t17 as{TypeError} core::int;
+                  y = #t13 as{TypeError} core::int;
                 }
               }
               else
@@ -81,7 +81,7 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
index f1fd249..a98fb44 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
@@ -46,22 +46,22 @@
     b = #t4 as{TypeError} self::B;
   }
   for (final self::A #t5 in iterable) {
-    i = let dynamic _ = null in let final dynamic #t6 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:55: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+    i = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:55: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the variable.
   for (i /*@error=ForInLoopElementTypeNotAssignable*/ in iterable) {}
-                                                      ^" in let final dynamic #t7 = #t5 in null;
+                                                      ^" in #t5 as{TypeError} core::int;
   }
-  await for (final self::A #t8 in stream) {
-    i = let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:61: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+  await for (final self::A #t7 in stream) {
+    i = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:61: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the variable.
   await for (i /*@error=ForInLoopElementTypeNotAssignable*/ in stream) {}
-                                                            ^" in let final dynamic #t10 = #t8 in null;
+                                                            ^" in #t7 as{TypeError} core::int;
   }
-  for (final self::A #t11 in self::f<core::Iterable<self::A>>()) {
-    a = #t11;
+  for (final self::A #t9 in self::f<core::Iterable<self::A>>()) {
+    a = #t9;
   }
-  await for (final self::A #t12 in self::f<asy::Stream<self::A>>()) {
-    a = #t12;
+  await for (final self::A #t10 in self::f<asy::Stream<self::A>>()) {
+    a = #t10;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
index 642e30b..b67ada4 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
@@ -93,10 +93,10 @@
             }
         }
         for (final self::A #t11 in iterable) {
-          i = let<BottomType> _ = null in let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:55: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+          i = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:55: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the variable.
   for (i /*@error=ForInLoopElementTypeNotAssignable*/ in iterable) {}
-                                                      ^" in let final self::A #t13 = #t11 in null;
+                                                      ^" in #t11 as{TypeError} core::int;
         }
         {
           dynamic :stream = stream;
@@ -106,15 +106,15 @@
           try
             #L4:
             while (true) {
-              dynamic #t14 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t13 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
-                final self::A #t16 = :for-iterator.{asy::_StreamIterator::current};
+                final self::A #t15 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  i = let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:61: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+                  i = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:61: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the variable.
   await for (i /*@error=ForInLoopElementTypeNotAssignable*/ in stream) {}
-                                                            ^" in let final self::A #t18 = #t16 in null;
+                                                            ^" in #t15 as{TypeError} core::int;
                 }
               }
               else
@@ -122,12 +122,12 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t19 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
-        for (final self::A #t20 in self::f<core::Iterable<self::A>>()) {
-          a = #t20;
+        for (final self::A #t18 in self::f<core::Iterable<self::A>>()) {
+          a = #t18;
         }
         {
           dynamic :stream = self::f<asy::Stream<self::A>>();
@@ -137,12 +137,12 @@
           try
             #L5:
             while (true) {
-              dynamic #t21 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
+              dynamic #t19 = :product-mode ?{dynamic} null : asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(), :async_op_then, :async_op_error, :async_op) in null;
               if(:result) {
-                final self::A #t23 = :for-iterator.{asy::_StreamIterator::current};
+                final self::A #t21 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  a = #t23;
+                  a = #t21;
                 }
               }
               else
@@ -150,7 +150,7 @@
             }
           finally
             if(!:for-iterator.{asy::_StreamIterator::_subscription}.{core::Object::==}(null)) {
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
+              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(), :async_op_then, :async_op_error, :async_op) in null;
               :result;
             }
         }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
index 5463d22..a261e48 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
@@ -92,20 +92,20 @@
     core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
     core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = super.{self::Base::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
     core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = super.{self::Base::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let dynamic _ = null in let final dynamic #t79 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
-                                                             ^" in let final dynamic #t80 = super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) in null in let final void #t81 = super.{self::Base::[]=}(#t77, #t78) in #t78;
-    core::num v8 = let final core::String #t82 = "x" in let final core::num #t83 = super.{self::Base::[]}(#t82).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t84 = super.{self::Base::[]=}(#t82, #t83) in #t83;
-    core::double v9 = let final core::String #t85 = "x" in let final core::double #t86 = super.{self::Base::[]}(#t85).{core::num::+}(self::getDouble()) in let final void #t87 = super.{self::Base::[]=}(#t85, #t86) in #t86;
-    core::int v10 = let final core::String #t88 = "x" in let final core::int #t89 = let dynamic _ = null in let final dynamic #t90 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+                                                             ^" in super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
+    core::num v8 = let final core::String #t81 = "x" in let final core::num #t82 = super.{self::Base::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t83 = super.{self::Base::[]=}(#t81, #t82) in #t82;
+    core::double v9 = let final core::String #t84 = "x" in let final core::double #t85 = super.{self::Base::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = super.{self::Base::[]=}(#t84, #t85) in #t85;
+    core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
-                            ^" in let final dynamic #t91 = super.{self::Base::[]}(#t88).{core::num::+}(1) in null in let final void #t92 = super.{self::Base::[]=}(#t88, #t89) in #t89;
-    core::int v11 = let final core::String #t93 = "x" in let final core::int #t94 = super.{self::Base::[]}(#t93) in let final void #t95 = super.{self::Base::[]=}(#t93, let dynamic _ = null in let final dynamic #t96 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+                            ^" in super.{self::Base::[]}(#t87).{core::num::+}(1) as{TypeError} core::double in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
+    core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = super.{self::Base::[]}(#t91) in let final void #t93 = super.{self::Base::[]=}(#t91, let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v11 = super /*@target=Base::[]=*/ ['x']++;
-                                                             ^" in let final dynamic #t97 = #t94.{core::num::+}(1) in null) in #t94;
+                                                             ^" in #t92.{core::num::+}(1) as{TypeError} core::double) in #t92;
   }
 }
 abstract class Test4 extends self::Base<core::num, core::int> {
@@ -113,14 +113,14 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int v1 = let final core::String #t98 = "x" in let final core::int #t99 = self::getInt() in let final void #t100 = super.{self::Base::[]=}(#t98, #t99) in #t99;
-    core::num v2 = let final core::String #t101 = "x" in let final core::num #t102 = self::getNum() as{TypeError} core::int in let final void #t103 = super.{self::Base::[]=}(#t101, #t102) in #t102;
-    core::num v4 = let final core::String #t104 = "x" in let final core::num #t105 = super.{self::Base::[]}(#t104) in #t105.{core::num::==}(null) ?{core::num} let final core::int #t106 = self::getInt() in let final void #t107 = super.{self::Base::[]=}(#t104, #t106) in #t106 : #t105;
-    core::num v5 = let final core::String #t108 = "x" in let final core::num #t109 = super.{self::Base::[]}(#t108) in #t109.{core::num::==}(null) ?{core::num} let final core::num #t110 = self::getNum() as{TypeError} core::int in let final void #t111 = super.{self::Base::[]=}(#t108, #t110) in #t110 : #t109;
-    core::num v7 = let final core::String #t112 = "x" in let final core::num #t113 = super.{self::Base::[]}(#t112).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
-    core::num v8 = let final core::String #t115 = "x" in let final core::num #t116 = super.{self::Base::[]}(#t115).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
-    core::num v10 = let final core::String #t118 = "x" in let final core::num #t119 = super.{self::Base::[]}(#t118).{core::num::+}(1) as{TypeError} core::int in let final void #t120 = super.{self::Base::[]=}(#t118, #t119) in #t119;
-    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = super.{self::Base::[]}(#t121) in let final void #t123 = super.{self::Base::[]=}(#t121, #t122.{core::num::+}(1) as{TypeError} core::int) in #t122;
+    core::int v1 = let final core::String #t95 = "x" in let final core::int #t96 = self::getInt() in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
+    core::num v2 = let final core::String #t98 = "x" in let final core::num #t99 = self::getNum() as{TypeError} core::int in let final void #t100 = super.{self::Base::[]=}(#t98, #t99) in #t99;
+    core::num v4 = let final core::String #t101 = "x" in let final core::num #t102 = super.{self::Base::[]}(#t101) in #t102.{core::num::==}(null) ?{core::num} let final core::int #t103 = self::getInt() in let final void #t104 = super.{self::Base::[]=}(#t101, #t103) in #t103 : #t102;
+    core::num v5 = let final core::String #t105 = "x" in let final core::num #t106 = super.{self::Base::[]}(#t105) in #t106.{core::num::==}(null) ?{core::num} let final core::num #t107 = self::getNum() as{TypeError} core::int in let final void #t108 = super.{self::Base::[]=}(#t105, #t107) in #t107 : #t106;
+    core::num v7 = let final core::String #t109 = "x" in let final core::num #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
+    core::num v8 = let final core::String #t112 = "x" in let final core::num #t113 = super.{self::Base::[]}(#t112).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
+    core::num v10 = let final core::String #t115 = "x" in let final core::num #t116 = super.{self::Base::[]}(#t115).{core::num::+}(1) as{TypeError} core::int in let final void #t117 = super.{self::Base::[]=}(#t115, #t116) in #t116;
+    core::num v11 = let final core::String #t118 = "x" in let final core::num #t119 = super.{self::Base::[]}(#t118) in let final void #t120 = super.{self::Base::[]=}(#t118, #t119.{core::num::+}(1) as{TypeError} core::int) in #t119;
   }
 }
 abstract class Test5 extends self::Base<core::num, core::num> {
@@ -128,17 +128,17 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int v1 = let final core::String #t124 = "x" in let final core::int #t125 = self::getInt() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
-    core::num v2 = let final core::String #t127 = "x" in let final core::num #t128 = self::getNum() in let final void #t129 = super.{self::Base::[]=}(#t127, #t128) in #t128;
-    core::double v3 = let final core::String #t130 = "x" in let final core::double #t131 = self::getDouble() in let final void #t132 = super.{self::Base::[]=}(#t130, #t131) in #t131;
-    core::num v4 = let final core::String #t133 = "x" in let final core::num #t134 = super.{self::Base::[]}(#t133) in #t134.{core::num::==}(null) ?{core::num} let final core::int #t135 = self::getInt() in let final void #t136 = super.{self::Base::[]=}(#t133, #t135) in #t135 : #t134;
-    core::num v5 = let final core::String #t137 = "x" in let final core::num #t138 = super.{self::Base::[]}(#t137) in #t138.{core::num::==}(null) ?{core::num} let final core::num #t139 = self::getNum() in let final void #t140 = super.{self::Base::[]=}(#t137, #t139) in #t139 : #t138;
-    core::num v6 = let final core::String #t141 = "x" in let final core::num #t142 = super.{self::Base::[]}(#t141) in #t142.{core::num::==}(null) ?{core::num} let final core::double #t143 = self::getDouble() in let final void #t144 = super.{self::Base::[]=}(#t141, #t143) in #t143 : #t142;
-    core::num v7 = let final core::String #t145 = "x" in let final core::num #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getInt()) in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
-    core::num v8 = let final core::String #t148 = "x" in let final core::num #t149 = super.{self::Base::[]}(#t148).{core::num::+}(self::getNum()) in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
-    core::num v9 = let final core::String #t151 = "x" in let final core::num #t152 = super.{self::Base::[]}(#t151).{core::num::+}(self::getDouble()) in let final void #t153 = super.{self::Base::[]=}(#t151, #t152) in #t152;
-    core::num v10 = let final core::String #t154 = "x" in let final core::num #t155 = super.{self::Base::[]}(#t154).{core::num::+}(1) in let final void #t156 = super.{self::Base::[]=}(#t154, #t155) in #t155;
-    core::num v11 = let final core::String #t157 = "x" in let final core::num #t158 = super.{self::Base::[]}(#t157) in let final void #t159 = super.{self::Base::[]=}(#t157, #t158.{core::num::+}(1)) in #t158;
+    core::int v1 = let final core::String #t121 = "x" in let final core::int #t122 = self::getInt() in let final void #t123 = super.{self::Base::[]=}(#t121, #t122) in #t122;
+    core::num v2 = let final core::String #t124 = "x" in let final core::num #t125 = self::getNum() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
+    core::double v3 = let final core::String #t127 = "x" in let final core::double #t128 = self::getDouble() in let final void #t129 = super.{self::Base::[]=}(#t127, #t128) in #t128;
+    core::num v4 = let final core::String #t130 = "x" in let final core::num #t131 = super.{self::Base::[]}(#t130) in #t131.{core::num::==}(null) ?{core::num} let final core::int #t132 = self::getInt() in let final void #t133 = super.{self::Base::[]=}(#t130, #t132) in #t132 : #t131;
+    core::num v5 = let final core::String #t134 = "x" in let final core::num #t135 = super.{self::Base::[]}(#t134) in #t135.{core::num::==}(null) ?{core::num} let final core::num #t136 = self::getNum() in let final void #t137 = super.{self::Base::[]=}(#t134, #t136) in #t136 : #t135;
+    core::num v6 = let final core::String #t138 = "x" in let final core::num #t139 = super.{self::Base::[]}(#t138) in #t139.{core::num::==}(null) ?{core::num} let final core::double #t140 = self::getDouble() in let final void #t141 = super.{self::Base::[]=}(#t138, #t140) in #t140 : #t139;
+    core::num v7 = let final core::String #t142 = "x" in let final core::num #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getInt()) in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
+    core::num v8 = let final core::String #t145 = "x" in let final core::num #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getNum()) in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
+    core::num v9 = let final core::String #t148 = "x" in let final core::num #t149 = super.{self::Base::[]}(#t148).{core::num::+}(self::getDouble()) in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
+    core::num v10 = let final core::String #t151 = "x" in let final core::num #t152 = super.{self::Base::[]}(#t151).{core::num::+}(1) in let final void #t153 = super.{self::Base::[]=}(#t151, #t152) in #t152;
+    core::num v11 = let final core::String #t154 = "x" in let final core::num #t155 = super.{self::Base::[]}(#t154) in let final void #t156 = super.{self::Base::[]=}(#t154, #t155.{core::num::+}(1)) in #t155;
   }
 }
 abstract class Test6 extends self::Base<core::num, core::double> {
@@ -146,15 +146,15 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::num v2 = let final core::String #t160 = "x" in let final core::num #t161 = self::getNum() as{TypeError} core::double in let final void #t162 = super.{self::Base::[]=}(#t160, #t161) in #t161;
-    core::double v3 = let final core::String #t163 = "x" in let final core::double #t164 = self::getDouble() in let final void #t165 = super.{self::Base::[]=}(#t163, #t164) in #t164;
-    core::num v5 = let final core::String #t166 = "x" in let final core::num #t167 = super.{self::Base::[]}(#t166) in #t167.{core::num::==}(null) ?{core::num} let final core::num #t168 = self::getNum() as{TypeError} core::double in let final void #t169 = super.{self::Base::[]=}(#t166, #t168) in #t168 : #t167;
-    core::num v6 = let final core::String #t170 = "x" in let final core::num #t171 = super.{self::Base::[]}(#t170) in #t171.{core::num::==}(null) ?{core::num} let final core::double #t172 = self::getDouble() in let final void #t173 = super.{self::Base::[]=}(#t170, #t172) in #t172 : #t171;
-    core::num v7 = let final core::String #t174 = "x" in let final core::num #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
-    core::num v8 = let final core::String #t177 = "x" in let final core::num #t178 = super.{self::Base::[]}(#t177).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
-    core::num v9 = let final core::String #t180 = "x" in let final core::num #t181 = super.{self::Base::[]}(#t180).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
-    core::num v10 = let final core::String #t183 = "x" in let final core::num #t184 = super.{self::Base::[]}(#t183).{core::num::+}(1) as{TypeError} core::double in let final void #t185 = super.{self::Base::[]=}(#t183, #t184) in #t184;
-    core::num v11 = let final core::String #t186 = "x" in let final core::num #t187 = super.{self::Base::[]}(#t186) in let final void #t188 = super.{self::Base::[]=}(#t186, #t187.{core::num::+}(1) as{TypeError} core::double) in #t187;
+    core::num v2 = let final core::String #t157 = "x" in let final core::num #t158 = self::getNum() as{TypeError} core::double in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
+    core::double v3 = let final core::String #t160 = "x" in let final core::double #t161 = self::getDouble() in let final void #t162 = super.{self::Base::[]=}(#t160, #t161) in #t161;
+    core::num v5 = let final core::String #t163 = "x" in let final core::num #t164 = super.{self::Base::[]}(#t163) in #t164.{core::num::==}(null) ?{core::num} let final core::num #t165 = self::getNum() as{TypeError} core::double in let final void #t166 = super.{self::Base::[]=}(#t163, #t165) in #t165 : #t164;
+    core::num v6 = let final core::String #t167 = "x" in let final core::num #t168 = super.{self::Base::[]}(#t167) in #t168.{core::num::==}(null) ?{core::num} let final core::double #t169 = self::getDouble() in let final void #t170 = super.{self::Base::[]=}(#t167, #t169) in #t169 : #t168;
+    core::num v7 = let final core::String #t171 = "x" in let final core::num #t172 = super.{self::Base::[]}(#t171).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
+    core::num v8 = let final core::String #t174 = "x" in let final core::num #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
+    core::num v9 = let final core::String #t177 = "x" in let final core::num #t178 = super.{self::Base::[]}(#t177).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
+    core::num v10 = let final core::String #t180 = "x" in let final core::num #t181 = super.{self::Base::[]}(#t180).{core::num::+}(1) as{TypeError} core::double in let final void #t182 = super.{self::Base::[]=}(#t180, #t181) in #t181;
+    core::num v11 = let final core::String #t183 = "x" in let final core::num #t184 = super.{self::Base::[]}(#t183) in let final void #t185 = super.{self::Base::[]=}(#t183, #t184.{core::num::+}(1) as{TypeError} core::double) in #t184;
   }
 }
 abstract class Test7 extends self::Base<core::double, core::int> {
@@ -162,26 +162,26 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int v1 = let final core::String #t189 = "x" in let final core::int #t190 = self::getInt() in let final void #t191 = super.{self::Base::[]=}(#t189, #t190) in #t190;
-    core::num v2 = let final core::String #t192 = "x" in let final core::num #t193 = self::getNum() as{TypeError} core::int in let final void #t194 = super.{self::Base::[]=}(#t192, #t193) in #t193;
-    core::num v4 = let final core::String #t195 = "x" in let final core::double #t196 = super.{self::Base::[]}(#t195) in #t196.{core::num::==}(null) ?{core::num} let final core::int #t197 = self::getInt() in let final void #t198 = super.{self::Base::[]=}(#t195, #t197) in #t197 : #t196;
-    core::num v5 = let final core::String #t199 = "x" in let final core::double #t200 = super.{self::Base::[]}(#t199) in #t200.{core::num::==}(null) ?{core::num} let final core::num #t201 = self::getNum() as{TypeError} core::int in let final void #t202 = super.{self::Base::[]=}(#t199, #t201) in #t201 : #t200;
-    core::double v7 = let final core::String #t203 = "x" in let final core::double #t204 = let dynamic _ = null in let final dynamic #t205 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::int v1 = let final core::String #t186 = "x" in let final core::int #t187 = self::getInt() in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
+    core::num v2 = let final core::String #t189 = "x" in let final core::num #t190 = self::getNum() as{TypeError} core::int in let final void #t191 = super.{self::Base::[]=}(#t189, #t190) in #t190;
+    core::num v4 = let final core::String #t192 = "x" in let final core::double #t193 = super.{self::Base::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num} let final core::int #t194 = self::getInt() in let final void #t195 = super.{self::Base::[]=}(#t192, #t194) in #t194 : #t193;
+    core::num v5 = let final core::String #t196 = "x" in let final core::double #t197 = super.{self::Base::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num} let final core::num #t198 = self::getNum() as{TypeError} core::int in let final void #t199 = super.{self::Base::[]=}(#t196, #t198) in #t198 : #t197;
+    core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
-                                                                ^" in let final dynamic #t206 = super.{self::Base::[]}(#t203).{core::double::+}(self::getInt()) in null in let final void #t207 = super.{self::Base::[]=}(#t203, #t204) in #t204;
-    core::double v8 = let final core::String #t208 = "x" in let final core::double #t209 = let dynamic _ = null in let final dynamic #t210 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                                                ^" in super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()) as{TypeError} core::int in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
+    core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v8 = super /*@target=Base::[]=*/ ['x'] += getNum();
-                                                                ^" in let final dynamic #t211 = super.{self::Base::[]}(#t208).{core::double::+}(self::getNum()) in null in let final void #t212 = super.{self::Base::[]=}(#t208, #t209) in #t209;
-    core::double v10 = let final core::String #t213 = "x" in let final core::double #t214 = let dynamic _ = null in let final dynamic #t215 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                                                ^" in super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()) as{TypeError} core::int in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
+    core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
-                               ^" in let final dynamic #t216 = super.{self::Base::[]}(#t213).{core::double::+}(1) in null in let final void #t217 = super.{self::Base::[]=}(#t213, #t214) in #t214;
-    core::double v11 = let final core::String #t218 = "x" in let final core::double #t219 = super.{self::Base::[]}(#t218) in let final void #t220 = super.{self::Base::[]=}(#t218, let dynamic _ = null in let final dynamic #t221 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                               ^" in super.{self::Base::[]}(#t208).{core::double::+}(1) as{TypeError} core::int in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
+    core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = super.{self::Base::[]}(#t212) in let final void #t214 = super.{self::Base::[]=}(#t212, let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v11 = super /*@target=Base::[]=*/ ['x']++;
-                                                                ^" in let final dynamic #t222 = #t219.{core::double::+}(1) in null) in #t219;
+                                                                ^" in #t213.{core::double::+}(1) as{TypeError} core::int) in #t213;
   }
 }
 abstract class Test8 extends self::Base<core::double, core::num> {
@@ -189,17 +189,17 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::int v1 = let final core::String #t223 = "x" in let final core::int #t224 = self::getInt() in let final void #t225 = super.{self::Base::[]=}(#t223, #t224) in #t224;
-    core::num v2 = let final core::String #t226 = "x" in let final core::num #t227 = self::getNum() in let final void #t228 = super.{self::Base::[]=}(#t226, #t227) in #t227;
-    core::double v3 = let final core::String #t229 = "x" in let final core::double #t230 = self::getDouble() in let final void #t231 = super.{self::Base::[]=}(#t229, #t230) in #t230;
-    core::num v4 = let final core::String #t232 = "x" in let final core::double #t233 = super.{self::Base::[]}(#t232) in #t233.{core::num::==}(null) ?{core::num} let final core::int #t234 = self::getInt() in let final void #t235 = super.{self::Base::[]=}(#t232, #t234) in #t234 : #t233;
-    core::num v5 = let final core::String #t236 = "x" in let final core::double #t237 = super.{self::Base::[]}(#t236) in #t237.{core::num::==}(null) ?{core::num} let final core::num #t238 = self::getNum() in let final void #t239 = super.{self::Base::[]=}(#t236, #t238) in #t238 : #t237;
-    core::double v6 = let final core::String #t240 = "x" in let final core::double #t241 = super.{self::Base::[]}(#t240) in #t241.{core::num::==}(null) ?{core::double} let final core::double #t242 = self::getDouble() in let final void #t243 = super.{self::Base::[]=}(#t240, #t242) in #t242 : #t241;
-    core::double v7 = let final core::String #t244 = "x" in let final core::double #t245 = super.{self::Base::[]}(#t244).{core::double::+}(self::getInt()) in let final void #t246 = super.{self::Base::[]=}(#t244, #t245) in #t245;
-    core::double v8 = let final core::String #t247 = "x" in let final core::double #t248 = super.{self::Base::[]}(#t247).{core::double::+}(self::getNum()) in let final void #t249 = super.{self::Base::[]=}(#t247, #t248) in #t248;
-    core::double v9 = let final core::String #t250 = "x" in let final core::double #t251 = super.{self::Base::[]}(#t250).{core::double::+}(self::getDouble()) in let final void #t252 = super.{self::Base::[]=}(#t250, #t251) in #t251;
-    core::double v10 = let final core::String #t253 = "x" in let final core::double #t254 = super.{self::Base::[]}(#t253).{core::double::+}(1) in let final void #t255 = super.{self::Base::[]=}(#t253, #t254) in #t254;
-    core::double v11 = let final core::String #t256 = "x" in let final core::double #t257 = super.{self::Base::[]}(#t256) in let final void #t258 = super.{self::Base::[]=}(#t256, #t257.{core::double::+}(1)) in #t257;
+    core::int v1 = let final core::String #t216 = "x" in let final core::int #t217 = self::getInt() in let final void #t218 = super.{self::Base::[]=}(#t216, #t217) in #t217;
+    core::num v2 = let final core::String #t219 = "x" in let final core::num #t220 = self::getNum() in let final void #t221 = super.{self::Base::[]=}(#t219, #t220) in #t220;
+    core::double v3 = let final core::String #t222 = "x" in let final core::double #t223 = self::getDouble() in let final void #t224 = super.{self::Base::[]=}(#t222, #t223) in #t223;
+    core::num v4 = let final core::String #t225 = "x" in let final core::double #t226 = super.{self::Base::[]}(#t225) in #t226.{core::num::==}(null) ?{core::num} let final core::int #t227 = self::getInt() in let final void #t228 = super.{self::Base::[]=}(#t225, #t227) in #t227 : #t226;
+    core::num v5 = let final core::String #t229 = "x" in let final core::double #t230 = super.{self::Base::[]}(#t229) in #t230.{core::num::==}(null) ?{core::num} let final core::num #t231 = self::getNum() in let final void #t232 = super.{self::Base::[]=}(#t229, #t231) in #t231 : #t230;
+    core::double v6 = let final core::String #t233 = "x" in let final core::double #t234 = super.{self::Base::[]}(#t233) in #t234.{core::num::==}(null) ?{core::double} let final core::double #t235 = self::getDouble() in let final void #t236 = super.{self::Base::[]=}(#t233, #t235) in #t235 : #t234;
+    core::double v7 = let final core::String #t237 = "x" in let final core::double #t238 = super.{self::Base::[]}(#t237).{core::double::+}(self::getInt()) in let final void #t239 = super.{self::Base::[]=}(#t237, #t238) in #t238;
+    core::double v8 = let final core::String #t240 = "x" in let final core::double #t241 = super.{self::Base::[]}(#t240).{core::double::+}(self::getNum()) in let final void #t242 = super.{self::Base::[]=}(#t240, #t241) in #t241;
+    core::double v9 = let final core::String #t243 = "x" in let final core::double #t244 = super.{self::Base::[]}(#t243).{core::double::+}(self::getDouble()) in let final void #t245 = super.{self::Base::[]=}(#t243, #t244) in #t244;
+    core::double v10 = let final core::String #t246 = "x" in let final core::double #t247 = super.{self::Base::[]}(#t246).{core::double::+}(1) in let final void #t248 = super.{self::Base::[]=}(#t246, #t247) in #t247;
+    core::double v11 = let final core::String #t249 = "x" in let final core::double #t250 = super.{self::Base::[]}(#t249) in let final void #t251 = super.{self::Base::[]=}(#t249, #t250.{core::double::+}(1)) in #t250;
   }
 }
 abstract class Test9 extends self::Base<core::double, core::double> {
@@ -207,15 +207,15 @@
     : super self::Base::•()
     ;
   method test() → void {
-    core::num v2 = let final core::String #t259 = "x" in let final core::num #t260 = self::getNum() as{TypeError} core::double in let final void #t261 = super.{self::Base::[]=}(#t259, #t260) in #t260;
-    core::double v3 = let final core::String #t262 = "x" in let final core::double #t263 = self::getDouble() in let final void #t264 = super.{self::Base::[]=}(#t262, #t263) in #t263;
-    core::num v5 = let final core::String #t265 = "x" in let final core::double #t266 = super.{self::Base::[]}(#t265) in #t266.{core::num::==}(null) ?{core::num} let final core::num #t267 = self::getNum() as{TypeError} core::double in let final void #t268 = super.{self::Base::[]=}(#t265, #t267) in #t267 : #t266;
-    core::double v6 = let final core::String #t269 = "x" in let final core::double #t270 = super.{self::Base::[]}(#t269) in #t270.{core::num::==}(null) ?{core::double} let final core::double #t271 = self::getDouble() in let final void #t272 = super.{self::Base::[]=}(#t269, #t271) in #t271 : #t270;
-    core::double v7 = let final core::String #t273 = "x" in let final core::double #t274 = super.{self::Base::[]}(#t273).{core::double::+}(self::getInt()) in let final void #t275 = super.{self::Base::[]=}(#t273, #t274) in #t274;
-    core::double v8 = let final core::String #t276 = "x" in let final core::double #t277 = super.{self::Base::[]}(#t276).{core::double::+}(self::getNum()) in let final void #t278 = super.{self::Base::[]=}(#t276, #t277) in #t277;
-    core::double v9 = let final core::String #t279 = "x" in let final core::double #t280 = super.{self::Base::[]}(#t279).{core::double::+}(self::getDouble()) in let final void #t281 = super.{self::Base::[]=}(#t279, #t280) in #t280;
-    core::double v10 = let final core::String #t282 = "x" in let final core::double #t283 = super.{self::Base::[]}(#t282).{core::double::+}(1) in let final void #t284 = super.{self::Base::[]=}(#t282, #t283) in #t283;
-    core::double v11 = let final core::String #t285 = "x" in let final core::double #t286 = super.{self::Base::[]}(#t285) in let final void #t287 = super.{self::Base::[]=}(#t285, #t286.{core::double::+}(1)) in #t286;
+    core::num v2 = let final core::String #t252 = "x" in let final core::num #t253 = self::getNum() as{TypeError} core::double in let final void #t254 = super.{self::Base::[]=}(#t252, #t253) in #t253;
+    core::double v3 = let final core::String #t255 = "x" in let final core::double #t256 = self::getDouble() in let final void #t257 = super.{self::Base::[]=}(#t255, #t256) in #t256;
+    core::num v5 = let final core::String #t258 = "x" in let final core::double #t259 = super.{self::Base::[]}(#t258) in #t259.{core::num::==}(null) ?{core::num} let final core::num #t260 = self::getNum() as{TypeError} core::double in let final void #t261 = super.{self::Base::[]=}(#t258, #t260) in #t260 : #t259;
+    core::double v6 = let final core::String #t262 = "x" in let final core::double #t263 = super.{self::Base::[]}(#t262) in #t263.{core::num::==}(null) ?{core::double} let final core::double #t264 = self::getDouble() in let final void #t265 = super.{self::Base::[]=}(#t262, #t264) in #t264 : #t263;
+    core::double v7 = let final core::String #t266 = "x" in let final core::double #t267 = super.{self::Base::[]}(#t266).{core::double::+}(self::getInt()) in let final void #t268 = super.{self::Base::[]=}(#t266, #t267) in #t267;
+    core::double v8 = let final core::String #t269 = "x" in let final core::double #t270 = super.{self::Base::[]}(#t269).{core::double::+}(self::getNum()) in let final void #t271 = super.{self::Base::[]=}(#t269, #t270) in #t270;
+    core::double v9 = let final core::String #t272 = "x" in let final core::double #t273 = super.{self::Base::[]}(#t272).{core::double::+}(self::getDouble()) in let final void #t274 = super.{self::Base::[]=}(#t272, #t273) in #t273;
+    core::double v10 = let final core::String #t275 = "x" in let final core::double #t276 = super.{self::Base::[]}(#t275).{core::double::+}(1) in let final void #t277 = super.{self::Base::[]=}(#t275, #t276) in #t276;
+    core::double v11 = let final core::String #t278 = "x" in let final core::double #t279 = super.{self::Base::[]}(#t278) in let final void #t280 = super.{self::Base::[]=}(#t278, #t279.{core::double::+}(1)) in #t279;
   }
 }
 static method getInt() → core::int
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
index 913618b..7992f48 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
@@ -87,20 +87,20 @@
     core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67) in #t67;
     core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = this.{self::Test3::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71) in #t71 : #t70;
     core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = this.{self::Test3::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let dynamic _ = null in let final dynamic #t79 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v7 = this /*@target=Test3::[]=*/ ['x'] += getInt();
-                                                             ^" in let final dynamic #t80 = this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) in null in let final void #t81 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
-    core::num v8 = let final core::String #t82 = "x" in let final core::num #t83 = this.{self::Test3::[]}(#t82).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t84 = this.{self::Test3::[]=}(#t82, #t83) in #t83;
-    core::double v9 = let final core::String #t85 = "x" in let final core::double #t86 = this.{self::Test3::[]}(#t85).{core::num::+}(self::getDouble()) in let final void #t87 = this.{self::Test3::[]=}(#t85, #t86) in #t86;
-    core::int v10 = let final core::String #t88 = "x" in let final core::int #t89 = let dynamic _ = null in let final dynamic #t90 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+                                                             ^" in this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
+    core::num v8 = let final core::String #t81 = "x" in let final core::num #t82 = this.{self::Test3::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t83 = this.{self::Test3::[]=}(#t81, #t82) in #t82;
+    core::double v9 = let final core::String #t84 = "x" in let final core::double #t85 = this.{self::Test3::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = this.{self::Test3::[]=}(#t84, #t85) in #t85;
+    core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v10 = ++this /*@target=Test3::[]=*/ ['x'];
-                            ^" in let final dynamic #t91 = this.{self::Test3::[]}(#t88).{core::num::+}(1) in null in let final void #t92 = this.{self::Test3::[]=}(#t88, #t89) in #t89;
-    core::int v11 = let final core::String #t93 = "x" in let final core::int #t94 = this.{self::Test3::[]}(#t93) in let final void #t95 = this.{self::Test3::[]=}(#t93, let dynamic _ = null in let final dynamic #t96 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+                            ^" in this.{self::Test3::[]}(#t87).{core::num::+}(1) as{TypeError} core::double in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88) in #t88;
+    core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = this.{self::Test3::[]}(#t91) in let final void #t93 = this.{self::Test3::[]=}(#t91, let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v11 = this /*@target=Test3::[]=*/ ['x']++;
-                                                             ^" in let final dynamic #t97 = #t94.{core::num::+}(1) in null) in #t94;
+                                                             ^" in #t92.{core::num::+}(1) as{TypeError} core::double) in #t92;
   }
 }
 abstract class Test4 extends core::Object {
@@ -110,14 +110,14 @@
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::int v) → void;
   method test() → void {
-    core::int v1 = let final core::String #t98 = "x" in let final core::int #t99 = self::getInt() in let final void #t100 = this.{self::Test4::[]=}(#t98, #t99) in #t99;
-    core::num v2 = let final core::String #t101 = "x" in let final core::num #t102 = self::getNum() as{TypeError} core::int in let final void #t103 = this.{self::Test4::[]=}(#t101, #t102) in #t102;
-    core::num v4 = let final core::String #t104 = "x" in let final core::num #t105 = this.{self::Test4::[]}(#t104) in #t105.{core::num::==}(null) ?{core::num} let final core::int #t106 = self::getInt() in let final void #t107 = this.{self::Test4::[]=}(#t104, #t106) in #t106 : #t105;
-    core::num v5 = let final core::String #t108 = "x" in let final core::num #t109 = this.{self::Test4::[]}(#t108) in #t109.{core::num::==}(null) ?{core::num} let final core::num #t110 = self::getNum() as{TypeError} core::int in let final void #t111 = this.{self::Test4::[]=}(#t108, #t110) in #t110 : #t109;
-    core::num v7 = let final core::String #t112 = "x" in let final core::num #t113 = this.{self::Test4::[]}(#t112).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113) in #t113;
-    core::num v8 = let final core::String #t115 = "x" in let final core::num #t116 = this.{self::Test4::[]}(#t115).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116) in #t116;
-    core::num v10 = let final core::String #t118 = "x" in let final core::num #t119 = this.{self::Test4::[]}(#t118).{core::num::+}(1) as{TypeError} core::int in let final void #t120 = this.{self::Test4::[]=}(#t118, #t119) in #t119;
-    core::num v11 = let final core::String #t121 = "x" in let final core::num #t122 = this.{self::Test4::[]}(#t121) in let final void #t123 = this.{self::Test4::[]=}(#t121, #t122.{core::num::+}(1) as{TypeError} core::int) in #t122;
+    core::int v1 = let final core::String #t95 = "x" in let final core::int #t96 = self::getInt() in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96) in #t96;
+    core::num v2 = let final core::String #t98 = "x" in let final core::num #t99 = self::getNum() as{TypeError} core::int in let final void #t100 = this.{self::Test4::[]=}(#t98, #t99) in #t99;
+    core::num v4 = let final core::String #t101 = "x" in let final core::num #t102 = this.{self::Test4::[]}(#t101) in #t102.{core::num::==}(null) ?{core::num} let final core::int #t103 = self::getInt() in let final void #t104 = this.{self::Test4::[]=}(#t101, #t103) in #t103 : #t102;
+    core::num v5 = let final core::String #t105 = "x" in let final core::num #t106 = this.{self::Test4::[]}(#t105) in #t106.{core::num::==}(null) ?{core::num} let final core::num #t107 = self::getNum() as{TypeError} core::int in let final void #t108 = this.{self::Test4::[]=}(#t105, #t107) in #t107 : #t106;
+    core::num v7 = let final core::String #t109 = "x" in let final core::num #t110 = this.{self::Test4::[]}(#t109).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t111 = this.{self::Test4::[]=}(#t109, #t110) in #t110;
+    core::num v8 = let final core::String #t112 = "x" in let final core::num #t113 = this.{self::Test4::[]}(#t112).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113) in #t113;
+    core::num v10 = let final core::String #t115 = "x" in let final core::num #t116 = this.{self::Test4::[]}(#t115).{core::num::+}(1) as{TypeError} core::int in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116) in #t116;
+    core::num v11 = let final core::String #t118 = "x" in let final core::num #t119 = this.{self::Test4::[]}(#t118) in let final void #t120 = this.{self::Test4::[]=}(#t118, #t119.{core::num::+}(1) as{TypeError} core::int) in #t119;
   }
 }
 abstract class Test5 extends core::Object {
@@ -127,17 +127,17 @@
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::num v) → void;
   method test() → void {
-    core::int v1 = let final core::String #t124 = "x" in let final core::int #t125 = self::getInt() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125) in #t125;
-    core::num v2 = let final core::String #t127 = "x" in let final core::num #t128 = self::getNum() in let final void #t129 = this.{self::Test5::[]=}(#t127, #t128) in #t128;
-    core::double v3 = let final core::String #t130 = "x" in let final core::double #t131 = self::getDouble() in let final void #t132 = this.{self::Test5::[]=}(#t130, #t131) in #t131;
-    core::num v4 = let final core::String #t133 = "x" in let final core::num #t134 = this.{self::Test5::[]}(#t133) in #t134.{core::num::==}(null) ?{core::num} let final core::int #t135 = self::getInt() in let final void #t136 = this.{self::Test5::[]=}(#t133, #t135) in #t135 : #t134;
-    core::num v5 = let final core::String #t137 = "x" in let final core::num #t138 = this.{self::Test5::[]}(#t137) in #t138.{core::num::==}(null) ?{core::num} let final core::num #t139 = self::getNum() in let final void #t140 = this.{self::Test5::[]=}(#t137, #t139) in #t139 : #t138;
-    core::num v6 = let final core::String #t141 = "x" in let final core::num #t142 = this.{self::Test5::[]}(#t141) in #t142.{core::num::==}(null) ?{core::num} let final core::double #t143 = self::getDouble() in let final void #t144 = this.{self::Test5::[]=}(#t141, #t143) in #t143 : #t142;
-    core::num v7 = let final core::String #t145 = "x" in let final core::num #t146 = this.{self::Test5::[]}(#t145).{core::num::+}(self::getInt()) in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146) in #t146;
-    core::num v8 = let final core::String #t148 = "x" in let final core::num #t149 = this.{self::Test5::[]}(#t148).{core::num::+}(self::getNum()) in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149) in #t149;
-    core::num v9 = let final core::String #t151 = "x" in let final core::num #t152 = this.{self::Test5::[]}(#t151).{core::num::+}(self::getDouble()) in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152) in #t152;
-    core::num v10 = let final core::String #t154 = "x" in let final core::num #t155 = this.{self::Test5::[]}(#t154).{core::num::+}(1) in let final void #t156 = this.{self::Test5::[]=}(#t154, #t155) in #t155;
-    core::num v11 = let final core::String #t157 = "x" in let final core::num #t158 = this.{self::Test5::[]}(#t157) in let final void #t159 = this.{self::Test5::[]=}(#t157, #t158.{core::num::+}(1)) in #t158;
+    core::int v1 = let final core::String #t121 = "x" in let final core::int #t122 = self::getInt() in let final void #t123 = this.{self::Test5::[]=}(#t121, #t122) in #t122;
+    core::num v2 = let final core::String #t124 = "x" in let final core::num #t125 = self::getNum() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125) in #t125;
+    core::double v3 = let final core::String #t127 = "x" in let final core::double #t128 = self::getDouble() in let final void #t129 = this.{self::Test5::[]=}(#t127, #t128) in #t128;
+    core::num v4 = let final core::String #t130 = "x" in let final core::num #t131 = this.{self::Test5::[]}(#t130) in #t131.{core::num::==}(null) ?{core::num} let final core::int #t132 = self::getInt() in let final void #t133 = this.{self::Test5::[]=}(#t130, #t132) in #t132 : #t131;
+    core::num v5 = let final core::String #t134 = "x" in let final core::num #t135 = this.{self::Test5::[]}(#t134) in #t135.{core::num::==}(null) ?{core::num} let final core::num #t136 = self::getNum() in let final void #t137 = this.{self::Test5::[]=}(#t134, #t136) in #t136 : #t135;
+    core::num v6 = let final core::String #t138 = "x" in let final core::num #t139 = this.{self::Test5::[]}(#t138) in #t139.{core::num::==}(null) ?{core::num} let final core::double #t140 = self::getDouble() in let final void #t141 = this.{self::Test5::[]=}(#t138, #t140) in #t140 : #t139;
+    core::num v7 = let final core::String #t142 = "x" in let final core::num #t143 = this.{self::Test5::[]}(#t142).{core::num::+}(self::getInt()) in let final void #t144 = this.{self::Test5::[]=}(#t142, #t143) in #t143;
+    core::num v8 = let final core::String #t145 = "x" in let final core::num #t146 = this.{self::Test5::[]}(#t145).{core::num::+}(self::getNum()) in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146) in #t146;
+    core::num v9 = let final core::String #t148 = "x" in let final core::num #t149 = this.{self::Test5::[]}(#t148).{core::num::+}(self::getDouble()) in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149) in #t149;
+    core::num v10 = let final core::String #t151 = "x" in let final core::num #t152 = this.{self::Test5::[]}(#t151).{core::num::+}(1) in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152) in #t152;
+    core::num v11 = let final core::String #t154 = "x" in let final core::num #t155 = this.{self::Test5::[]}(#t154) in let final void #t156 = this.{self::Test5::[]=}(#t154, #t155.{core::num::+}(1)) in #t155;
   }
 }
 abstract class Test6 extends core::Object {
@@ -147,15 +147,15 @@
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::double v) → void;
   method test() → void {
-    core::num v2 = let final core::String #t160 = "x" in let final core::num #t161 = self::getNum() as{TypeError} core::double in let final void #t162 = this.{self::Test6::[]=}(#t160, #t161) in #t161;
-    core::double v3 = let final core::String #t163 = "x" in let final core::double #t164 = self::getDouble() in let final void #t165 = this.{self::Test6::[]=}(#t163, #t164) in #t164;
-    core::num v5 = let final core::String #t166 = "x" in let final core::num #t167 = this.{self::Test6::[]}(#t166) in #t167.{core::num::==}(null) ?{core::num} let final core::num #t168 = self::getNum() as{TypeError} core::double in let final void #t169 = this.{self::Test6::[]=}(#t166, #t168) in #t168 : #t167;
-    core::num v6 = let final core::String #t170 = "x" in let final core::num #t171 = this.{self::Test6::[]}(#t170) in #t171.{core::num::==}(null) ?{core::num} let final core::double #t172 = self::getDouble() in let final void #t173 = this.{self::Test6::[]=}(#t170, #t172) in #t172 : #t171;
-    core::num v7 = let final core::String #t174 = "x" in let final core::num #t175 = this.{self::Test6::[]}(#t174).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175) in #t175;
-    core::num v8 = let final core::String #t177 = "x" in let final core::num #t178 = this.{self::Test6::[]}(#t177).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178) in #t178;
-    core::num v9 = let final core::String #t180 = "x" in let final core::num #t181 = this.{self::Test6::[]}(#t180).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181) in #t181;
-    core::num v10 = let final core::String #t183 = "x" in let final core::num #t184 = this.{self::Test6::[]}(#t183).{core::num::+}(1) as{TypeError} core::double in let final void #t185 = this.{self::Test6::[]=}(#t183, #t184) in #t184;
-    core::num v11 = let final core::String #t186 = "x" in let final core::num #t187 = this.{self::Test6::[]}(#t186) in let final void #t188 = this.{self::Test6::[]=}(#t186, #t187.{core::num::+}(1) as{TypeError} core::double) in #t187;
+    core::num v2 = let final core::String #t157 = "x" in let final core::num #t158 = self::getNum() as{TypeError} core::double in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158) in #t158;
+    core::double v3 = let final core::String #t160 = "x" in let final core::double #t161 = self::getDouble() in let final void #t162 = this.{self::Test6::[]=}(#t160, #t161) in #t161;
+    core::num v5 = let final core::String #t163 = "x" in let final core::num #t164 = this.{self::Test6::[]}(#t163) in #t164.{core::num::==}(null) ?{core::num} let final core::num #t165 = self::getNum() as{TypeError} core::double in let final void #t166 = this.{self::Test6::[]=}(#t163, #t165) in #t165 : #t164;
+    core::num v6 = let final core::String #t167 = "x" in let final core::num #t168 = this.{self::Test6::[]}(#t167) in #t168.{core::num::==}(null) ?{core::num} let final core::double #t169 = self::getDouble() in let final void #t170 = this.{self::Test6::[]=}(#t167, #t169) in #t169 : #t168;
+    core::num v7 = let final core::String #t171 = "x" in let final core::num #t172 = this.{self::Test6::[]}(#t171).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t173 = this.{self::Test6::[]=}(#t171, #t172) in #t172;
+    core::num v8 = let final core::String #t174 = "x" in let final core::num #t175 = this.{self::Test6::[]}(#t174).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175) in #t175;
+    core::num v9 = let final core::String #t177 = "x" in let final core::num #t178 = this.{self::Test6::[]}(#t177).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178) in #t178;
+    core::num v10 = let final core::String #t180 = "x" in let final core::num #t181 = this.{self::Test6::[]}(#t180).{core::num::+}(1) as{TypeError} core::double in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181) in #t181;
+    core::num v11 = let final core::String #t183 = "x" in let final core::num #t184 = this.{self::Test6::[]}(#t183) in let final void #t185 = this.{self::Test6::[]=}(#t183, #t184.{core::num::+}(1) as{TypeError} core::double) in #t184;
   }
 }
 abstract class Test7 extends core::Object {
@@ -165,26 +165,26 @@
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::int v) → void;
   method test() → void {
-    core::int v1 = let final core::String #t189 = "x" in let final core::int #t190 = self::getInt() in let final void #t191 = this.{self::Test7::[]=}(#t189, #t190) in #t190;
-    core::num v2 = let final core::String #t192 = "x" in let final core::num #t193 = self::getNum() as{TypeError} core::int in let final void #t194 = this.{self::Test7::[]=}(#t192, #t193) in #t193;
-    core::num v4 = let final core::String #t195 = "x" in let final core::double #t196 = this.{self::Test7::[]}(#t195) in #t196.{core::num::==}(null) ?{core::num} let final core::int #t197 = self::getInt() in let final void #t198 = this.{self::Test7::[]=}(#t195, #t197) in #t197 : #t196;
-    core::num v5 = let final core::String #t199 = "x" in let final core::double #t200 = this.{self::Test7::[]}(#t199) in #t200.{core::num::==}(null) ?{core::num} let final core::num #t201 = self::getNum() as{TypeError} core::int in let final void #t202 = this.{self::Test7::[]=}(#t199, #t201) in #t201 : #t200;
-    core::double v7 = let final core::String #t203 = "x" in let final core::double #t204 = let dynamic _ = null in let final dynamic #t205 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::int v1 = let final core::String #t186 = "x" in let final core::int #t187 = self::getInt() in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187) in #t187;
+    core::num v2 = let final core::String #t189 = "x" in let final core::num #t190 = self::getNum() as{TypeError} core::int in let final void #t191 = this.{self::Test7::[]=}(#t189, #t190) in #t190;
+    core::num v4 = let final core::String #t192 = "x" in let final core::double #t193 = this.{self::Test7::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num} let final core::int #t194 = self::getInt() in let final void #t195 = this.{self::Test7::[]=}(#t192, #t194) in #t194 : #t193;
+    core::num v5 = let final core::String #t196 = "x" in let final core::double #t197 = this.{self::Test7::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num} let final core::num #t198 = self::getNum() as{TypeError} core::int in let final void #t199 = this.{self::Test7::[]=}(#t196, #t198) in #t198 : #t197;
+    core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v7 = this /*@target=Test7::[]=*/ ['x'] += getInt();
-                                                                ^" in let final dynamic #t206 = this.{self::Test7::[]}(#t203).{core::double::+}(self::getInt()) in null in let final void #t207 = this.{self::Test7::[]=}(#t203, #t204) in #t204;
-    core::double v8 = let final core::String #t208 = "x" in let final core::double #t209 = let dynamic _ = null in let final dynamic #t210 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                                                ^" in this.{self::Test7::[]}(#t200).{core::double::+}(self::getInt()) as{TypeError} core::int in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201) in #t201;
+    core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v8 = this /*@target=Test7::[]=*/ ['x'] += getNum();
-                                                                ^" in let final dynamic #t211 = this.{self::Test7::[]}(#t208).{core::double::+}(self::getNum()) in null in let final void #t212 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
-    core::double v10 = let final core::String #t213 = "x" in let final core::double #t214 = let dynamic _ = null in let final dynamic #t215 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                                                ^" in this.{self::Test7::[]}(#t204).{core::double::+}(self::getNum()) as{TypeError} core::int in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205) in #t205;
+    core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v10 = ++this /*@target=Test7::[]=*/ ['x'];
-                               ^" in let final dynamic #t216 = this.{self::Test7::[]}(#t213).{core::double::+}(1) in null in let final void #t217 = this.{self::Test7::[]=}(#t213, #t214) in #t214;
-    core::double v11 = let final core::String #t218 = "x" in let final core::double #t219 = this.{self::Test7::[]}(#t218) in let final void #t220 = this.{self::Test7::[]=}(#t218, let dynamic _ = null in let final dynamic #t221 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                               ^" in this.{self::Test7::[]}(#t208).{core::double::+}(1) as{TypeError} core::int in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
+    core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = this.{self::Test7::[]}(#t212) in let final void #t214 = this.{self::Test7::[]=}(#t212, let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v11 = this /*@target=Test7::[]=*/ ['x']++;
-                                                                ^" in let final dynamic #t222 = #t219.{core::double::+}(1) in null) in #t219;
+                                                                ^" in #t213.{core::double::+}(1) as{TypeError} core::int) in #t213;
   }
 }
 abstract class Test8 extends core::Object {
@@ -194,17 +194,17 @@
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::num v) → void;
   method test() → void {
-    core::int v1 = let final core::String #t223 = "x" in let final core::int #t224 = self::getInt() in let final void #t225 = this.{self::Test8::[]=}(#t223, #t224) in #t224;
-    core::num v2 = let final core::String #t226 = "x" in let final core::num #t227 = self::getNum() in let final void #t228 = this.{self::Test8::[]=}(#t226, #t227) in #t227;
-    core::double v3 = let final core::String #t229 = "x" in let final core::double #t230 = self::getDouble() in let final void #t231 = this.{self::Test8::[]=}(#t229, #t230) in #t230;
-    core::num v4 = let final core::String #t232 = "x" in let final core::double #t233 = this.{self::Test8::[]}(#t232) in #t233.{core::num::==}(null) ?{core::num} let final core::int #t234 = self::getInt() in let final void #t235 = this.{self::Test8::[]=}(#t232, #t234) in #t234 : #t233;
-    core::num v5 = let final core::String #t236 = "x" in let final core::double #t237 = this.{self::Test8::[]}(#t236) in #t237.{core::num::==}(null) ?{core::num} let final core::num #t238 = self::getNum() in let final void #t239 = this.{self::Test8::[]=}(#t236, #t238) in #t238 : #t237;
-    core::double v6 = let final core::String #t240 = "x" in let final core::double #t241 = this.{self::Test8::[]}(#t240) in #t241.{core::num::==}(null) ?{core::double} let final core::double #t242 = self::getDouble() in let final void #t243 = this.{self::Test8::[]=}(#t240, #t242) in #t242 : #t241;
-    core::double v7 = let final core::String #t244 = "x" in let final core::double #t245 = this.{self::Test8::[]}(#t244).{core::double::+}(self::getInt()) in let final void #t246 = this.{self::Test8::[]=}(#t244, #t245) in #t245;
-    core::double v8 = let final core::String #t247 = "x" in let final core::double #t248 = this.{self::Test8::[]}(#t247).{core::double::+}(self::getNum()) in let final void #t249 = this.{self::Test8::[]=}(#t247, #t248) in #t248;
-    core::double v9 = let final core::String #t250 = "x" in let final core::double #t251 = this.{self::Test8::[]}(#t250).{core::double::+}(self::getDouble()) in let final void #t252 = this.{self::Test8::[]=}(#t250, #t251) in #t251;
-    core::double v10 = let final core::String #t253 = "x" in let final core::double #t254 = this.{self::Test8::[]}(#t253).{core::double::+}(1) in let final void #t255 = this.{self::Test8::[]=}(#t253, #t254) in #t254;
-    core::double v11 = let final core::String #t256 = "x" in let final core::double #t257 = this.{self::Test8::[]}(#t256) in let final void #t258 = this.{self::Test8::[]=}(#t256, #t257.{core::double::+}(1)) in #t257;
+    core::int v1 = let final core::String #t216 = "x" in let final core::int #t217 = self::getInt() in let final void #t218 = this.{self::Test8::[]=}(#t216, #t217) in #t217;
+    core::num v2 = let final core::String #t219 = "x" in let final core::num #t220 = self::getNum() in let final void #t221 = this.{self::Test8::[]=}(#t219, #t220) in #t220;
+    core::double v3 = let final core::String #t222 = "x" in let final core::double #t223 = self::getDouble() in let final void #t224 = this.{self::Test8::[]=}(#t222, #t223) in #t223;
+    core::num v4 = let final core::String #t225 = "x" in let final core::double #t226 = this.{self::Test8::[]}(#t225) in #t226.{core::num::==}(null) ?{core::num} let final core::int #t227 = self::getInt() in let final void #t228 = this.{self::Test8::[]=}(#t225, #t227) in #t227 : #t226;
+    core::num v5 = let final core::String #t229 = "x" in let final core::double #t230 = this.{self::Test8::[]}(#t229) in #t230.{core::num::==}(null) ?{core::num} let final core::num #t231 = self::getNum() in let final void #t232 = this.{self::Test8::[]=}(#t229, #t231) in #t231 : #t230;
+    core::double v6 = let final core::String #t233 = "x" in let final core::double #t234 = this.{self::Test8::[]}(#t233) in #t234.{core::num::==}(null) ?{core::double} let final core::double #t235 = self::getDouble() in let final void #t236 = this.{self::Test8::[]=}(#t233, #t235) in #t235 : #t234;
+    core::double v7 = let final core::String #t237 = "x" in let final core::double #t238 = this.{self::Test8::[]}(#t237).{core::double::+}(self::getInt()) in let final void #t239 = this.{self::Test8::[]=}(#t237, #t238) in #t238;
+    core::double v8 = let final core::String #t240 = "x" in let final core::double #t241 = this.{self::Test8::[]}(#t240).{core::double::+}(self::getNum()) in let final void #t242 = this.{self::Test8::[]=}(#t240, #t241) in #t241;
+    core::double v9 = let final core::String #t243 = "x" in let final core::double #t244 = this.{self::Test8::[]}(#t243).{core::double::+}(self::getDouble()) in let final void #t245 = this.{self::Test8::[]=}(#t243, #t244) in #t244;
+    core::double v10 = let final core::String #t246 = "x" in let final core::double #t247 = this.{self::Test8::[]}(#t246).{core::double::+}(1) in let final void #t248 = this.{self::Test8::[]=}(#t246, #t247) in #t247;
+    core::double v11 = let final core::String #t249 = "x" in let final core::double #t250 = this.{self::Test8::[]}(#t249) in let final void #t251 = this.{self::Test8::[]=}(#t249, #t250.{core::double::+}(1)) in #t250;
   }
 }
 abstract class Test9 extends core::Object {
@@ -214,15 +214,15 @@
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::double v) → void;
   method test() → void {
-    core::num v2 = let final core::String #t259 = "x" in let final core::num #t260 = self::getNum() as{TypeError} core::double in let final void #t261 = this.{self::Test9::[]=}(#t259, #t260) in #t260;
-    core::double v3 = let final core::String #t262 = "x" in let final core::double #t263 = self::getDouble() in let final void #t264 = this.{self::Test9::[]=}(#t262, #t263) in #t263;
-    core::num v5 = let final core::String #t265 = "x" in let final core::double #t266 = this.{self::Test9::[]}(#t265) in #t266.{core::num::==}(null) ?{core::num} let final core::num #t267 = self::getNum() as{TypeError} core::double in let final void #t268 = this.{self::Test9::[]=}(#t265, #t267) in #t267 : #t266;
-    core::double v6 = let final core::String #t269 = "x" in let final core::double #t270 = this.{self::Test9::[]}(#t269) in #t270.{core::num::==}(null) ?{core::double} let final core::double #t271 = self::getDouble() in let final void #t272 = this.{self::Test9::[]=}(#t269, #t271) in #t271 : #t270;
-    core::double v7 = let final core::String #t273 = "x" in let final core::double #t274 = this.{self::Test9::[]}(#t273).{core::double::+}(self::getInt()) in let final void #t275 = this.{self::Test9::[]=}(#t273, #t274) in #t274;
-    core::double v8 = let final core::String #t276 = "x" in let final core::double #t277 = this.{self::Test9::[]}(#t276).{core::double::+}(self::getNum()) in let final void #t278 = this.{self::Test9::[]=}(#t276, #t277) in #t277;
-    core::double v9 = let final core::String #t279 = "x" in let final core::double #t280 = this.{self::Test9::[]}(#t279).{core::double::+}(self::getDouble()) in let final void #t281 = this.{self::Test9::[]=}(#t279, #t280) in #t280;
-    core::double v10 = let final core::String #t282 = "x" in let final core::double #t283 = this.{self::Test9::[]}(#t282).{core::double::+}(1) in let final void #t284 = this.{self::Test9::[]=}(#t282, #t283) in #t283;
-    core::double v11 = let final core::String #t285 = "x" in let final core::double #t286 = this.{self::Test9::[]}(#t285) in let final void #t287 = this.{self::Test9::[]=}(#t285, #t286.{core::double::+}(1)) in #t286;
+    core::num v2 = let final core::String #t252 = "x" in let final core::num #t253 = self::getNum() as{TypeError} core::double in let final void #t254 = this.{self::Test9::[]=}(#t252, #t253) in #t253;
+    core::double v3 = let final core::String #t255 = "x" in let final core::double #t256 = self::getDouble() in let final void #t257 = this.{self::Test9::[]=}(#t255, #t256) in #t256;
+    core::num v5 = let final core::String #t258 = "x" in let final core::double #t259 = this.{self::Test9::[]}(#t258) in #t259.{core::num::==}(null) ?{core::num} let final core::num #t260 = self::getNum() as{TypeError} core::double in let final void #t261 = this.{self::Test9::[]=}(#t258, #t260) in #t260 : #t259;
+    core::double v6 = let final core::String #t262 = "x" in let final core::double #t263 = this.{self::Test9::[]}(#t262) in #t263.{core::num::==}(null) ?{core::double} let final core::double #t264 = self::getDouble() in let final void #t265 = this.{self::Test9::[]=}(#t262, #t264) in #t264 : #t263;
+    core::double v7 = let final core::String #t266 = "x" in let final core::double #t267 = this.{self::Test9::[]}(#t266).{core::double::+}(self::getInt()) in let final void #t268 = this.{self::Test9::[]=}(#t266, #t267) in #t267;
+    core::double v8 = let final core::String #t269 = "x" in let final core::double #t270 = this.{self::Test9::[]}(#t269).{core::double::+}(self::getNum()) in let final void #t271 = this.{self::Test9::[]=}(#t269, #t270) in #t270;
+    core::double v9 = let final core::String #t272 = "x" in let final core::double #t273 = this.{self::Test9::[]}(#t272).{core::double::+}(self::getDouble()) in let final void #t274 = this.{self::Test9::[]=}(#t272, #t273) in #t273;
+    core::double v10 = let final core::String #t275 = "x" in let final core::double #t276 = this.{self::Test9::[]}(#t275).{core::double::+}(1) in let final void #t277 = this.{self::Test9::[]=}(#t275, #t276) in #t276;
+    core::double v11 = let final core::String #t278 = "x" in let final core::double #t279 = this.{self::Test9::[]}(#t278) in let final void #t280 = this.{self::Test9::[]=}(#t278, #t279.{core::double::+}(1)) in #t279;
   }
 }
 static method getInt() → core::int
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
index c3edbb3..afd73c7 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
@@ -80,99 +80,99 @@
   core::double v3 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::double #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88) in #t88;
   core::num v5 = let final self::Test<core::int, core::double> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = #t90.{self::Test::[]}(#t91) in #t92.{core::num::==}(null) ?{core::num} let final core::num #t93 = self::getNum() as{TypeError} core::double in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93) in #t93 : #t92;
   core::num v6 = let final self::Test<core::int, core::double> #t95 = t in let final core::String #t96 = "x" in let final core::int #t97 = #t95.{self::Test::[]}(#t96) in #t97.{core::num::==}(null) ?{core::num} let final core::double #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98) in #t98 : #t97;
-  core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let dynamic _ = null in let final dynamic #t103 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+  core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
   var /*@type=int*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
-                                                       ^" in let final dynamic #t104 = #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) in null in let final void #t105 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
-  core::num v8 = let final self::Test<core::int, core::double> #t106 = t in let final core::String #t107 = "x" in let final core::num #t108 = #t106.{self::Test::[]}(#t107).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t109 = #t106.{self::Test::[]=}(#t107, #t108) in #t108;
-  core::double v9 = let final self::Test<core::int, core::double> #t110 = t in let final core::String #t111 = "x" in let final core::double #t112 = #t110.{self::Test::[]}(#t111).{core::num::+}(self::getDouble()) in let final void #t113 = #t110.{self::Test::[]=}(#t111, #t112) in #t112;
-  core::int v10 = let final self::Test<core::int, core::double> #t114 = t in let final core::String #t115 = "x" in let final core::int #t116 = let dynamic _ = null in let final dynamic #t117 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+                                                       ^" in #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
+  core::num v8 = let final self::Test<core::int, core::double> #t105 = t in let final core::String #t106 = "x" in let final core::num #t107 = #t105.{self::Test::[]}(#t106).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t108 = #t105.{self::Test::[]=}(#t106, #t107) in #t107;
+  core::double v9 = let final self::Test<core::int, core::double> #t109 = t in let final core::String #t110 = "x" in let final core::double #t111 = #t109.{self::Test::[]}(#t110).{core::num::+}(self::getDouble()) in let final void #t112 = #t109.{self::Test::[]=}(#t110, #t111) in #t111;
+  core::int v10 = let final self::Test<core::int, core::double> #t113 = t in let final core::String #t114 = "x" in let final core::int #t115 = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
   var /*@type=int*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
-                          ^" in let final dynamic #t118 = #t114.{self::Test::[]}(#t115).{core::num::+}(1) in null in let final void #t119 = #t114.{self::Test::[]=}(#t115, #t116) in #t116;
-  core::int v11 = let final self::Test<core::int, core::double> #t120 = t in let final core::String #t121 = "x" in let final core::int #t122 = #t120.{self::Test::[]}(#t121) in let final void #t123 = #t120.{self::Test::[]=}(#t121, let dynamic _ = null in let final dynamic #t124 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+                          ^" in #t113.{self::Test::[]}(#t114).{core::num::+}(1) as{TypeError} core::double in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115) in #t115;
+  core::int v11 = let final self::Test<core::int, core::double> #t118 = t in let final core::String #t119 = "x" in let final core::int #t120 = #t118.{self::Test::[]}(#t119) in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
   var /*@type=int*/ v11 = t /*@target=Test::[]=*/ ['x']++;
-                                                       ^" in let final dynamic #t125 = #t122.{core::num::+}(1) in null) in #t122;
+                                                       ^" in #t120.{core::num::+}(1) as{TypeError} core::double) in #t120;
 }
 static method test4(self::Test<core::num, core::int> t) → void {
-  core::int v1 = let final self::Test<core::num, core::int> #t126 = t in let final core::String #t127 = "x" in let final core::int #t128 = self::getInt() in let final void #t129 = #t126.{self::Test::[]=}(#t127, #t128) in #t128;
-  core::num v2 = let final self::Test<core::num, core::int> #t130 = t in let final core::String #t131 = "x" in let final core::num #t132 = self::getNum() as{TypeError} core::int in let final void #t133 = #t130.{self::Test::[]=}(#t131, #t132) in #t132;
-  core::num v4 = let final self::Test<core::num, core::int> #t134 = t in let final core::String #t135 = "x" in let final core::num #t136 = #t134.{self::Test::[]}(#t135) in #t136.{core::num::==}(null) ?{core::num} let final core::int #t137 = self::getInt() in let final void #t138 = #t134.{self::Test::[]=}(#t135, #t137) in #t137 : #t136;
-  core::num v5 = let final self::Test<core::num, core::int> #t139 = t in let final core::String #t140 = "x" in let final core::num #t141 = #t139.{self::Test::[]}(#t140) in #t141.{core::num::==}(null) ?{core::num} let final core::num #t142 = self::getNum() as{TypeError} core::int in let final void #t143 = #t139.{self::Test::[]=}(#t140, #t142) in #t142 : #t141;
-  core::num v7 = let final self::Test<core::num, core::int> #t144 = t in let final core::String #t145 = "x" in let final core::num #t146 = #t144.{self::Test::[]}(#t145).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t147 = #t144.{self::Test::[]=}(#t145, #t146) in #t146;
-  core::num v8 = let final self::Test<core::num, core::int> #t148 = t in let final core::String #t149 = "x" in let final core::num #t150 = #t148.{self::Test::[]}(#t149).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t151 = #t148.{self::Test::[]=}(#t149, #t150) in #t150;
-  core::num v10 = let final self::Test<core::num, core::int> #t152 = t in let final core::String #t153 = "x" in let final core::num #t154 = #t152.{self::Test::[]}(#t153).{core::num::+}(1) as{TypeError} core::int in let final void #t155 = #t152.{self::Test::[]=}(#t153, #t154) in #t154;
-  core::num v11 = let final self::Test<core::num, core::int> #t156 = t in let final core::String #t157 = "x" in let final core::num #t158 = #t156.{self::Test::[]}(#t157) in let final void #t159 = #t156.{self::Test::[]=}(#t157, #t158.{core::num::+}(1) as{TypeError} core::int) in #t158;
+  core::int v1 = let final self::Test<core::num, core::int> #t123 = t in let final core::String #t124 = "x" in let final core::int #t125 = self::getInt() in let final void #t126 = #t123.{self::Test::[]=}(#t124, #t125) in #t125;
+  core::num v2 = let final self::Test<core::num, core::int> #t127 = t in let final core::String #t128 = "x" in let final core::num #t129 = self::getNum() as{TypeError} core::int in let final void #t130 = #t127.{self::Test::[]=}(#t128, #t129) in #t129;
+  core::num v4 = let final self::Test<core::num, core::int> #t131 = t in let final core::String #t132 = "x" in let final core::num #t133 = #t131.{self::Test::[]}(#t132) in #t133.{core::num::==}(null) ?{core::num} let final core::int #t134 = self::getInt() in let final void #t135 = #t131.{self::Test::[]=}(#t132, #t134) in #t134 : #t133;
+  core::num v5 = let final self::Test<core::num, core::int> #t136 = t in let final core::String #t137 = "x" in let final core::num #t138 = #t136.{self::Test::[]}(#t137) in #t138.{core::num::==}(null) ?{core::num} let final core::num #t139 = self::getNum() as{TypeError} core::int in let final void #t140 = #t136.{self::Test::[]=}(#t137, #t139) in #t139 : #t138;
+  core::num v7 = let final self::Test<core::num, core::int> #t141 = t in let final core::String #t142 = "x" in let final core::num #t143 = #t141.{self::Test::[]}(#t142).{core::num::+}(self::getInt()) as{TypeError} core::int in let final void #t144 = #t141.{self::Test::[]=}(#t142, #t143) in #t143;
+  core::num v8 = let final self::Test<core::num, core::int> #t145 = t in let final core::String #t146 = "x" in let final core::num #t147 = #t145.{self::Test::[]}(#t146).{core::num::+}(self::getNum()) as{TypeError} core::int in let final void #t148 = #t145.{self::Test::[]=}(#t146, #t147) in #t147;
+  core::num v10 = let final self::Test<core::num, core::int> #t149 = t in let final core::String #t150 = "x" in let final core::num #t151 = #t149.{self::Test::[]}(#t150).{core::num::+}(1) as{TypeError} core::int in let final void #t152 = #t149.{self::Test::[]=}(#t150, #t151) in #t151;
+  core::num v11 = let final self::Test<core::num, core::int> #t153 = t in let final core::String #t154 = "x" in let final core::num #t155 = #t153.{self::Test::[]}(#t154) in let final void #t156 = #t153.{self::Test::[]=}(#t154, #t155.{core::num::+}(1) as{TypeError} core::int) in #t155;
 }
 static method test5(self::Test<core::num, core::num> t) → void {
-  core::int v1 = let final self::Test<core::num, core::num> #t160 = t in let final core::String #t161 = "x" in let final core::int #t162 = self::getInt() in let final void #t163 = #t160.{self::Test::[]=}(#t161, #t162) in #t162;
-  core::num v2 = let final self::Test<core::num, core::num> #t164 = t in let final core::String #t165 = "x" in let final core::num #t166 = self::getNum() in let final void #t167 = #t164.{self::Test::[]=}(#t165, #t166) in #t166;
-  core::double v3 = let final self::Test<core::num, core::num> #t168 = t in let final core::String #t169 = "x" in let final core::double #t170 = self::getDouble() in let final void #t171 = #t168.{self::Test::[]=}(#t169, #t170) in #t170;
-  core::num v4 = let final self::Test<core::num, core::num> #t172 = t in let final core::String #t173 = "x" in let final core::num #t174 = #t172.{self::Test::[]}(#t173) in #t174.{core::num::==}(null) ?{core::num} let final core::int #t175 = self::getInt() in let final void #t176 = #t172.{self::Test::[]=}(#t173, #t175) in #t175 : #t174;
-  core::num v5 = let final self::Test<core::num, core::num> #t177 = t in let final core::String #t178 = "x" in let final core::num #t179 = #t177.{self::Test::[]}(#t178) in #t179.{core::num::==}(null) ?{core::num} let final core::num #t180 = self::getNum() in let final void #t181 = #t177.{self::Test::[]=}(#t178, #t180) in #t180 : #t179;
-  core::num v6 = let final self::Test<core::num, core::num> #t182 = t in let final core::String #t183 = "x" in let final core::num #t184 = #t182.{self::Test::[]}(#t183) in #t184.{core::num::==}(null) ?{core::num} let final core::double #t185 = self::getDouble() in let final void #t186 = #t182.{self::Test::[]=}(#t183, #t185) in #t185 : #t184;
-  core::num v7 = let final self::Test<core::num, core::num> #t187 = t in let final core::String #t188 = "x" in let final core::num #t189 = #t187.{self::Test::[]}(#t188).{core::num::+}(self::getInt()) in let final void #t190 = #t187.{self::Test::[]=}(#t188, #t189) in #t189;
-  core::num v8 = let final self::Test<core::num, core::num> #t191 = t in let final core::String #t192 = "x" in let final core::num #t193 = #t191.{self::Test::[]}(#t192).{core::num::+}(self::getNum()) in let final void #t194 = #t191.{self::Test::[]=}(#t192, #t193) in #t193;
-  core::num v9 = let final self::Test<core::num, core::num> #t195 = t in let final core::String #t196 = "x" in let final core::num #t197 = #t195.{self::Test::[]}(#t196).{core::num::+}(self::getDouble()) in let final void #t198 = #t195.{self::Test::[]=}(#t196, #t197) in #t197;
-  core::num v10 = let final self::Test<core::num, core::num> #t199 = t in let final core::String #t200 = "x" in let final core::num #t201 = #t199.{self::Test::[]}(#t200).{core::num::+}(1) in let final void #t202 = #t199.{self::Test::[]=}(#t200, #t201) in #t201;
-  core::num v11 = let final self::Test<core::num, core::num> #t203 = t in let final core::String #t204 = "x" in let final core::num #t205 = #t203.{self::Test::[]}(#t204) in let final void #t206 = #t203.{self::Test::[]=}(#t204, #t205.{core::num::+}(1)) in #t205;
+  core::int v1 = let final self::Test<core::num, core::num> #t157 = t in let final core::String #t158 = "x" in let final core::int #t159 = self::getInt() in let final void #t160 = #t157.{self::Test::[]=}(#t158, #t159) in #t159;
+  core::num v2 = let final self::Test<core::num, core::num> #t161 = t in let final core::String #t162 = "x" in let final core::num #t163 = self::getNum() in let final void #t164 = #t161.{self::Test::[]=}(#t162, #t163) in #t163;
+  core::double v3 = let final self::Test<core::num, core::num> #t165 = t in let final core::String #t166 = "x" in let final core::double #t167 = self::getDouble() in let final void #t168 = #t165.{self::Test::[]=}(#t166, #t167) in #t167;
+  core::num v4 = let final self::Test<core::num, core::num> #t169 = t in let final core::String #t170 = "x" in let final core::num #t171 = #t169.{self::Test::[]}(#t170) in #t171.{core::num::==}(null) ?{core::num} let final core::int #t172 = self::getInt() in let final void #t173 = #t169.{self::Test::[]=}(#t170, #t172) in #t172 : #t171;
+  core::num v5 = let final self::Test<core::num, core::num> #t174 = t in let final core::String #t175 = "x" in let final core::num #t176 = #t174.{self::Test::[]}(#t175) in #t176.{core::num::==}(null) ?{core::num} let final core::num #t177 = self::getNum() in let final void #t178 = #t174.{self::Test::[]=}(#t175, #t177) in #t177 : #t176;
+  core::num v6 = let final self::Test<core::num, core::num> #t179 = t in let final core::String #t180 = "x" in let final core::num #t181 = #t179.{self::Test::[]}(#t180) in #t181.{core::num::==}(null) ?{core::num} let final core::double #t182 = self::getDouble() in let final void #t183 = #t179.{self::Test::[]=}(#t180, #t182) in #t182 : #t181;
+  core::num v7 = let final self::Test<core::num, core::num> #t184 = t in let final core::String #t185 = "x" in let final core::num #t186 = #t184.{self::Test::[]}(#t185).{core::num::+}(self::getInt()) in let final void #t187 = #t184.{self::Test::[]=}(#t185, #t186) in #t186;
+  core::num v8 = let final self::Test<core::num, core::num> #t188 = t in let final core::String #t189 = "x" in let final core::num #t190 = #t188.{self::Test::[]}(#t189).{core::num::+}(self::getNum()) in let final void #t191 = #t188.{self::Test::[]=}(#t189, #t190) in #t190;
+  core::num v9 = let final self::Test<core::num, core::num> #t192 = t in let final core::String #t193 = "x" in let final core::num #t194 = #t192.{self::Test::[]}(#t193).{core::num::+}(self::getDouble()) in let final void #t195 = #t192.{self::Test::[]=}(#t193, #t194) in #t194;
+  core::num v10 = let final self::Test<core::num, core::num> #t196 = t in let final core::String #t197 = "x" in let final core::num #t198 = #t196.{self::Test::[]}(#t197).{core::num::+}(1) in let final void #t199 = #t196.{self::Test::[]=}(#t197, #t198) in #t198;
+  core::num v11 = let final self::Test<core::num, core::num> #t200 = t in let final core::String #t201 = "x" in let final core::num #t202 = #t200.{self::Test::[]}(#t201) in let final void #t203 = #t200.{self::Test::[]=}(#t201, #t202.{core::num::+}(1)) in #t202;
 }
 static method test6(self::Test<core::num, core::double> t) → void {
-  core::num v2 = let final self::Test<core::num, core::double> #t207 = t in let final core::String #t208 = "x" in let final core::num #t209 = self::getNum() as{TypeError} core::double in let final void #t210 = #t207.{self::Test::[]=}(#t208, #t209) in #t209;
-  core::double v3 = let final self::Test<core::num, core::double> #t211 = t in let final core::String #t212 = "x" in let final core::double #t213 = self::getDouble() in let final void #t214 = #t211.{self::Test::[]=}(#t212, #t213) in #t213;
-  core::num v5 = let final self::Test<core::num, core::double> #t215 = t in let final core::String #t216 = "x" in let final core::num #t217 = #t215.{self::Test::[]}(#t216) in #t217.{core::num::==}(null) ?{core::num} let final core::num #t218 = self::getNum() as{TypeError} core::double in let final void #t219 = #t215.{self::Test::[]=}(#t216, #t218) in #t218 : #t217;
-  core::num v6 = let final self::Test<core::num, core::double> #t220 = t in let final core::String #t221 = "x" in let final core::num #t222 = #t220.{self::Test::[]}(#t221) in #t222.{core::num::==}(null) ?{core::num} let final core::double #t223 = self::getDouble() in let final void #t224 = #t220.{self::Test::[]=}(#t221, #t223) in #t223 : #t222;
-  core::num v7 = let final self::Test<core::num, core::double> #t225 = t in let final core::String #t226 = "x" in let final core::num #t227 = #t225.{self::Test::[]}(#t226).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t228 = #t225.{self::Test::[]=}(#t226, #t227) in #t227;
-  core::num v8 = let final self::Test<core::num, core::double> #t229 = t in let final core::String #t230 = "x" in let final core::num #t231 = #t229.{self::Test::[]}(#t230).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t232 = #t229.{self::Test::[]=}(#t230, #t231) in #t231;
-  core::num v9 = let final self::Test<core::num, core::double> #t233 = t in let final core::String #t234 = "x" in let final core::num #t235 = #t233.{self::Test::[]}(#t234).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t236 = #t233.{self::Test::[]=}(#t234, #t235) in #t235;
-  core::num v10 = let final self::Test<core::num, core::double> #t237 = t in let final core::String #t238 = "x" in let final core::num #t239 = #t237.{self::Test::[]}(#t238).{core::num::+}(1) as{TypeError} core::double in let final void #t240 = #t237.{self::Test::[]=}(#t238, #t239) in #t239;
-  core::num v11 = let final self::Test<core::num, core::double> #t241 = t in let final core::String #t242 = "x" in let final core::num #t243 = #t241.{self::Test::[]}(#t242) in let final void #t244 = #t241.{self::Test::[]=}(#t242, #t243.{core::num::+}(1) as{TypeError} core::double) in #t243;
+  core::num v2 = let final self::Test<core::num, core::double> #t204 = t in let final core::String #t205 = "x" in let final core::num #t206 = self::getNum() as{TypeError} core::double in let final void #t207 = #t204.{self::Test::[]=}(#t205, #t206) in #t206;
+  core::double v3 = let final self::Test<core::num, core::double> #t208 = t in let final core::String #t209 = "x" in let final core::double #t210 = self::getDouble() in let final void #t211 = #t208.{self::Test::[]=}(#t209, #t210) in #t210;
+  core::num v5 = let final self::Test<core::num, core::double> #t212 = t in let final core::String #t213 = "x" in let final core::num #t214 = #t212.{self::Test::[]}(#t213) in #t214.{core::num::==}(null) ?{core::num} let final core::num #t215 = self::getNum() as{TypeError} core::double in let final void #t216 = #t212.{self::Test::[]=}(#t213, #t215) in #t215 : #t214;
+  core::num v6 = let final self::Test<core::num, core::double> #t217 = t in let final core::String #t218 = "x" in let final core::num #t219 = #t217.{self::Test::[]}(#t218) in #t219.{core::num::==}(null) ?{core::num} let final core::double #t220 = self::getDouble() in let final void #t221 = #t217.{self::Test::[]=}(#t218, #t220) in #t220 : #t219;
+  core::num v7 = let final self::Test<core::num, core::double> #t222 = t in let final core::String #t223 = "x" in let final core::num #t224 = #t222.{self::Test::[]}(#t223).{core::num::+}(self::getInt()) as{TypeError} core::double in let final void #t225 = #t222.{self::Test::[]=}(#t223, #t224) in #t224;
+  core::num v8 = let final self::Test<core::num, core::double> #t226 = t in let final core::String #t227 = "x" in let final core::num #t228 = #t226.{self::Test::[]}(#t227).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t229 = #t226.{self::Test::[]=}(#t227, #t228) in #t228;
+  core::num v9 = let final self::Test<core::num, core::double> #t230 = t in let final core::String #t231 = "x" in let final core::num #t232 = #t230.{self::Test::[]}(#t231).{core::num::+}(self::getDouble()) as{TypeError} core::double in let final void #t233 = #t230.{self::Test::[]=}(#t231, #t232) in #t232;
+  core::num v10 = let final self::Test<core::num, core::double> #t234 = t in let final core::String #t235 = "x" in let final core::num #t236 = #t234.{self::Test::[]}(#t235).{core::num::+}(1) as{TypeError} core::double in let final void #t237 = #t234.{self::Test::[]=}(#t235, #t236) in #t236;
+  core::num v11 = let final self::Test<core::num, core::double> #t238 = t in let final core::String #t239 = "x" in let final core::num #t240 = #t238.{self::Test::[]}(#t239) in let final void #t241 = #t238.{self::Test::[]=}(#t239, #t240.{core::num::+}(1) as{TypeError} core::double) in #t240;
 }
 static method test7(self::Test<core::double, core::int> t) → void {
-  core::int v1 = let final self::Test<core::double, core::int> #t245 = t in let final core::String #t246 = "x" in let final core::int #t247 = self::getInt() in let final void #t248 = #t245.{self::Test::[]=}(#t246, #t247) in #t247;
-  core::num v2 = let final self::Test<core::double, core::int> #t249 = t in let final core::String #t250 = "x" in let final core::num #t251 = self::getNum() as{TypeError} core::int in let final void #t252 = #t249.{self::Test::[]=}(#t250, #t251) in #t251;
-  core::num v4 = let final self::Test<core::double, core::int> #t253 = t in let final core::String #t254 = "x" in let final core::double #t255 = #t253.{self::Test::[]}(#t254) in #t255.{core::num::==}(null) ?{core::num} let final core::int #t256 = self::getInt() in let final void #t257 = #t253.{self::Test::[]=}(#t254, #t256) in #t256 : #t255;
-  core::num v5 = let final self::Test<core::double, core::int> #t258 = t in let final core::String #t259 = "x" in let final core::double #t260 = #t258.{self::Test::[]}(#t259) in #t260.{core::num::==}(null) ?{core::num} let final core::num #t261 = self::getNum() as{TypeError} core::int in let final void #t262 = #t258.{self::Test::[]=}(#t259, #t261) in #t261 : #t260;
-  core::double v7 = let final self::Test<core::double, core::int> #t263 = t in let final core::String #t264 = "x" in let final core::double #t265 = let dynamic _ = null in let final dynamic #t266 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  core::int v1 = let final self::Test<core::double, core::int> #t242 = t in let final core::String #t243 = "x" in let final core::int #t244 = self::getInt() in let final void #t245 = #t242.{self::Test::[]=}(#t243, #t244) in #t244;
+  core::num v2 = let final self::Test<core::double, core::int> #t246 = t in let final core::String #t247 = "x" in let final core::num #t248 = self::getNum() as{TypeError} core::int in let final void #t249 = #t246.{self::Test::[]=}(#t247, #t248) in #t248;
+  core::num v4 = let final self::Test<core::double, core::int> #t250 = t in let final core::String #t251 = "x" in let final core::double #t252 = #t250.{self::Test::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::int #t253 = self::getInt() in let final void #t254 = #t250.{self::Test::[]=}(#t251, #t253) in #t253 : #t252;
+  core::num v5 = let final self::Test<core::double, core::int> #t255 = t in let final core::String #t256 = "x" in let final core::double #t257 = #t255.{self::Test::[]}(#t256) in #t257.{core::num::==}(null) ?{core::num} let final core::num #t258 = self::getNum() as{TypeError} core::int in let final void #t259 = #t255.{self::Test::[]=}(#t256, #t258) in #t258 : #t257;
+  core::double v7 = let final self::Test<core::double, core::int> #t260 = t in let final core::String #t261 = "x" in let final core::double #t262 = let final<BottomType> #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   var /*@type=double*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
-                                                          ^" in let final dynamic #t267 = #t263.{self::Test::[]}(#t264).{core::double::+}(self::getInt()) in null in let final void #t268 = #t263.{self::Test::[]=}(#t264, #t265) in #t265;
-  core::double v8 = let final self::Test<core::double, core::int> #t269 = t in let final core::String #t270 = "x" in let final core::double #t271 = let dynamic _ = null in let final dynamic #t272 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                                          ^" in #t260.{self::Test::[]}(#t261).{core::double::+}(self::getInt()) as{TypeError} core::int in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262) in #t262;
+  core::double v8 = let final self::Test<core::double, core::int> #t265 = t in let final core::String #t266 = "x" in let final core::double #t267 = let final<BottomType> #t268 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   var /*@type=double*/ v8 = t /*@target=Test::[]=*/ ['x'] += getNum();
-                                                          ^" in let final dynamic #t273 = #t269.{self::Test::[]}(#t270).{core::double::+}(self::getNum()) in null in let final void #t274 = #t269.{self::Test::[]=}(#t270, #t271) in #t271;
-  core::double v10 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = let dynamic _ = null in let final dynamic #t278 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                                                          ^" in #t265.{self::Test::[]}(#t266).{core::double::+}(self::getNum()) as{TypeError} core::int in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
+  core::double v10 = let final self::Test<core::double, core::int> #t270 = t in let final core::String #t271 = "x" in let final core::double #t272 = let final<BottomType> #t273 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   var /*@type=double*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
-                             ^" in let final dynamic #t279 = #t275.{self::Test::[]}(#t276).{core::double::+}(1) in null in let final void #t280 = #t275.{self::Test::[]=}(#t276, #t277) in #t277;
-  core::double v11 = let final self::Test<core::double, core::int> #t281 = t in let final core::String #t282 = "x" in let final core::double #t283 = #t281.{self::Test::[]}(#t282) in let final void #t284 = #t281.{self::Test::[]=}(#t282, let dynamic _ = null in let final dynamic #t285 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+                             ^" in #t270.{self::Test::[]}(#t271).{core::double::+}(1) as{TypeError} core::int in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272) in #t272;
+  core::double v11 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = #t275.{self::Test::[]}(#t276) in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final<BottomType> #t279 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   var /*@type=double*/ v11 = t /*@target=Test::[]=*/ ['x']++;
-                                                          ^" in let final dynamic #t286 = #t283.{core::double::+}(1) in null) in #t283;
+                                                          ^" in #t277.{core::double::+}(1) as{TypeError} core::int) in #t277;
 }
 static method test8(self::Test<core::double, core::num> t) → void {
-  core::int v1 = let final self::Test<core::double, core::num> #t287 = t in let final core::String #t288 = "x" in let final core::int #t289 = self::getInt() in let final void #t290 = #t287.{self::Test::[]=}(#t288, #t289) in #t289;
-  core::num v2 = let final self::Test<core::double, core::num> #t291 = t in let final core::String #t292 = "x" in let final core::num #t293 = self::getNum() in let final void #t294 = #t291.{self::Test::[]=}(#t292, #t293) in #t293;
-  core::double v3 = let final self::Test<core::double, core::num> #t295 = t in let final core::String #t296 = "x" in let final core::double #t297 = self::getDouble() in let final void #t298 = #t295.{self::Test::[]=}(#t296, #t297) in #t297;
-  core::num v4 = let final self::Test<core::double, core::num> #t299 = t in let final core::String #t300 = "x" in let final core::double #t301 = #t299.{self::Test::[]}(#t300) in #t301.{core::num::==}(null) ?{core::num} let final core::int #t302 = self::getInt() in let final void #t303 = #t299.{self::Test::[]=}(#t300, #t302) in #t302 : #t301;
-  core::num v5 = let final self::Test<core::double, core::num> #t304 = t in let final core::String #t305 = "x" in let final core::double #t306 = #t304.{self::Test::[]}(#t305) in #t306.{core::num::==}(null) ?{core::num} let final core::num #t307 = self::getNum() in let final void #t308 = #t304.{self::Test::[]=}(#t305, #t307) in #t307 : #t306;
-  core::double v6 = let final self::Test<core::double, core::num> #t309 = t in let final core::String #t310 = "x" in let final core::double #t311 = #t309.{self::Test::[]}(#t310) in #t311.{core::num::==}(null) ?{core::double} let final core::double #t312 = self::getDouble() in let final void #t313 = #t309.{self::Test::[]=}(#t310, #t312) in #t312 : #t311;
-  core::double v7 = let final self::Test<core::double, core::num> #t314 = t in let final core::String #t315 = "x" in let final core::double #t316 = #t314.{self::Test::[]}(#t315).{core::double::+}(self::getInt()) in let final void #t317 = #t314.{self::Test::[]=}(#t315, #t316) in #t316;
-  core::double v8 = let final self::Test<core::double, core::num> #t318 = t in let final core::String #t319 = "x" in let final core::double #t320 = #t318.{self::Test::[]}(#t319).{core::double::+}(self::getNum()) in let final void #t321 = #t318.{self::Test::[]=}(#t319, #t320) in #t320;
-  core::double v9 = let final self::Test<core::double, core::num> #t322 = t in let final core::String #t323 = "x" in let final core::double #t324 = #t322.{self::Test::[]}(#t323).{core::double::+}(self::getDouble()) in let final void #t325 = #t322.{self::Test::[]=}(#t323, #t324) in #t324;
-  core::double v10 = let final self::Test<core::double, core::num> #t326 = t in let final core::String #t327 = "x" in let final core::double #t328 = #t326.{self::Test::[]}(#t327).{core::double::+}(1) in let final void #t329 = #t326.{self::Test::[]=}(#t327, #t328) in #t328;
-  core::double v11 = let final self::Test<core::double, core::num> #t330 = t in let final core::String #t331 = "x" in let final core::double #t332 = #t330.{self::Test::[]}(#t331) in let final void #t333 = #t330.{self::Test::[]=}(#t331, #t332.{core::double::+}(1)) in #t332;
+  core::int v1 = let final self::Test<core::double, core::num> #t280 = t in let final core::String #t281 = "x" in let final core::int #t282 = self::getInt() in let final void #t283 = #t280.{self::Test::[]=}(#t281, #t282) in #t282;
+  core::num v2 = let final self::Test<core::double, core::num> #t284 = t in let final core::String #t285 = "x" in let final core::num #t286 = self::getNum() in let final void #t287 = #t284.{self::Test::[]=}(#t285, #t286) in #t286;
+  core::double v3 = let final self::Test<core::double, core::num> #t288 = t in let final core::String #t289 = "x" in let final core::double #t290 = self::getDouble() in let final void #t291 = #t288.{self::Test::[]=}(#t289, #t290) in #t290;
+  core::num v4 = let final self::Test<core::double, core::num> #t292 = t in let final core::String #t293 = "x" in let final core::double #t294 = #t292.{self::Test::[]}(#t293) in #t294.{core::num::==}(null) ?{core::num} let final core::int #t295 = self::getInt() in let final void #t296 = #t292.{self::Test::[]=}(#t293, #t295) in #t295 : #t294;
+  core::num v5 = let final self::Test<core::double, core::num> #t297 = t in let final core::String #t298 = "x" in let final core::double #t299 = #t297.{self::Test::[]}(#t298) in #t299.{core::num::==}(null) ?{core::num} let final core::num #t300 = self::getNum() in let final void #t301 = #t297.{self::Test::[]=}(#t298, #t300) in #t300 : #t299;
+  core::double v6 = let final self::Test<core::double, core::num> #t302 = t in let final core::String #t303 = "x" in let final core::double #t304 = #t302.{self::Test::[]}(#t303) in #t304.{core::num::==}(null) ?{core::double} let final core::double #t305 = self::getDouble() in let final void #t306 = #t302.{self::Test::[]=}(#t303, #t305) in #t305 : #t304;
+  core::double v7 = let final self::Test<core::double, core::num> #t307 = t in let final core::String #t308 = "x" in let final core::double #t309 = #t307.{self::Test::[]}(#t308).{core::double::+}(self::getInt()) in let final void #t310 = #t307.{self::Test::[]=}(#t308, #t309) in #t309;
+  core::double v8 = let final self::Test<core::double, core::num> #t311 = t in let final core::String #t312 = "x" in let final core::double #t313 = #t311.{self::Test::[]}(#t312).{core::double::+}(self::getNum()) in let final void #t314 = #t311.{self::Test::[]=}(#t312, #t313) in #t313;
+  core::double v9 = let final self::Test<core::double, core::num> #t315 = t in let final core::String #t316 = "x" in let final core::double #t317 = #t315.{self::Test::[]}(#t316).{core::double::+}(self::getDouble()) in let final void #t318 = #t315.{self::Test::[]=}(#t316, #t317) in #t317;
+  core::double v10 = let final self::Test<core::double, core::num> #t319 = t in let final core::String #t320 = "x" in let final core::double #t321 = #t319.{self::Test::[]}(#t320).{core::double::+}(1) in let final void #t322 = #t319.{self::Test::[]=}(#t320, #t321) in #t321;
+  core::double v11 = let final self::Test<core::double, core::num> #t323 = t in let final core::String #t324 = "x" in let final core::double #t325 = #t323.{self::Test::[]}(#t324) in let final void #t326 = #t323.{self::Test::[]=}(#t324, #t325.{core::double::+}(1)) in #t325;
 }
 static method test9(self::Test<core::double, core::double> t) → void {
-  core::num v2 = let final self::Test<core::double, core::double> #t334 = t in let final core::String #t335 = "x" in let final core::num #t336 = self::getNum() as{TypeError} core::double in let final void #t337 = #t334.{self::Test::[]=}(#t335, #t336) in #t336;
-  core::double v3 = let final self::Test<core::double, core::double> #t338 = t in let final core::String #t339 = "x" in let final core::double #t340 = self::getDouble() in let final void #t341 = #t338.{self::Test::[]=}(#t339, #t340) in #t340;
-  core::num v5 = let final self::Test<core::double, core::double> #t342 = t in let final core::String #t343 = "x" in let final core::double #t344 = #t342.{self::Test::[]}(#t343) in #t344.{core::num::==}(null) ?{core::num} let final core::num #t345 = self::getNum() as{TypeError} core::double in let final void #t346 = #t342.{self::Test::[]=}(#t343, #t345) in #t345 : #t344;
-  core::double v6 = let final self::Test<core::double, core::double> #t347 = t in let final core::String #t348 = "x" in let final core::double #t349 = #t347.{self::Test::[]}(#t348) in #t349.{core::num::==}(null) ?{core::double} let final core::double #t350 = self::getDouble() in let final void #t351 = #t347.{self::Test::[]=}(#t348, #t350) in #t350 : #t349;
-  core::double v7 = let final self::Test<core::double, core::double> #t352 = t in let final core::String #t353 = "x" in let final core::double #t354 = #t352.{self::Test::[]}(#t353).{core::double::+}(self::getInt()) in let final void #t355 = #t352.{self::Test::[]=}(#t353, #t354) in #t354;
-  core::double v8 = let final self::Test<core::double, core::double> #t356 = t in let final core::String #t357 = "x" in let final core::double #t358 = #t356.{self::Test::[]}(#t357).{core::double::+}(self::getNum()) in let final void #t359 = #t356.{self::Test::[]=}(#t357, #t358) in #t358;
-  core::double v9 = let final self::Test<core::double, core::double> #t360 = t in let final core::String #t361 = "x" in let final core::double #t362 = #t360.{self::Test::[]}(#t361).{core::double::+}(self::getDouble()) in let final void #t363 = #t360.{self::Test::[]=}(#t361, #t362) in #t362;
-  core::double v10 = let final self::Test<core::double, core::double> #t364 = t in let final core::String #t365 = "x" in let final core::double #t366 = #t364.{self::Test::[]}(#t365).{core::double::+}(1) in let final void #t367 = #t364.{self::Test::[]=}(#t365, #t366) in #t366;
-  core::double v11 = let final self::Test<core::double, core::double> #t368 = t in let final core::String #t369 = "x" in let final core::double #t370 = #t368.{self::Test::[]}(#t369) in let final void #t371 = #t368.{self::Test::[]=}(#t369, #t370.{core::double::+}(1)) in #t370;
+  core::num v2 = let final self::Test<core::double, core::double> #t327 = t in let final core::String #t328 = "x" in let final core::num #t329 = self::getNum() as{TypeError} core::double in let final void #t330 = #t327.{self::Test::[]=}(#t328, #t329) in #t329;
+  core::double v3 = let final self::Test<core::double, core::double> #t331 = t in let final core::String #t332 = "x" in let final core::double #t333 = self::getDouble() in let final void #t334 = #t331.{self::Test::[]=}(#t332, #t333) in #t333;
+  core::num v5 = let final self::Test<core::double, core::double> #t335 = t in let final core::String #t336 = "x" in let final core::double #t337 = #t335.{self::Test::[]}(#t336) in #t337.{core::num::==}(null) ?{core::num} let final core::num #t338 = self::getNum() as{TypeError} core::double in let final void #t339 = #t335.{self::Test::[]=}(#t336, #t338) in #t338 : #t337;
+  core::double v6 = let final self::Test<core::double, core::double> #t340 = t in let final core::String #t341 = "x" in let final core::double #t342 = #t340.{self::Test::[]}(#t341) in #t342.{core::num::==}(null) ?{core::double} let final core::double #t343 = self::getDouble() in let final void #t344 = #t340.{self::Test::[]=}(#t341, #t343) in #t343 : #t342;
+  core::double v7 = let final self::Test<core::double, core::double> #t345 = t in let final core::String #t346 = "x" in let final core::double #t347 = #t345.{self::Test::[]}(#t346).{core::double::+}(self::getInt()) in let final void #t348 = #t345.{self::Test::[]=}(#t346, #t347) in #t347;
+  core::double v8 = let final self::Test<core::double, core::double> #t349 = t in let final core::String #t350 = "x" in let final core::double #t351 = #t349.{self::Test::[]}(#t350).{core::double::+}(self::getNum()) in let final void #t352 = #t349.{self::Test::[]=}(#t350, #t351) in #t351;
+  core::double v9 = let final self::Test<core::double, core::double> #t353 = t in let final core::String #t354 = "x" in let final core::double #t355 = #t353.{self::Test::[]}(#t354).{core::double::+}(self::getDouble()) in let final void #t356 = #t353.{self::Test::[]=}(#t354, #t355) in #t355;
+  core::double v10 = let final self::Test<core::double, core::double> #t357 = t in let final core::String #t358 = "x" in let final core::double #t359 = #t357.{self::Test::[]}(#t358).{core::double::+}(1) in let final void #t360 = #t357.{self::Test::[]=}(#t358, #t359) in #t359;
+  core::double v11 = let final self::Test<core::double, core::double> #t361 = t in let final core::String #t362 = "x" in let final core::double #t363 = #t361.{self::Test::[]}(#t362) in let final void #t364 = #t361.{self::Test::[]=}(#t362, #t363.{core::double::+}(1)) in #t363;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
index e1ed53a..b7fc239 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
@@ -39,20 +39,20 @@
     : super core::Object::•()
     ;
 }
-static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);
-                                    ^" in let final dynamic #t3 = #t1.{self::B::a}.{self::A::+}(1) in null;
-static field core::double v_prefix_mm = let final self::B #t4 = new self::B::•() in #t4.{self::B::a} = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+                                    ^" in #t1.{self::B::a}.{self::A::+}(1) as{TypeError} self::A;
+static field core::double v_prefix_mm = let final self::B #t3 = new self::B::•() in #t3.{self::B::a} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);
-                                       ^" in let final dynamic #t6 = #t4.{self::B::a}.{self::A::-}(1) in null;
-static field self::A v_postfix_pp = let final self::B #t7 = new self::B::•() in let final self::A #t8 = #t7.{self::B::a} in let final core::int #t9 = #t7.{self::B::a} = let dynamic _ = null in let final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+                                       ^" in #t3.{self::B::a}.{self::A::-}(1) as{TypeError} self::A;
+static field self::A v_postfix_pp = let final self::B #t5 = new self::B::•() in let final self::A #t6 = #t5.{self::B::a} in let final core::int #t7 = #t5.{self::B::a} = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);
-                                                              ^" in let final dynamic #t11 = #t8.{self::A::+}(1) in null in #t8;
-static field self::A v_postfix_mm = let final self::B #t12 = new self::B::•() in let final self::A #t13 = #t12.{self::B::a} in let final core::double #t14 = #t12.{self::B::a} = let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+                                                              ^" in #t6.{self::A::+}(1) as{TypeError} self::A in #t6;
+static field self::A v_postfix_mm = let final self::B #t9 = new self::B::•() in let final self::A #t10 = #t9.{self::B::a} in let final core::double #t11 = #t9.{self::B::a} = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);
-                                                              ^" in let final dynamic #t16 = #t13.{self::A::-}(1) in null in #t13;
+                                                              ^" in #t10.{self::A::-}(1) as{TypeError} self::A in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.transformed.expect
index 5cb53bf..7a44f95 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.transformed.expect
@@ -17,20 +17,20 @@
     : super core::Object::•()
     ;
 }
-static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);
-                                    ^" in let final core::int #t3 = #t1.{self::B::a}.{self::A::+}(1) in null;
-static field core::double v_prefix_mm = let final self::B #t4 = new self::B::•() in #t4.{self::B::a} = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+                                    ^" in #t1.{self::B::a}.{self::A::+}(1) as{TypeError} <BottomType>;
+static field core::double v_prefix_mm = let final self::B #t3 = new self::B::•() in #t3.{self::B::a} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);
-                                       ^" in let final core::double #t6 = #t4.{self::B::a}.{self::A::-}(1) in null;
-static field self::A v_postfix_pp = let final self::B #t7 = new self::B::•() in let final self::A #t8 = #t7.{self::B::a} in let final core::int #t9 = #t7.{self::B::a} = let<BottomType> _ = null in let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+                                       ^" in #t3.{self::B::a}.{self::A::-}(1) as{TypeError} <BottomType>;
+static field self::A v_postfix_pp = let final self::B #t5 = new self::B::•() in let final self::A #t6 = #t5.{self::B::a} in let final core::int #t7 = #t5.{self::B::a} = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);
-                                                              ^" in let final core::int #t11 = #t8.{self::A::+}(1) in null in #t8;
-static field self::A v_postfix_mm = let final self::B #t12 = new self::B::•() in let final self::A #t13 = #t12.{self::B::a} in let final core::double #t14 = #t12.{self::B::a} = let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+                                                              ^" in #t6.{self::A::+}(1) as{TypeError} <BottomType>in #t6;
+static field self::A v_postfix_mm = let final self::B #t9 = new self::B::•() in let final self::A #t10 = #t9.{self::B::a} in let final core::double #t11 = #t9.{self::B::a} = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);
-                                                              ^" in let final core::double #t16 = #t13.{self::A::-}(1) in null in #t13;
+                                                              ^" in #t10.{self::A::-}(1) as{TypeError} <BottomType>in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
index eb2c4e2..3089e9a 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
@@ -11,8 +11,8 @@
 
 static field core::int i;
 static field core::String s;
-static field core::String x = self::i = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+static field core::String x = self::i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
 var /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;
-                                                             ^" in let final dynamic #t2 = self::s in null;
+                                                             ^" in self::s as{TypeError} core::int;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.transformed.expect
index ca548ee..90592a6 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.transformed.expect
@@ -4,8 +4,8 @@
 
 static field core::int i;
 static field core::String s;
-static field core::String x = self::i = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+static field core::String x = self::i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
 var /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;
-                                                             ^" in let final core::String #t2 = self::s in null;
+                                                             ^" in self::s as{TypeError} <BottomType>;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
index b3fbf5b..980a78b 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
@@ -28,19 +28,19 @@
 }
 static method test(core::int i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i = /*@error=InvalidAssignment*/ s;
-                                   ^" in let final dynamic #t2 = s in null;
+                                   ^" in s as{TypeError} core::int;
   i.{core::num::==}(null) ?{core::int} i = 1 : null;
-  i.{core::num::==}(null) ?{core::Object} i = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i.{core::num::==}(null) ?{core::Object} i = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i ??= /*@error=InvalidAssignment*/ s;
-                                     ^" in let final dynamic #t4 = s in null : null;
+                                     ^" in s as{TypeError} core::int : null;
   a = new self::A::•();
-  a = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
+  a = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
 Try changing the type of the left hand side, or casting the right hand side to '#lib1::A'.
   a /*@error=InvalidAssignment*/ += 1;
-                                 ^" in let final dynamic #t6 = a.{self::A::+}(1) in null;
+                                 ^" in a.{self::A::+}(1) as{TypeError} self::A;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.transformed.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.transformed.expect
index c9eaa51..fd3d79d 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.transformed.expect
@@ -11,19 +11,19 @@
 }
 static method test(core::int i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i = /*@error=InvalidAssignment*/ s;
-                                   ^" in let final core::String #t2 = s in null;
+                                   ^" in s as{TypeError} core::int;
   i.{core::num::==}(null) ?{core::int} i = 1 : null;
-  i.{core::num::==}(null) ?{core::Object} i = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i.{core::num::==}(null) ?{core::Object} i = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i ??= /*@error=InvalidAssignment*/ s;
-                                     ^" in let final core::String #t4 = s in null : null;
+                                     ^" in s as{TypeError} core::int : null;
   a = new self::A::•();
-  a = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
+  a = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
 Try changing the type of the left hand side, or casting the right hand side to '#lib1::A'.
   a /*@error=InvalidAssignment*/ += 1;
-                                 ^" in let final core::String #t6 = a.{self::A::+}(1) in null;
+                                 ^" in a.{self::A::+}(1) as{TypeError} self::A;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/invalid_cast.dart.strong.expect b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
index dba87e5..e06cf93 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
@@ -74,44 +74,44 @@
 static method topLevelFunction(core::int i) → void {}
 static method bad() → dynamic {
   function localFunction(core::int i) → void {}
-  core::List<core::int> a = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
+  core::List<core::int> a = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
   List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];
-                                                           ^" in let final dynamic #t2 = <core::Object>[] in null;
-  core::Map<core::int, core::String> b = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+                                                           ^" in <core::Object>[];
+  core::Map<core::int, core::String> b = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};
-                                                                         ^" in let final dynamic #t4 = <core::Object, core::String>{} in null;
-  core::Map<core::int, core::String> c = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+                                                                         ^" in <core::Object, core::String>{};
+  core::Map<core::int, core::String> c = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};
-                                                                      ^" in let final dynamic #t6 = <core::int, core::Object>{} in null;
-  (core::Object) → core::int d = let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
+                                                                      ^" in <core::int, core::Object>{};
+  (core::Object) → core::int d = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
 Change the type of the function expression or the context in which it is used.
   int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;
-                                                              ^" in let final dynamic #t8 = (core::int i) → core::int => i in null;
+                                                              ^" in (core::int i) → core::int => i;
   self::D e = self::C::fact() as{TypeError} self::D;
   self::D f = new self::D::•() as{TypeError} self::D;
-  self::D g = let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+  self::D g = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
 Change the type of the object being constructed or the context in which it is used.
   D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();
-                                          ^" in let final dynamic #t10 = new self::C::nonFact() in null;
-  self::D h = let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+                                          ^" in new self::C::nonFact();
+  self::D h = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
 Change the type of the object being constructed or the context in which it is used.
   D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();
-                                          ^" in let final dynamic #t12 = new self::C::nonFact2() in null;
-  (core::Object) → void i = let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+                                          ^" in new self::C::nonFact2();
+  (core::Object) → void i = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the method or the context in which it is used.
       C. /*@error=InvalidCastStaticMethod*/ staticFunction;
-                                            ^" in let final dynamic #t14 = self::C::staticFunction in null;
-  (core::Object) → void j = let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+                                            ^" in self::C::staticFunction;
+  (core::Object) → void j = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the function or the context in which it is used.
       j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;
-                                                 ^" in let final dynamic #t16 = self::topLevelFunction in null;
-  (core::Object) → void k = let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+                                                 ^" in self::topLevelFunction;
+  (core::Object) → void k = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the function or the context in which it is used.
   void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;
-                                                                ^" in let final dynamic #t18 = localFunction in null;
+                                                                ^" in localFunction;
 }
 static method ok() → dynamic {
   function localFunction(core::int i) → void {}
diff --git a/pkg/front_end/testcases/invalid_cast.dart.strong.transformed.expect b/pkg/front_end/testcases/invalid_cast.dart.strong.transformed.expect
index d720b90..f35c1f5 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.transformed.expect
@@ -27,44 +27,44 @@
 static method topLevelFunction(core::int i) → void {}
 static method bad() → dynamic {
   function localFunction(core::int i) → void {}
-  core::List<core::int> a = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
+  core::List<core::int> a = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
   List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];
-                                                           ^" in let final core::List<core::Object> #t2 = <core::Object>[] in null;
-  core::Map<core::int, core::String> b = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+                                                           ^" in <core::Object>[];
+  core::Map<core::int, core::String> b = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};
-                                                                         ^" in let final core::Map<core::Object, core::String> #t4 = <core::Object, core::String>{} in null;
-  core::Map<core::int, core::String> c = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+                                                                         ^" in <core::Object, core::String>{};
+  core::Map<core::int, core::String> c = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};
-                                                                      ^" in let final core::Map<core::int, core::Object> #t6 = <core::int, core::Object>{} in null;
-  (core::Object) → core::int d = let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
+                                                                      ^" in <core::int, core::Object>{};
+  (core::Object) → core::int d = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
 Change the type of the function expression or the context in which it is used.
   int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;
-                                                              ^" in let final (core::int) → core::int #t8 = (core::int i) → core::int => i in null;
+                                                              ^" in (core::int i) → core::int => i;
   self::D e = self::C::fact() as{TypeError} self::D;
   self::D f = new self::D::•() as{TypeError} self::D;
-  self::D g = let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+  self::D g = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
 Change the type of the object being constructed or the context in which it is used.
   D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();
-                                          ^" in let final self::C #t10 = new self::C::nonFact() in null;
-  self::D h = let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+                                          ^" in new self::C::nonFact();
+  self::D h = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
 Change the type of the object being constructed or the context in which it is used.
   D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();
-                                          ^" in let final self::C #t12 = new self::C::nonFact2() in null;
-  (core::Object) → void i = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+                                          ^" in new self::C::nonFact2();
+  (core::Object) → void i = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the method or the context in which it is used.
       C. /*@error=InvalidCastStaticMethod*/ staticFunction;
-                                            ^" in let final (core::int) → void #t14 = self::C::staticFunction in null;
-  (core::Object) → void j = let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+                                            ^" in self::C::staticFunction;
+  (core::Object) → void j = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the function or the context in which it is used.
       j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;
-                                                 ^" in let final (core::int) → void #t16 = self::topLevelFunction in null;
-  (core::Object) → void k = let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+                                                 ^" in self::topLevelFunction;
+  (core::Object) → void k = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the function or the context in which it is used.
   void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;
-                                                                ^" in let final (core::int) → void #t18 = localFunction in null;
+                                                                ^" in localFunction;
 }
 static method ok() → dynamic {
   function localFunction(core::int i) → void {}
diff --git a/pkg/front_end/testcases/invalid_type.dart.strong.expect b/pkg/front_end/testcases/invalid_type.dart.strong.expect
index b5095ee..3cd8da3 100644
--- a/pkg/front_end/testcases/invalid_type.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_type.dart.strong.expect
@@ -35,7 +35,7 @@
 }
 static method test() → dynamic {
   (null as invalid-type).bar();
-  let final dynamic #t1 = null in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'dart.core::Null'.
+  let final dynamic #t1 = null in invalid-expression "pkg/front_end/testcases/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'dart.core::Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'bar'.
   null.bar();
        ^^^";
diff --git a/pkg/front_end/testcases/missing_constructor.dart.direct.expect b/pkg/front_end/testcases/missing_constructor.dart.direct.expect
index a886bd4..5efe451 100644
--- a/pkg/front_end/testcases/missing_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/missing_constructor.dart.direct.expect
@@ -35,18 +35,18 @@
 }
 class Sub extends self::Super {
   constructor •() → self::Sub
-    : final dynamic #t1 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t1 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
   constructor foo() → self::Sub
-    : final dynamic #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super.foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super.foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
 }
 class Bad extends core::Object {
   constructor foo() → self::Bad
-    : final dynamic #t3 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bad, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t3 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bad, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
   constructor bar() → self::Bad
-    : final dynamic #t4 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bad.baz, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t4 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bad.baz, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
 }
 class M extends core::Object {
@@ -61,10 +61,10 @@
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
   constructor •() → self::MixinApplication
-    : final dynamic #t5 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t5 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
   constructor foo() → self::MixinApplication
-    : final dynamic #t6 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super.foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t6 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super.foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/missing_constructor.dart.direct.transformed.expect b/pkg/front_end/testcases/missing_constructor.dart.direct.transformed.expect
index 37a1c85..0981c897 100644
--- a/pkg/front_end/testcases/missing_constructor.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/missing_constructor.dart.direct.transformed.expect
@@ -9,18 +9,18 @@
 }
 class Sub extends self::Super {
   constructor •() → self::Sub
-    : final dynamic #t1 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t1 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
   constructor foo() → self::Sub
-    : final dynamic #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super.foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super.foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
 }
 class Bad extends core::Object {
   constructor foo() → self::Bad
-    : final dynamic #t3 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bad, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t3 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bad, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
   constructor bar() → self::Bad
-    : final dynamic #t4 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bad.baz, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t4 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bad.baz, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
 }
 class M extends core::Object {
@@ -35,10 +35,10 @@
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
   constructor •() → self::MixinApplication
-    : final dynamic #t5 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t5 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
   constructor foo() → self::MixinApplication
-    : final dynamic #t6 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super.foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
+    : final dynamic #t6 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Super.foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/named_function_scope.dart.direct.expect b/pkg/front_end/testcases/named_function_scope.dart.direct.expect
index b6b2d79..f72549c 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.direct.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.direct.expect
@@ -128,12 +128,12 @@
   }
   {
     self::V v;
-    dynamic V = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
+    dynamic V = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
     var /*@error=DuplicatedNamePreviouslyUsed*/ V = null;
-                                                ^" in let final dynamic #t2 = null in null;
+                                                ^" in null;
   }
   {
-    dynamic x = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
+    dynamic x = let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
         T() {};
         ^" in let final () → self::T T = () → self::T {} in T;
   }
@@ -143,7 +143,7 @@
                                               ^";
   }
   {
-    dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
+    dynamic x = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
         ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
diff --git a/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect b/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
index 582b0c0..08b6a24 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.direct.transformed.expect
@@ -47,12 +47,12 @@
   }
   {
     self::V v;
-    dynamic V = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
+    dynamic V = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
     var /*@error=DuplicatedNamePreviouslyUsed*/ V = null;
-                                                ^" in let final dynamic #t2 = null in null;
+                                                ^" in null;
   }
   {
-    dynamic x = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
+    dynamic x = let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
         T() {};
         ^" in let final () → self::T T = () → self::T {} in T;
   }
@@ -62,7 +62,7 @@
                                               ^";
   }
   {
-    dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
+    dynamic x = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
         ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
diff --git a/pkg/front_end/testcases/named_function_scope.dart.strong.expect b/pkg/front_end/testcases/named_function_scope.dart.strong.expect
index cf7a297..e178628 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.strong.expect
@@ -132,12 +132,12 @@
   }
   {
     self::V v;
-    dynamic V = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
+    dynamic V = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
     var /*@error=DuplicatedNamePreviouslyUsed*/ V = null;
-                                                ^" in let final dynamic #t2 = null in null;
+                                                ^" in null;
   }
   {
-    dynamic x = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
+    dynamic x = let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
         T() {};
         ^" in let final () → self::T T = () → self::T {} in T;
   }
@@ -147,7 +147,7 @@
                                               ^" as{TypeError} self::V;
   }
   {
-    dynamic x = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
+    dynamic x = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
         ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
diff --git a/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect b/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
index 4c5b73f..4405962 100644
--- a/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/named_function_scope.dart.strong.transformed.expect
@@ -51,12 +51,12 @@
   }
   {
     self::V v;
-    dynamic V = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
+    dynamic V = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/named_function_scope.dart:38:49: Error: Can't declare 'V' because it was already used in this scope.
     var /*@error=DuplicatedNamePreviouslyUsed*/ V = null;
-                                                ^" in let final<BottomType> #t2 = null in null;
+                                                ^" in null;
   }
   {
-    dynamic x = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
+    dynamic x = let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:48:9: Error: Can't declare 'T' because it was already used in this scope.
         T() {};
         ^" in let final () → self::T T = () → self::T {} in T;
   }
@@ -66,7 +66,7 @@
                                               ^" as{TypeError} self::V;
   }
   {
-    dynamic x = let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
+    dynamic x = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/named_function_scope.dart:62:9: Error: 'T' is already declared in this scope.
         T< /*@context=DuplicatedDeclarationCause*/ T>() {};
         ^" in let final <T extends core::Object = dynamic>() → dynamic T = <T extends core::Object = dynamic>() → dynamic {} in T;
   }
diff --git a/pkg/front_end/testcases/rasta/static.dart.direct.expect b/pkg/front_end/testcases/rasta/static.dart.direct.expect
index db9d31a..2640eb8 100644
--- a/pkg/front_end/testcases/rasta/static.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.direct.expect
@@ -165,28 +165,28 @@
     self::use(self::Foo::staticFunction);
     self::Foo::staticGetter;
     self::use(self::Foo::staticGetter);
-    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let final dynamic #t1 = self::Foo::staticConstant in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t1.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t1);
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t1 = self::Foo::staticConstant in let final dynamic #t2 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t1.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t1);
     self::Foo::staticField = self::Foo::staticField.+(1);
     self::use(let final dynamic #t3 = self::Foo::staticField in let final dynamic #t4 = self::Foo::staticField = #t3.+(1) in #t3);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let final dynamic #t5 = self::Foo::staticFunction in let final dynamic #t6 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t5.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t5);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final dynamic #t8 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t7.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t7);
-    self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
-    self::use(let final dynamic #t9 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in let final dynamic #t10 = self::Foo::staticSetter = #t9.+(1) in #t9);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t5 = self::Foo::staticFunction in let final dynamic #t6 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t5.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t5);
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final dynamic #t8 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t7.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t7);
+    self::Foo::staticSetter = (let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
+    self::use(let final dynamic #t9 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in let final dynamic #t10 = self::Foo::staticSetter = #t9.+(1) in #t9);
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticField = self::Foo::staticField.+(1);
     self::use(self::Foo::staticField = self::Foo::staticField.+(1));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-    self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
-    self::use(self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    self::Foo::staticSetter = (let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
+    self::use(self::Foo::staticSetter = (let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1));
     self::Foo::staticConstant.call();
     self::use(self::Foo::staticConstant.call());
     self::Foo::staticField.call();
@@ -195,28 +195,28 @@
     self::use(self::Foo::staticFunction());
     self::Foo::staticGetter.call();
     self::use(self::Foo::staticGetter.call());
-    (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call();
-    self::use((throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call());
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call();
+    self::use((let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call());
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticField = 87;
     self::use(self::Foo::staticField = 87);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticSetter = 87;
     self::use(self::Foo::staticSetter = 87);
-    self::Foo::staticConstant.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
-    self::use(let final dynamic #t11 = self::Foo::staticConstant in #t11.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t11);
+    self::Foo::staticConstant.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t11 = self::Foo::staticConstant in #t11.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t11);
     self::Foo::staticField.==(null) ? self::Foo::staticField = 87 : null;
     self::use(let final dynamic #t12 = self::Foo::staticField in #t12.==(null) ? self::Foo::staticField = 87 : #t12);
-    self::Foo::staticFunction.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
-    self::use(let final dynamic #t13 = self::Foo::staticFunction in #t13.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t13);
-    self::Foo::staticGetter.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
-    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t14);
-    (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).==(null) ? self::Foo::staticSetter = 87 : null;
-    self::use(let final dynamic #t15 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t15.==(null) ? self::Foo::staticSetter = 87 : #t15);
+    self::Foo::staticFunction.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t13 = self::Foo::staticFunction in #t13.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t13);
+    self::Foo::staticGetter.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t14);
+    (let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).==(null) ? self::Foo::staticSetter = 87 : null;
+    self::use(let final dynamic #t15 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t15.==(null) ? self::Foo::staticSetter = 87 : #t15);
   }
   on core::NoSuchMethodError catch(no-exception-var) {
   }
diff --git a/pkg/front_end/testcases/rasta/static.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/static.dart.direct.transformed.expect
index 4ea88e5..5db4e42 100644
--- a/pkg/front_end/testcases/rasta/static.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.direct.transformed.expect
@@ -27,28 +27,28 @@
     self::use(self::Foo::staticFunction);
     self::Foo::staticGetter;
     self::use(self::Foo::staticGetter);
-    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let final dynamic #t1 = self::Foo::staticConstant in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t1.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t1);
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t1 = self::Foo::staticConstant in let final dynamic #t2 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t1.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t1);
     self::Foo::staticField = self::Foo::staticField.+(1);
     self::use(let final dynamic #t3 = self::Foo::staticField in let final dynamic #t4 = self::Foo::staticField = #t3.+(1) in #t3);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let final dynamic #t5 = self::Foo::staticFunction in let final dynamic #t6 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t5.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t5);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final dynamic #t8 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t7.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t7);
-    self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
-    self::use(let final dynamic #t9 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in let final dynamic #t10 = self::Foo::staticSetter = #t9.+(1) in #t9);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t5 = self::Foo::staticFunction in let final dynamic #t6 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t5.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t5);
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final dynamic #t8 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t7.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t7);
+    self::Foo::staticSetter = (let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
+    self::use(let final dynamic #t9 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in let final dynamic #t10 = self::Foo::staticSetter = #t9.+(1) in #t9);
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticConstant.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticField = self::Foo::staticField.+(1);
     self::use(self::Foo::staticField = self::Foo::staticField.+(1));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-    self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
-    self::use(self::Foo::staticSetter = (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticFunction.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[self::Foo::staticGetter.+(1)]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    self::Foo::staticSetter = (let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1);
+    self::use(self::Foo::staticSetter = (let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).+(1));
     self::Foo::staticConstant.call();
     self::use(self::Foo::staticConstant.call());
     self::Foo::staticField.call();
@@ -57,28 +57,28 @@
     self::use(self::Foo::staticFunction());
     self::Foo::staticGetter.call();
     self::use(self::Foo::staticGetter.call());
-    (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call();
-    self::use((throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call());
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call();
+    self::use((let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).call());
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticField = 87;
     self::use(self::Foo::staticField = 87);
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    self::use(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    self::use(let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     self::Foo::staticSetter = 87;
     self::use(self::Foo::staticSetter = 87);
-    self::Foo::staticConstant.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
-    self::use(let final dynamic #t11 = self::Foo::staticConstant in #t11.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t11);
+    self::Foo::staticConstant.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t11 = self::Foo::staticConstant in #t11.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticConstant, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t11);
     self::Foo::staticField.==(null) ? self::Foo::staticField = 87 : null;
     self::use(let final dynamic #t12 = self::Foo::staticField in #t12.==(null) ? self::Foo::staticField = 87 : #t12);
-    self::Foo::staticFunction.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
-    self::use(let final dynamic #t13 = self::Foo::staticFunction in #t13.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t13);
-    self::Foo::staticGetter.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
-    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14.==(null) ? let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t14);
-    (let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).==(null) ? self::Foo::staticSetter = 87 : null;
-    self::use(let final dynamic #t15 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t15.==(null) ? self::Foo::staticSetter = 87 : #t15);
+    self::Foo::staticFunction.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t13 = self::Foo::staticFunction in #t13.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t13);
+    self::Foo::staticGetter.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : null;
+    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14.==(null) ? let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticGetter, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[87]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) : #t14);
+    (let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).==(null) ? self::Foo::staticSetter = 87 : null;
+    self::use(let final dynamic #t15 = let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#staticSetter, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in #t15.==(null) ? self::Foo::staticSetter = 87 : #t15);
   }
   on core::NoSuchMethodError catch(no-exception-var) {
   }
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
index 1d31f44..6f451c8 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
@@ -97,7 +97,7 @@
       core::print(this.key);
     }
     for (final dynamic #t2 in x) {
-      let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t2]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+      let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t2]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
       core::print(self::Fisk);
     }
     for (final dynamic #t3 in x) {
@@ -109,7 +109,7 @@
             ^^^^^^^^^^");
     }
     for (final dynamic #t4 in x) {
-      let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t4]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+      let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t4]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
       core::print(() → void);
     }
     for (final dynamic #t5 = let dynamic _ = null in 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.
@@ -122,11 +122,11 @@
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
   for (final dynamic #t6 in arguments) {
-    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t6]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t6]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
   }
   for (final dynamic #t7 in arguments) {
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t7]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t7]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
     core::print(self::Fisk);
   }
   for (final dynamic #t8 in arguments) {
@@ -138,12 +138,12 @@
           ^^^^^^^^^^");
   }
   for (final dynamic #t9 in arguments) {
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t9]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t9]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
     core::print(() → void);
   }
   for (final dynamic #t10 = let dynamic _ = null in 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) {
        ^" in arguments) {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
   }
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.transformed.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.transformed.expect
index 19ae243..3957542 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.transformed.expect
@@ -23,7 +23,7 @@
       core::print(this.key);
     }
     for (final dynamic #t2 in x) {
-      let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t2]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+      let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t2]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
       core::print(self::Fisk);
     }
     for (final dynamic #t3 in x) {
@@ -35,7 +35,7 @@
             ^^^^^^^^^^");
     }
     for (final dynamic #t4 in x) {
-      let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t4]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+      let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t4]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
       core::print(() → void);
     }
     for (final dynamic #t5 = let dynamic _ = null in 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.
@@ -48,11 +48,11 @@
 static method main(dynamic arguments) → dynamic {
   new self::Fisk::•();
   for (final dynamic #t6 in arguments) {
-    throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t6]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t6]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
   }
   for (final dynamic #t7 in arguments) {
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t7]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t7]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
     core::print(self::Fisk);
   }
   for (final dynamic #t8 in arguments) {
@@ -64,12 +64,12 @@
           ^^^^^^^^^^");
   }
   for (final dynamic #t9 in arguments) {
-    let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t9]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+    let dynamic _ = null in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[#t9]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
     core::print(() → void);
   }
   for (final dynamic #t10 = let dynamic _ = null in 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) {
        ^" in arguments) {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
   }
 }
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
index d498a68..544de0c 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
@@ -12,10 +12,10 @@
 class Foo<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl field self::Foo::T x;
   constructor from(core::String _init) → self::Foo<self::Foo::T>
-    : this self::Foo::_internal(x: let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'dart.core::String' can't be assigned to the parameter type '#lib1::Foo::T'.
+    : this self::Foo::_internal(x: let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'dart.core::String' can't be assigned to the parameter type '#lib1::Foo::T'.
 Try changing the type of the parameter, or casting the argument to '#lib1::Foo::T'.
   Foo.from(String _init) : this._internal(x: _init);
-                                             ^" in let final dynamic #t2 = _init in null)
+                                             ^" in _init as{TypeError} <BottomType>)
     ;
   constructor _internal({self::Foo::T x = null}) → self::Foo<self::Foo::T>
     : self::Foo::x = x, super core::Object::•()
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
index 25c2b06..cbad080 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
@@ -5,10 +5,10 @@
 class Foo<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl field self::Foo::T x;
   constructor from(core::String _init) → self::Foo<self::Foo::T>
-    : this self::Foo::_internal(x: let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'dart.core::String' can't be assigned to the parameter type '#lib1::Foo::T'.
+    : this self::Foo::_internal(x: let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'dart.core::String' can't be assigned to the parameter type '#lib1::Foo::T'.
 Try changing the type of the parameter, or casting the argument to '#lib1::Foo::T'.
   Foo.from(String _init) : this._internal(x: _init);
-                                             ^" in let final dynamic #t2 = _init in null)
+                                             ^" in _init as{TypeError} <BottomType>)
     ;
   constructor _internal({self::Foo::T x = null}) → self::Foo<self::Foo::T>
     : self::Foo::x = x, super core::Object::•()
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
index e64910f..5724ac3 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
@@ -75,5 +75,5 @@
 static get x() → dynamic
   return null;
 static method main() → void {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${self::x.*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${self::x.*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29976.dart.direct.transformed.expect
index 286bb14..1e80af7 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.direct.transformed.expect
@@ -38,5 +38,5 @@
 static get x() → dynamic
   return null;
 static method main() → void {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${self::x.*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#f, 32, const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>["x${self::x.*("'")}"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29982.dart.direct.expect
index 861561d..409dd9a 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.direct.expect
@@ -74,5 +74,5 @@
 
 static method main() → dynamic {
   dynamic eh = <dynamic, dynamic>{"\u0233h": "\u0233h"};
-  core::print("${eh.[](throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#éh, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))))}");
+  core::print("${eh.[](let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#éh, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))))}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29982.dart.direct.transformed.expect
index 3c85c4a..cf55a97 100644
--- a/pkg/front_end/testcases/regress/issue_29982.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.direct.transformed.expect
@@ -37,5 +37,5 @@
 
 static method main() → dynamic {
   dynamic eh = <dynamic, dynamic>{"\u0233h": "\u0233h"};
-  core::print("${eh.[](throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#éh, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))))}");
+  core::print("${eh.[](let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#éh, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))))}");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
index adf51b4..b932140 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
@@ -16,9 +16,9 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int i = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
+           ^" in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))); ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
index 01ccbc1..cf64ae4 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
@@ -3,9 +3,9 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int i = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
+           ^" in let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))); ; false) {
   }
 }
 static method main() → dynamic {}
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 c6e236f..2b6c35c 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -16,11 +16,11 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int i = (let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int i = (let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+           ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
   for (int i = i;; false) {}
-               ^" in null) as{TypeError} core::int; ; false) {
+               ^") as{TypeError} 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 8842e30..f86f79b 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
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  for (core::int i = (let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (core::int i = (let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+           ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
   for (int i = i;; false) {}
-               ^" in null) as{TypeError} core::int; ; false) {
+               ^") as{TypeError} core::int; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
index d6e6130..1e02c8b 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
@@ -29,6 +29,6 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29985.dart.direct.transformed.expect
index 52f90dd..0f35dbc 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.direct.transformed.expect
@@ -14,6 +14,6 @@
 import "dart:core" as core;
 
 static method bad() → dynamic {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
index 08d514c..a817905 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
@@ -66,7 +66,7 @@
     ;
 }
 class C extends core::Object {
-  field dynamic f = let final dynamic #t1 = core::Map<dynamic, dynamic> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'dart.core::Type'.
+  field dynamic f = let final dynamic #t1 = core::Map<dynamic, dynamic> in invalid-expression "pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'dart.core::Type'.
 Try correcting the name to the name of an existing method, or defining a method named '<'.
   var f = Map<A, B> {};
              ^";
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
index aadf35a..eaf1b91 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
@@ -37,7 +37,7 @@
     ;
 }
 class C extends core::Object {
-  field dynamic f = let final core::Type #t1 = core::Map<dynamic, dynamic> in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'dart.core::Type'.
+  field dynamic f = let final core::Type #t1 = core::Map<dynamic, dynamic> in invalid-expression "pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'dart.core::Type'.
 Try correcting the name to the name of an existing method, or defining a method named '<'.
   var f = Map<A, B> {};
              ^";
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31188.dart.direct.expect
index b43e742..dd4cc1d 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.direct.expect
@@ -34,6 +34,6 @@
 import self as self;
 import "dart:core" as core;
 
-static field invalid-type T = core::Map<dynamic, dynamic>.<(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#A, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+static field invalid-type T = core::Map<dynamic, dynamic>.<(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#A, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
 static field invalid-type B;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.direct.transformed.expect
index 17bbd41..d24fdb3 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.direct.transformed.expect
@@ -12,6 +12,6 @@
 import self as self;
 import "dart:core" as core;
 
-static field invalid-type T = core::Map<dynamic, dynamic>.<(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#A, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+static field invalid-type T = core::Map<dynamic, dynamic>.<(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#A, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
 static field invalid-type B;
 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 023f60a..96eebb1 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
@@ -47,7 +47,7 @@
 import self as self;
 import "dart:core" as core;
 
-static field invalid-type T = let final dynamic #t1 = core::Map<dynamic, dynamic> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'dart.core::Type'.
+static field invalid-type T = let final dynamic #t1 = core::Map<dynamic, dynamic> in invalid-expression "pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'dart.core::Type'.
 Try correcting the name to the name of an existing method, or defining a method named '<'.
 type T = Map<A, B>
             ^";
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 051d017..cb85779 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
@@ -20,7 +20,7 @@
 import self as self;
 import "dart:core" as core;
 
-static field invalid-type T = let final core::Type #t1 = core::Map<dynamic, dynamic> in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'dart.core::Type'.
+static field invalid-type T = let final core::Type #t1 = core::Map<dynamic, dynamic> in invalid-expression "pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'dart.core::Type'.
 Try correcting the name to the name of an existing method, or defining a method named '<'.
 type T = Map<A, B>
             ^";
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
index 67df7a5..f670776 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
@@ -7,11 +7,6 @@
 // pkg/front_end/testcases/regress/issue_31299.dart:10:3: Context: Found this candidate, but the arguments don't match.
 //   A.foo() : m = 2;
 //   ^^^
-//
-// pkg/front_end/testcases/regress/issue_31299.dart:18:12: Warning: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-//   new A.foo(1, 2);
-//            ^
 
 library;
 import self as self;
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
index 61450ea..3d0577f 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
@@ -11,22 +11,12 @@
 // pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
 //   new A().foo();
 //              ^
-//
-// pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-//   new A.foo(1, 2);
-//            ^
 
 // Unhandled errors:
 //
 // pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
 //   new A().foo();
 //              ^
-//
-// pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
-// Try removing the extra positional arguments.
-//   new A.foo(1, 2);
-//            ^
 
 library;
 import self as self;
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
index 4e96b8a..cb382eb 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
@@ -27,8 +27,8 @@
 }
 static method main() → dynamic {
   self::Foo instance = new self::Foo::•();
-  instance.{self::Foo::self} = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_32200.dart:13:19: Error: A value of type '#lib1::Foo' can't be assigned to a variable of type 'invalid-type'.
+  instance.{self::Foo::self} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_32200.dart:13:19: Error: A value of type '#lib1::Foo' can't be assigned to a variable of type 'invalid-type'.
 Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
   instance.self = instance;
-                  ^" in let final dynamic #t2 = instance in null;
+                  ^" in instance as{TypeError} invalid-type;
 }
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_32200.dart.strong.transformed.expect
index e179dfd..6b54632 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.strong.transformed.expect
@@ -16,8 +16,8 @@
 }
 static method main() → dynamic {
   self::Foo instance = new self::Foo::•();
-  instance.{self::Foo::self} = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_32200.dart:13:19: Error: A value of type '#lib1::Foo' can't be assigned to a variable of type 'invalid-type'.
+  instance.{self::Foo::self} = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_32200.dart:13:19: Error: A value of type '#lib1::Foo' can't be assigned to a variable of type 'invalid-type'.
 Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
   instance.self = instance;
-                  ^" in let final self::Foo #t2 = instance in null;
+                  ^" in instance as{TypeError} invalid-type;
 }
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect b/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect
index 68f79ea..eef01df 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect
@@ -20,18 +20,6 @@
 // pkg/front_end/testcases/regress/issue_32972.dart:19:7: Context: The class 'Bar' has a constructor that takes no arguments.
 // class Bar<X, Y> {}
 //       ^
-//
-// pkg/front_end/testcases/regress/issue_32972.dart:22:3: Warning: Expected 1 type arguments.
-//   foo<String, String>("hello world");
-//   ^
-//
-// pkg/front_end/testcases/regress/issue_32972.dart:24:7: Warning: Expected 1 type arguments.
-//   Foo.foo<int, int>(42);
-//       ^
-//
-// pkg/front_end/testcases/regress/issue_32972.dart:29:7: Warning: Expected 2 type arguments.
-//   new Bar<String>();
-//       ^
 
 library;
 import self as self;
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect
index a96c187..d6a1208 100644
--- a/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect
@@ -21,39 +21,15 @@
 // class Bar<X, Y> {}
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
-//   foo<String, String>("hello world");
-//   ^
-//
-// pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
-//   Foo.foo<int, int>(42);
-//       ^
-//
 // pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
 //   f.bar<double, double>(42.42);
 //     ^
-//
-// pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
-//   new Bar<String>();
-//       ^
 
 // Unhandled errors:
 //
-// pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
-//   foo<String, String>("hello world");
-//   ^
-//
-// pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
-//   Foo.foo<int, int>(42);
-//       ^
-//
 // pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
 //   f.bar<double, double>(42.42);
 //     ^
-//
-// pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
-//   new Bar<String>();
-//       ^
 
 library;
 import self as self;
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.direct.expect b/pkg/front_end/testcases/regress/issue_33452.dart.direct.expect
index 1b94419..a0ff133 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.direct.expect
@@ -34,10 +34,10 @@
     ;
 }
 static method main() → dynamic {
-  dynamic x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String, core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#NonExistingClass, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  dynamic x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String, core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#NonExistingClass, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_33452.dart.direct.transformed.expect
index 22a417b..038ecc7 100644
--- a/pkg/front_end/testcases/regress/issue_33452.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.direct.transformed.expect
@@ -8,10 +8,10 @@
     ;
 }
 static method main() → dynamic {
-  dynamic x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String, core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  x = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#NonExistingClass, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  dynamic x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#ExistingClass.nonExistingConstructor, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String, core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  x = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#NonExistingClass, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect b/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
index 0bfa5a5..1e28b8c 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
@@ -41,7 +41,7 @@
 }
 static method main() → dynamic {
   self::C c = new self::C::•();
-  let final dynamic #t1 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
+  let final dynamic #t1 = c in invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
   c.C = 5;
     ^";
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
index fd60d26..175d30e 100644
--- a/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
@@ -26,7 +26,7 @@
 }
 static method main() → dynamic {
   self::C c = new self::C::•();
-  let final self::C #t1 = c in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
+  let final self::C #t1 = c in invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
   c.C = 5;
     ^";
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.strong.expect b/pkg/front_end/testcases/regress/issue_34563.dart.strong.expect
index c1eaeba..03ab446 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.strong.expect
@@ -94,18 +94,18 @@
 }
 static method main() → dynamic {
   self::C2 c2 = new self::C2::•();
-  (let final dynamic #t1 = c2 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class '#lib1::C2'.
+  (let final dynamic #t1 = c2 in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class '#lib1::C2'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c2.m + c2.c;
-     ^").+(let final dynamic #t2 = c2 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class '#lib1::C2'.
+     ^").+(let final dynamic #t2 = c2 in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class '#lib1::C2'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
             ^");
   self::C3 c3 = new self::C3::•();
-  (let final dynamic #t3 = c3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class '#lib1::C3'.
+  (let final dynamic #t3 = c3 in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class '#lib1::C3'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c3.m + c3.c;
-     ^").+(let final dynamic #t4 = c3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class '#lib1::C3'.
+     ^").+(let final dynamic #t4 = c3 in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class '#lib1::C3'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c3.m + c3.c;
             ^");
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_34563.dart.strong.transformed.expect
index 8301f54..697afbc 100644
--- a/pkg/front_end/testcases/regress/issue_34563.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.strong.transformed.expect
@@ -56,18 +56,18 @@
 }
 static method main() → dynamic {
   self::C2 c2 = new self::C2::•();
-  (let final self::C2 #t1 = c2 in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class '#lib1::C2'.
+  (let final self::C2 #t1 = c2 in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class '#lib1::C2'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c2.m + c2.c;
-     ^").+(let final self::C2 #t2 = c2 in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class '#lib1::C2'.
+     ^").+(let final self::C2 #t2 = c2 in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class '#lib1::C2'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c2.m + c2.c;
             ^");
   self::C3 c3 = new self::C3::•();
-  (let final self::C3 #t3 = c3 in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class '#lib1::C3'.
+  (let final self::C3 #t3 = c3 in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class '#lib1::C3'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
   c3.m + c3.c;
-     ^").+(let final self::C3 #t4 = c3 in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class '#lib1::C3'.
+     ^").+(let final self::C3 #t4 = c3 in invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class '#lib1::C3'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
   c3.m + c3.c;
             ^");
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index b8cd86e..baa65fa 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -27,10 +27,10 @@
     ;
   method f<generic-covariant-impl U extends self::C::T = self::C::T>(self::C::f::U x) → void {}
   method g1<generic-covariant-impl U extends self::C::T = self::C::T>() → void {
-    this.{self::C::f}<self::C::g1::U>(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'test::C::g1::U'.
+    this.{self::C::f}<self::C::g1::U>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'test::C::g1::U'.
 Try changing the type of the parameter, or casting the argument to 'test::C::g1::U'.
     this.f<U>(1.5);
-              ^" in let final dynamic #t2 = 1.5 in null);
+              ^" in 1.5 as{TypeError} <BottomType>);
   }
 }
 static method g2(self::C<core::Object> c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
index 2d982f1..e1bfe11 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
@@ -15,10 +15,10 @@
     ;
   method f<generic-covariant-impl U extends self::C::T = self::C::T>(self::C::f::U x) → void {}
   method g1<generic-covariant-impl U extends self::C::T = self::C::T>() → void {
-    this.{self::C::f}<self::C::g1::U>(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'test::C::g1::U'.
+    this.{self::C::f}<self::C::g1::U>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'dart.core::double' can't be assigned to the parameter type 'test::C::g1::U'.
 Try changing the type of the parameter, or casting the argument to 'test::C::g1::U'.
     this.f<U>(1.5);
-              ^" in let final core::double #t2 = 1.5 in null);
+              ^" in 1.5 as{TypeError} <BottomType>);
   }
 }
 static method g2(self::C<core::Object> c) → 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 70b44af..2aa0e56 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
@@ -53,17 +53,17 @@
   return 2;
 static method main() → void {
   self::D d = new self::D::•(new self::C::•<core::num>(self::numToInt));
-  let final self::D #t1 = d in #t1.{self::D::value} = let dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+  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:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
   d.value /*@checkReturn=(num) -> num*/ += 1;
-                                        ^" in let final dynamic #t3 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in null;
+                                        ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError} (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>(self::numToNum));
   self::expectTypeError(() → core::Null {
-    let final self::D #t4 = d in #t4.{self::D::value} = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+    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:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
     d.value /*@checkReturn=(num) -> num*/ += 1;
-                                          ^" in let final dynamic #t6 = #t4.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in null;
+                                          ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError} (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 017d625..740f0f4 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
@@ -41,17 +41,17 @@
   return 2;
 static method main() → void {
   self::D d = new self::D::•(new self::C::•<core::num>(self::numToInt));
-  let final self::D #t1 = d in #t1.{self::D::value} = let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+  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:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
   d.value /*@checkReturn=(num) -> num*/ += 1;
-                                        ^" in let final (core::num) → core::num #t3 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in null;
+                                        ^" in (#t1.{self::D::value}.{self::C::+}(1) as{TypeError} (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>(self::numToNum));
   self::expectTypeError(() → core::Null {
-    let final self::D #t4 = d in #t4.{self::D::value} = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+    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:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
     d.value /*@checkReturn=(num) -> num*/ += 1;
-                                          ^" in let final (core::num) → core::num #t6 = #t4.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in null;
+                                          ^" in (#t3.{self::D::value}.{self::C::+}(1) as{TypeError} (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 534f69a..61aebae 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
@@ -41,21 +41,21 @@
   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 dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 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:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
-                                                ^" in let final dynamic #t3 = new self::B::•<core::num>() in null);
-  self::B<(core::num) → void> y = let final self::C<core::num> #t4 = c in #t4.{self::C::x} = (#t4.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+                                                ^" 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:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
-                                                        ^" in let final dynamic #t6 = new self::B::•<core::num>() in null);
-  let final self::C<core::num> #t7 = c in (#t7.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+                                                        ^" 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:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
-                                                 ^" in let final dynamic #t9 = new self::B::•<core::num>() in null : null;
-  self::B<core::Object> z = let final self::C<core::num> #t10 = c in let final dynamic #t11 = #t10.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t11.{core::Object::==}(null) ?{self::B<core::Object>} #t10.{self::C::x} = let dynamic _ = null in let final dynamic #t12 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+                                                 ^" 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 dynamic #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:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
-                                                         ^" in let final dynamic #t13 = new self::B::•<core::num>() in null : #t11;
+                                                         ^" in new self::B::•<core::num>() as{TypeError} self::B<(core::num) → void> : #t8;
 }
 static method main() → dynamic {}
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 1f74ac1..d2500ea 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
@@ -19,21 +19,21 @@
   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<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 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:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
-                                                ^" in let final self::B<core::num> #t3 = new self::B::•<core::num>() in null);
-  self::B<(core::num) → void> y = let final self::C<core::num> #t4 = c in #t4.{self::C::x} = (#t4.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+                                                ^" 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:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
-                                                        ^" in let final self::B<core::num> #t6 = new self::B::•<core::num>() in null);
-  let final self::C<core::num> #t7 = c in (#t7.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let<BottomType> _ = null in let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+                                                        ^" 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:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
-                                                 ^" in let final self::B<core::num> #t9 = new self::B::•<core::num>() in null : null;
-  self::B<core::Object> z = let final self::C<core::num> #t10 = c in let final self::B<(core::num) → void> #t11 = #t10.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t11.{core::Object::==}(null) ?{self::B<core::Object>} #t10.{self::C::x} = let<BottomType> _ = null in let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+                                                 ^" 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:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
-                                                         ^" in let final self::B<core::num> #t13 = new self::B::•<core::num>() in null : #t11;
+                                                         ^" in new self::B::•<core::num>() as{TypeError} self::B<(core::num) → void> : #t8;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 951fc73..a4a10ac 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -49,7 +49,6 @@
 inference/downwards_inference_annotations_type_variable: Fail # Issue 28981
 inference/downwards_inference_on_function_of_t_using_the_t: Fail # Issue #29798
 inference/downwards_inference_on_list_literals_infer_downwards: RuntimeError
-inference/downwards_inference_yield_yield_star: TypeCheckError
 inference/future_then_explicit_future: Fail # Issue #30040
 inference/future_then_upwards: RuntimeError
 inference/future_then_upwards_2: RuntimeError
@@ -78,8 +77,10 @@
 inference_new/infer_assign_to_index_super_upwards: TypeCheckError
 inference_new/infer_assign_to_index_this_upwards: TypeCheckError
 inference_new/infer_assign_to_index_upwards: TypeCheckError
+inference_new/infer_assign_to_property_custom: TypeCheckError
 inference_new/infer_field_getter_setter_mismatch: TypeCheckError
 inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
+inference_new/invalid_assignment_during_toplevel_inference: TypeCheckError
 instantiate_to_bound/body_typedef_super_bounded_type: Fail # Issue 33444
 instantiate_to_bound/typedef_super_bounded_type: Fail # Issue 33444
 invalid_type: TypeCheckError
diff --git a/pkg/front_end/testcases/tabs.dart.direct.expect b/pkg/front_end/testcases/tabs.dart.direct.expect
index a304f47..71641b8 100644
--- a/pkg/front_end/testcases/tabs.dart.direct.expect
+++ b/pkg/front_end/testcases/tabs.dart.direct.expect
@@ -25,10 +25,10 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#one, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#two, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#three, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#four, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#five, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#one, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#two, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#three, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#four, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#five, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/tabs.dart.direct.transformed.expect b/pkg/front_end/testcases/tabs.dart.direct.transformed.expect
index b542e17..e5b77aa 100644
--- a/pkg/front_end/testcases/tabs.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/tabs.dart.direct.transformed.expect
@@ -3,10 +3,10 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#one, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#two, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#three, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#four, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
-  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#five, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#one, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#two, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#three, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#four, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#five, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index a685a4e..578f059 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -29,15 +29,15 @@
     : super core::Object::•()
     ;
   method method() → invalid-type
-    return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
 Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
   T.String method() => \"Hello, World!\";
-                       ^" in let final dynamic #t2 = "Hello, World!" in null;
+                       ^" in "Hello, World!" as{TypeError} invalid-type;
 }
 static method main() → dynamic {
-  core::String s = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
+  core::String s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   T.String s = new C().method();
-                       ^" in let final dynamic #t4 = new self::C::•<dynamic>().{self::C::method}() in null;
+                       ^" in new self::C::•<dynamic>().{self::C::method}() as{TypeError} core::String;
   core::print(s);
 }
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
index 8675e6d..040a5d2 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
@@ -13,15 +13,15 @@
     : super core::Object::•()
     ;
   method method() → invalid-type
-    return let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
 Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
   T.String method() => \"Hello, World!\";
-                       ^" in let final core::String #t2 = "Hello, World!" in null;
+                       ^" in "Hello, World!" as{TypeError} invalid-type;
 }
 static method main() → dynamic {
-  core::String s = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
+  core::String s = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   T.String s = new C().method();
-                       ^" in let final invalid-type #t4 = new self::C::•<dynamic>().{self::C::method}() in null;
+                       ^" in new self::C::•<dynamic>().{self::C::method}() as{TypeError} core::String;
   core::print(s);
 }
diff --git a/pkg/front_end/testcases/undefined.dart.strong.expect b/pkg/front_end/testcases/undefined.dart.strong.expect
index e1d8047..039a05f 100644
--- a/pkg/front_end/testcases/undefined.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined.dart.strong.expect
@@ -28,17 +28,17 @@
 }
 static method test(self::C c) → void {
   c.{self::C::x};
-  let final dynamic #t1 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.
+  let final dynamic #t1 = c in invalid-expression "pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c. /*@error=UndefinedGetter*/ y;
                                 ^";
   c.{self::C::f}();
-  let final dynamic #t2 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.
+  let final dynamic #t2 = c in invalid-expression "pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
   c. /*@error=UndefinedMethod*/ g();
                                 ^";
   c.{self::C::x} = null;
-  let final dynamic #t3 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.
+  let final dynamic #t3 = c in invalid-expression "pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
   c. /*@error=UndefinedSetter*/ y = null;
                                 ^";
diff --git a/pkg/front_end/testcases/undefined.dart.strong.transformed.expect b/pkg/front_end/testcases/undefined.dart.strong.transformed.expect
index 276f5c6..46675a7 100644
--- a/pkg/front_end/testcases/undefined.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/undefined.dart.strong.transformed.expect
@@ -11,17 +11,17 @@
 }
 static method test(self::C c) → void {
   c.{self::C::x};
-  let final self::C #t1 = c in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.
+  let final self::C #t1 = c in invalid-expression "pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c. /*@error=UndefinedGetter*/ y;
                                 ^";
   c.{self::C::f}();
-  let final self::C #t2 = c in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.
+  let final self::C #t2 = c in invalid-expression "pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
   c. /*@error=UndefinedMethod*/ g();
                                 ^";
   c.{self::C::x} = null;
-  let final self::C #t3 = c in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.
+  let final self::C #t3 = c in invalid-expression "pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
   c. /*@error=UndefinedSetter*/ y = null;
                                 ^";
diff --git a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
index 4785789..859557f 100644
--- a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
@@ -22,11 +22,11 @@
 }
 static method test(self::C c) → void {
   c.{self::C::x} = 1;
-  let final self::C #t1 = c in #t1.{self::C::x} = (let final dynamic #t2 = #t1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+  let final self::C #t1 = c in #t1.{self::C::x} = (let final dynamic #t2 = #t1 in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c. /*@error=UndefinedGetter*/ x += 1;
                                 ^").+(1);
-  let final self::C #t3 = c in (let final dynamic #t4 = #t3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+  let final self::C #t3 = c in (let final dynamic #t4 = #t3 in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c. /*@error=UndefinedGetter*/ x ??= 1;
                                 ^").{core::Object::==}(null) ?{dynamic} #t3.{self::C::x} = 1 : null;
diff --git a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.transformed.expect b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.transformed.expect
index d826a78..4bd73f4 100644
--- a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.transformed.expect
@@ -10,11 +10,11 @@
 }
 static method test(self::C c) → void {
   c.{self::C::x} = 1;
-  let final self::C #t1 = c in #t1.{self::C::x} = (let final self::C #t2 = #t1 in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+  let final self::C #t1 = c in #t1.{self::C::x} = (let final self::C #t2 = #t1 in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c. /*@error=UndefinedGetter*/ x += 1;
                                 ^").+(1);
-  let final self::C #t3 = c in (let final self::C #t4 = #t3 in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+  let final self::C #t3 = c in (let final self::C #t4 = #t3 in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c. /*@error=UndefinedGetter*/ x ??= 1;
                                 ^").{core::Object::==}(null) ?{dynamic} #t3.{self::C::x} = 1 : null;