Version 2.12.0-281.0.dev

Merge commit '34f9734b417ea281bf70422128ec9d3dc1c50f00' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
index 4029c5c..78dc0c5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
@@ -546,75 +546,30 @@
               statement.expression.fileOffset,
               noLength)
             ..parent = statement;
-        } else {
-          DartType futureOrType =
-              inferrer.computeGreatestClosure2(_returnContext);
-          if (flattenedExpressionType is! VoidType &&
-              !inferrer.typeSchemaEnvironment
-                  .performNullabilityAwareSubtypeCheck(
-                      flattenedExpressionType, futureValueType)
-                  .isSubtypeWhenUsingNullabilities()) {
-            // It is a compile-time error if s is `return e;`, flatten(S) is not
-            // void, S is not assignable to T_v, and flatten(S) is not a subtype
-            // of T_v.
-            statement.expression = inferrer.ensureAssignable(
-                futureValueType, expressionType, statement.expression,
-                fileOffset: statement.expression.fileOffset,
-                runtimeCheckedType: futureOrType,
-                declaredContextType: returnType,
-                isVoidAllowed: false,
-                errorTemplate: templateInvalidReturnAsync,
-                nullabilityErrorTemplate: templateInvalidReturnAsyncNullability,
-                nullabilityPartErrorTemplate:
-                    templateInvalidReturnAsyncPartNullability,
-                nullabilityNullErrorTemplate:
-                    templateInvalidReturnAsyncNullabilityNull,
-                nullabilityNullTypeErrorTemplate:
-                    templateInvalidReturnAsyncNullabilityNullType)
-              ..parent = statement;
-          }
-          // For `return e`:
-          // When `f` is an asynchronous non-generator with future value type
-          // T_v, evaluation proceeds as follows:
-          //
-          //    The expression `e` is evaluated to an object `o`.
-          //      If the run-time type of `o` is a subtype of `Future<T_v>`,
-          //         let `v` be a fresh variable bound to `o` and
-          //         evaluate `await v` to an object `r`;
-          //         otherwise let `r` be `o`.
-          //    A dynamic error occurs unless the dynamic type of `r`
-          //      is a subtype of the actual value of T_v.
-          //    Then the return statement `s` completes returning `r`.
-          DartType futureType = new InterfaceType(
-              inferrer.coreTypes.futureClass,
-              Nullability.nonNullable,
-              [futureValueType]);
-          VariableDeclaration variable;
-          Expression isOperand;
-          Expression awaitOperand;
-          Expression resultExpression;
-          if (isPureExpression(statement.expression)) {
-            isOperand = clonePureExpression(statement.expression);
-            awaitOperand = clonePureExpression(statement.expression);
-            resultExpression = statement.expression;
-          } else {
-            variable = createVariable(statement.expression, expressionType);
-            isOperand = createVariableGet(variable);
-            awaitOperand = createVariableGet(variable);
-            resultExpression = createVariableGet(variable);
-          }
-          Expression replacement = new ConditionalExpression(
-              new IsExpression(isOperand, futureType)
-                ..fileOffset = statement.fileOffset,
-              new AwaitExpression(awaitOperand)
-                ..fileOffset = statement.fileOffset,
-              resultExpression,
-              futureOrType)
-            ..fileOffset = statement.fileOffset;
-          if (variable != null) {
-            replacement = createLet(variable, replacement);
-          }
-          statement.expression = replacement..parent = statement;
+        } else if (flattenedExpressionType is! VoidType &&
+            !inferrer.typeSchemaEnvironment
+                .performNullabilityAwareSubtypeCheck(
+                    flattenedExpressionType, futureValueType)
+                .isSubtypeWhenUsingNullabilities()) {
+          // It is a compile-time error if s is `return e;`, flatten(S) is not
+          // void, S is not assignable to T_v, and flatten(S) is not a subtype
+          // of T_v.
+          statement.expression = inferrer.ensureAssignable(
+              futureValueType, expressionType, statement.expression,
+              fileOffset: statement.expression.fileOffset,
+              runtimeCheckedType:
+                  inferrer.computeGreatestClosure2(_returnContext),
+              declaredContextType: returnType,
+              isVoidAllowed: false,
+              errorTemplate: templateInvalidReturnAsync,
+              nullabilityErrorTemplate: templateInvalidReturnAsyncNullability,
+              nullabilityPartErrorTemplate:
+                  templateInvalidReturnAsyncPartNullability,
+              nullabilityNullErrorTemplate:
+                  templateInvalidReturnAsyncNullabilityNull,
+              nullabilityNullTypeErrorTemplate:
+                  templateInvalidReturnAsyncNullabilityNullType)
+            ..parent = statement;
         }
       }
     } else {
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 4dd7287..0b50fbb 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
@@ -2514,13 +2514,16 @@
     // `void` if `B’` contains no `yield` expressions.  Otherwise, let `M` be
     // the least upper bound of the types of the `return` expressions in `B’`,
     // or `void` if `B’` contains no `return` expressions.
+    DartType inferredReturnType;
     if (needToSetReturnType) {
-      DartType inferredReturnType = closureContext.inferReturnType(this,
+      inferredReturnType = closureContext.inferReturnType(this,
           hasImplicitReturn: flowAnalysis.isReachable);
+    }
 
-      // Then the result of inference is `<T0, ..., Tn>(R0 x0, ..., Rn xn) B`
-      // with type `<T0, ..., Tn>(R0, ..., Rn) -> M'` (with some of the `Ri` and
-      // `xi` denoted as optional or named parameters, if appropriate).
+    // Then the result of inference is `<T0, ..., Tn>(R0 x0, ..., Rn xn) B` with
+    // type `<T0, ..., Tn>(R0, ..., Rn) -> M’` (with some of the `Ri` and `xi`
+    // denoted as optional or named parameters, if appropriate).
+    if (needToSetReturnType) {
       instrumentation?.record(uriForInstrumentation, fileOffset, 'returnType',
           new InstrumentationValueForType(inferredReturnType));
       function.returnType = inferredReturnType;
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index e422e9d..572493d 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -868,7 +868,6 @@
 printf
 println
 proc
-proceeds
 producers
 product
 progresses
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index d3bc3e1a..55be1a1 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -737,7 +737,6 @@
 unassignment
 unawaited
 unbreak
-uncaught
 unconverted
 uncover
 uncovers
diff --git a/pkg/front_end/test/text_representation/data/expressions.dart b/pkg/front_end/test/text_representation/data/expressions.dart
index 4d70d21..bf8c23c 100644
--- a/pkg/front_end/test/text_representation/data/expressions.dart
+++ b/pkg/front_end/test/text_representation/data/expressions.dart
@@ -382,9 +382,7 @@
 exprMap() => {0: "foo", 1: "bar"};
 
 /*member: exprAwait:await o*/
-exprAwait(o) async {
-  await o;
-}
+exprAwait(o) async => await o;
 
 /*member: exprLoadLibrary:prefix.loadLibrary()*/
 exprLoadLibrary() => prefix.loadLibrary();
diff --git a/pkg/front_end/test/text_representation/text_representation_test.dart b/pkg/front_end/test/text_representation/text_representation_test.dart
index d9019d0..f804385 100644
--- a/pkg/front_end/test/text_representation/text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/text_representation_test.dart
@@ -156,16 +156,14 @@
 
   @override
   String computeMemberValue(Id id, Member node) {
+    if (node.name.text == 'stmtVariableDeclarationMulti') {
+      print(node);
+    }
     if (node.name.text.startsWith(expressionMarker)) {
       if (node is Procedure) {
         Statement body = node.function.body;
         if (body is ReturnStatement) {
           return body.expression.toText(strategy);
-        } else if (body is Block &&
-            body.statements.isNotEmpty &&
-            body.statements.first is ExpressionStatement) {
-          ExpressionStatement statement = body.statements.first;
-          return statement.expression.toText(strategy);
         }
       } else if (node is Field && node.initializer != null) {
         return node.initializer.toText(strategy);
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
index 74694bf..0b84933 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
@@ -134,28 +134,28 @@
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
-  return let final core::String #t8 = "hest" in #t8 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t8 : #t8;
+  return "hest";
 }
 static method fisk() → dynamic async {
   lowered core::String? #s1;
   function #s1#get() → core::String
-    return let final core::String? #t9 = #s1 in #t9.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+    return let final core::String? #t8 = #s1 in #t8.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
-                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String : #t9{core::String};
-  function #s1#set(core::String #t10) → dynamic
-    return #s1 = #t10;
+                   ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String : #t8{core::String};
+  function #s1#set(core::String #t9) → dynamic
+    return #s1 = #t9;
   lowered core::String? #s2;
   function #s2#get() → core::String
-    return let final core::String? #t11 = #s2 in #t11.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+    return let final core::String? #t10 = #s2 in #t10.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
-                             ^^^^^"}${#C1}" : #t11{core::String};
-  function #s2#set(core::String #t12) → dynamic
-    return #s2 = #t12;
+                             ^^^^^"}${#C1}" : #t10{core::String};
+  function #s2#set(core::String #t11) → dynamic
+    return #s2 = #t11;
   lowered core::Function? #f;
   function #f#get() → core::Function
-    return let final core::Function? #t13 = #f in #t13.==(null) ?{core::Function} #f = () → asy::Future<dynamic> async => let final dynamic #t14 = await self::hest() in #t14 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t14 : #t14 : #t13{core::Function};
-  function #f#set(core::Function #t15) → dynamic
-    return #f = #t15;
+    return let final core::Function? #t12 = #f in #t12.==(null) ?{core::Function} #f = () → asy::Future<dynamic> async => await self::hest() : #t12{core::Function};
+  function #f#set(core::Function #t13) → dynamic
+    return #f = #t13;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
index 09236c4..12f0ed3 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
@@ -148,8 +148,6 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  FutureOr<dynamic>:async_temporary_0;
-  FutureOr<dynamic>:async_temporary_1;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L1:
@@ -177,15 +175,7 @@
               :result;
             }
         }
-        final core::String #t11 = "hest";
-        if(#t11 is asy::Future<dynamic>) {
-          [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_1 = _in::unsafeCast<core::String>(:result);
-        }
-        else {
-          :async_temporary_1 = #t11;
-        }
-        :return_value = :async_temporary_1;
+        :return_value = "hest";
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -214,21 +204,21 @@
       {
         lowered core::String? #s1;
         function #s1#get() → core::String
-          return let final core::String? #t13 = #s1 in #t13.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+          return let final core::String? #t11 = #s1 in #t11.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest(); // Error.
-                   ^^^^^" : #t13{core::String};
-        function #s1#set(core::String #t14) → dynamic
-          return #s1 = #t14;
+                   ^^^^^" : #t11{core::String};
+        function #s1#set(core::String #t12) → dynamic
+          return #s1 = #t12;
         lowered core::String? #s2;
         function #s2#get() → core::String
-          return let final core::String? #t15 = #s2 in #t15.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+          return let final core::String? #t13 = #s2 in #t13.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
-                             ^^^^^"}${#C1}" : #t15{core::String};
-        function #s2#set(core::String #t16) → dynamic
-          return #s2 = #t16;
+                             ^^^^^"}${#C1}" : #t13{core::String};
+        function #s2#set(core::String #t14) → dynamic
+          return #s2 = #t14;
         lowered core::Function? #f;
         function #f#get() → core::Function
-          return let final core::Function? #t17 = #f in #t17.==(null) ?{core::Function} #f = () → asy::Future<dynamic> /* originally async */ {
+          return let final core::Function? #t15 = #f in #t15.==(null) ?{core::Function} #f = () → asy::Future<dynamic> /* originally async */ {
             final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
             core::bool* :is_sync = false;
             FutureOr<dynamic>? :return_value;
@@ -237,21 +227,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            FutureOr<dynamic>:async_temporary_0;
             function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t18 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  final dynamic #t19 = :result;
-                  if(#t19 is asy::Future<dynamic>) {
-                    [yield] let dynamic #t20 = asy::_awaitHelper(#t19, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = :result;
-                  }
-                  else {
-                    :async_temporary_0 = #t19;
-                  }
-                  :return_value = :async_temporary_0;
+                  [yield] let dynamic #t16 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
+                  :return_value = :result;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -265,9 +246,9 @@
             :async_op.call();
             :is_sync = true;
             return :async_future;
-          } : #t17{core::Function};
-        function #f#set(core::Function #t21) → dynamic
-          return #f = #t21;
+          } : #t15{core::Function};
+        function #f#set(core::Function #t17) → dynamic
+          return #f = #t17;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
@@ -289,4 +270,4 @@
 
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///later.dart:46:18 -> IntConstant(42)
-Extra constant evaluation: evaluated: 234, effectively constant: 1
+Extra constant evaluation: evaluated: 207, effectively constant: 1
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
index 0d0243b..7123dd80 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
@@ -154,7 +154,7 @@
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
-  return let final core::String #t8 = "hest" in #t8 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t8 : #t8;
+  return "hest";
 }
 static method fisk() → dynamic async {
   lowered core::String? #s1;
@@ -168,9 +168,9 @@
     }
     return #s1{core::String};
   }
-  function #s1#set(core::String #t9) → dynamic {
+  function #s1#set(core::String #t8) → dynamic {
     #s1#isSet = true;
-    return #s1 = #t9;
+    return #s1 = #t8;
   }
   lowered core::String? #s2;
   lowered core::bool #s2#isSet = false;
@@ -183,22 +183,22 @@
     }
     return #s2{core::String};
   }
-  function #s2#set(core::String #t10) → dynamic {
+  function #s2#set(core::String #t9) → dynamic {
     #s2#isSet = true;
-    return #s2 = #t10;
+    return #s2 = #t9;
   }
   lowered core::Function? #f;
   lowered core::bool #f#isSet = false;
   function #f#get() → core::Function {
     if(!#f#isSet) {
-      #f = () → asy::Future<dynamic> async => let final dynamic #t11 = await self::hest() in #t11 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t11 : #t11;
+      #f = () → asy::Future<dynamic> async => await self::hest();
       #f#isSet = true;
     }
     return #f{core::Function};
   }
-  function #f#set(core::Function #t12) → dynamic {
+  function #f#set(core::Function #t10) → dynamic {
     #f#isSet = true;
-    return #f = #t12;
+    return #f = #t10;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index 7fe5b1b..3bcf2b7 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -168,8 +168,6 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  FutureOr<dynamic>:async_temporary_0;
-  FutureOr<dynamic>:async_temporary_1;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L1:
@@ -197,15 +195,7 @@
               :result;
             }
         }
-        final core::String #t11 = "hest";
-        if(#t11 is asy::Future<dynamic>) {
-          [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_1 = _in::unsafeCast<core::String>(:result);
-        }
-        else {
-          :async_temporary_1 = #t11;
-        }
-        :return_value = :async_temporary_1;
+        :return_value = "hest";
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -243,9 +233,9 @@
           }
           return #s1{core::String};
         }
-        function #s1#set(core::String #t13) → dynamic {
+        function #s1#set(core::String #t11) → dynamic {
           #s1#isSet = true;
-          return #s1 = #t13;
+          return #s1 = #t11;
         }
         lowered core::String? #s2;
         lowered core::bool #s2#isSet = false;
@@ -258,9 +248,9 @@
           }
           return #s2{core::String};
         }
-        function #s2#set(core::String #t14) → dynamic {
+        function #s2#set(core::String #t12) → dynamic {
           #s2#isSet = true;
-          return #s2 = #t14;
+          return #s2 = #t12;
         }
         lowered core::Function? #f;
         lowered core::bool #f#isSet = false;
@@ -275,21 +265,12 @@
               core::int :await_jump_var = 0;
               dynamic :await_ctx_var;
               dynamic :saved_try_context_var0;
-              FutureOr<dynamic>:async_temporary_0;
               function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
                 try {
                   #L4:
                   {
-                    [yield] let dynamic #t15 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                    final dynamic #t16 = :result;
-                    if(#t16 is asy::Future<dynamic>) {
-                      [yield] let dynamic #t17 = asy::_awaitHelper(#t16, :async_op_then, :async_op_error, :async_op) in null;
-                      :async_temporary_0 = :result;
-                    }
-                    else {
-                      :async_temporary_0 = #t16;
-                    }
-                    :return_value = :async_temporary_0;
+                    [yield] let dynamic #t13 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
+                    :return_value = :result;
                     break #L4;
                   }
                   asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -308,9 +289,9 @@
           }
           return #f{core::Function};
         }
-        function #f#set(core::Function #t18) → dynamic {
+        function #f#set(core::Function #t14) → dynamic {
           #f#isSet = true;
-          return #f = #t18;
+          return #f = #t14;
         }
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
index 6769397..0e66be9 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
@@ -263,35 +263,35 @@
   }
   function local() → FutureOr<self::A> async {
     if(true) {
-      return let final self::B? #t6 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+      return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
-             ^" in x as{TypeError,ForNonNullableByDefault} self::A in #t6 is asy::Future<self::A> ?{FutureOr<self::A>} await #t6 : #t6;
+             ^" in x as{TypeError,ForNonNullableByDefault} self::A;
     }
     else {
-      return let final asy::Future<self::B?> #t8 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+      return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<B?>.value(x); // Error.
-                 ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A in #t8 is asy::Future<self::A> ?{FutureOr<self::A>} await #t8 : #t8;
+                 ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
     }
   }
-  return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   return x; // Error.
          ^" in x as{TypeError,ForNonNullableByDefault} self::A;
 }
 static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
-  self::barContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  self::barContext(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   barContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
-  core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  core::List<self::A> y = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -314,16 +314,16 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   <List<A>, List<A>>{...m}; // Error.
                         ^"};
-  for (final core::List<self::B?> #t13 in l) {
-    core::List<self::A> y = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  for (final core::List<self::B?> #t11 in l) {
+    core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (List<A> y in l) {} // Error.
-               ^" in #t13 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+               ^" in #t11 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
   }
-  return let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -331,52 +331,52 @@
          ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
 }
 static method baz(self::C c) → void {
-  self::bazContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  self::bazContext(let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t17 = c in #t17.==(null) ?{() → core::num?} null : #t17.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
-  self::fooContext(let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} self::A);
-  self::fooContext(let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(null); // Error.
              ^" in null as{TypeError,ForNonNullableByDefault} self::A);
-  self::A a1 = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a1 = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a1 = x; // Error.
          ^" in x as{TypeError,ForNonNullableByDefault} self::A;
-  self::A a2 = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a2 = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a2 = null; // Error.
          ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   if(true) {
-    return let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return x; // Error.
            ^" in x as{TypeError,ForNonNullableByDefault} self::A;
   }
   else {
-    return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return null; // Error.
            ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   }
   function local() → FutureOr<self::A> async {
     if(true) {
-      return let final Null #t24 = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+      return let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
-             ^" in null as{TypeError,ForNonNullableByDefault} self::A in #t24 is asy::Future<self::A> ?{FutureOr<self::A>} await #t24 : #t24;
+             ^" in null as{TypeError,ForNonNullableByDefault} self::A;
     }
     else {
-      return let final asy::Future<Null> #t26 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+      return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
-                 ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A in #t26 is asy::Future<self::A> ?{FutureOr<self::A>} await #t26 : #t26;
+                 ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
index c855781..bdd60d8 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
@@ -180,7 +180,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -281,45 +280,25 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<self::A>:async_temporary_0;
-    FutureOr<self::A>:async_temporary_1;
-    FutureOr<self::A>:async_temporary_2;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L4:
         {
           if(true) {
-            final self::B? #t10 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+            :return_value = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
-             ^" in let self::B? #t12 = x in #t12.==(null) ?{self::A} #t12 as{TypeError,ForNonNullableByDefault} self::A : #t12{self::A};
-            if(#t10 is asy::Future<self::A>) {
-              [yield] let dynamic #t13 = asy::_awaitHelper(#t10, :async_op_then, :async_op_error, :async_op) in null;
-              :async_temporary_0 = _in::unsafeCast<self::B?>(:result);
-            }
-            else {
-              :async_temporary_0 = #t10;
-            }
-            :return_value = :async_temporary_0;
+             ^" in let self::B? #t11 = x in #t11.==(null) ?{self::A} #t11 as{TypeError,ForNonNullableByDefault} self::A : #t11{self::A};
             break #L4;
           }
           else {
-            final asy::Future<self::B?> #t14 = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+            :return_value = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<B?>.value(x); // Error.
                  ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
-            if(#t14 is asy::Future<self::A>) {
-              [yield] let dynamic #t16 = asy::_awaitHelper(#t14, :async_op_then, :async_op_error, :async_op) in null;
-              :async_temporary_2 = _in::unsafeCast<self::B?>(:result);
-            }
-            else {
-              :async_temporary_2 = #t14;
-            }
-            :return_value = :async_temporary_2;
             break #L4;
           }
         }
@@ -335,20 +314,20 @@
     :is_sync = true;
     return :async_future;
   }
-  return let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+  return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   return x; // Error.
-         ^" in let self::B? #t18 = x in #t18.==(null) ?{self::A} #t18 as{TypeError,ForNonNullableByDefault} self::A : #t18{self::A};
+         ^" in let self::B? #t14 = x in #t14.==(null) ?{self::A} #t14 as{TypeError,ForNonNullableByDefault} self::A : #t14{self::A};
 }
 static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
-  self::barContext(let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  self::barContext(let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   barContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
-  core::List<self::A> y = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  core::List<self::A> y = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -374,19 +353,19 @@
   {
     core::Iterator<core::List<self::B?>> :sync-for-iterator = l.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-      final core::List<self::B?> #t21 = :sync-for-iterator.{core::Iterator::current};
+      final core::List<self::B?> #t17 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::List<self::A> y = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+        core::List<self::A> y = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (List<A> y in l) {} // Error.
-               ^" in #t21 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+               ^" in #t17 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
       }
     }
   }
-  return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  return let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -394,38 +373,38 @@
          ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
 }
 static method baz(self::C c) → void {
-  self::bazContext(let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  self::bazContext(let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t25 = c in #t25.==(null) ?{() → core::num?} null : #t25.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t21 = c in #t21.==(null) ?{() → core::num?} null : #t21.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
-  self::fooContext(let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
-             ^" in let Null #t27 = x in #t27.==(null) ?{self::A} #t27 as{TypeError,ForNonNullableByDefault} self::A : #t27{self::A});
-  self::fooContext(let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+             ^" in let Null #t23 = x in #t23.==(null) ?{self::A} #t23 as{TypeError,ForNonNullableByDefault} self::A : #t23{self::A});
+  self::fooContext(let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(null); // Error.
-             ^" in let Null #t29 = null in #t29.==(null) ?{self::A} #t29 as{TypeError,ForNonNullableByDefault} self::A : #t29{self::A});
-  self::A a1 = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+             ^" in let Null #t25 = null in #t25.==(null) ?{self::A} #t25 as{TypeError,ForNonNullableByDefault} self::A : #t25{self::A});
+  self::A a1 = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a1 = x; // Error.
-         ^" in let Null #t31 = x in #t31.==(null) ?{self::A} #t31 as{TypeError,ForNonNullableByDefault} self::A : #t31{self::A};
-  self::A a2 = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+         ^" in let Null #t27 = x in #t27.==(null) ?{self::A} #t27 as{TypeError,ForNonNullableByDefault} self::A : #t27{self::A};
+  self::A a2 = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a2 = null; // Error.
-         ^" in let Null #t33 = null in #t33.==(null) ?{self::A} #t33 as{TypeError,ForNonNullableByDefault} self::A : #t33{self::A};
+         ^" in let Null #t29 = null in #t29.==(null) ?{self::A} #t29 as{TypeError,ForNonNullableByDefault} self::A : #t29{self::A};
   if(true) {
-    return let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return x; // Error.
-           ^" in let Null #t35 = x in #t35.==(null) ?{self::A} #t35 as{TypeError,ForNonNullableByDefault} self::A : #t35{self::A};
+           ^" in let Null #t31 = x in #t31.==(null) ?{self::A} #t31 as{TypeError,ForNonNullableByDefault} self::A : #t31{self::A};
   }
   else {
-    return let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return null; // Error.
-           ^" in let Null #t37 = null in #t37.==(null) ?{self::A} #t37 as{TypeError,ForNonNullableByDefault} self::A : #t37{self::A};
+           ^" in let Null #t33 = null in #t33.==(null) ?{self::A} #t33 as{TypeError,ForNonNullableByDefault} self::A : #t33{self::A};
   }
   function local() → FutureOr<self::A> /* originally async */ {
     final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
@@ -435,43 +414,23 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<self::A>:async_temporary_0;
-    FutureOr<self::A>:async_temporary_1;
-    FutureOr<self::A>:async_temporary_2;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L5:
         {
           if(true) {
-            final Null #t38 = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+            :return_value = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
-             ^" in let Null #t40 = null in #t40.==(null) ?{self::A} #t40 as{TypeError,ForNonNullableByDefault} self::A : #t40{self::A};
-            if(#t38 is asy::Future<self::A>) {
-              [yield] let dynamic #t41 = asy::_awaitHelper(#t38, :async_op_then, :async_op_error, :async_op) in null;
-              :async_temporary_0 = _in::unsafeCast<Null>(:result);
-            }
-            else {
-              :async_temporary_0 = #t38;
-            }
-            :return_value = :async_temporary_0;
+             ^" in let Null #t35 = null in #t35.==(null) ?{self::A} #t35 as{TypeError,ForNonNullableByDefault} self::A : #t35{self::A};
             break #L5;
           }
           else {
-            final asy::Future<Null> #t42 = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+            :return_value = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
                  ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
-            if(#t42 is asy::Future<self::A>) {
-              [yield] let dynamic #t44 = asy::_awaitHelper(#t42, :async_op_then, :async_op_error, :async_op) in null;
-              :async_temporary_2 = _in::unsafeCast<Null>(:result);
-            }
-            else {
-              :async_temporary_2 = #t42;
-            }
-            :return_value = :async_temporary_2;
             break #L5;
           }
         }
@@ -507,7 +466,7 @@
 Evaluated: MethodInvocation @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> BoolConstant(true)
 Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> NullConstant(null)
 Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> NullConstant(null)
-Extra constant evaluation: evaluated: 266, effectively constant: 12
+Extra constant evaluation: evaluated: 210, effectively constant: 12
 
 
 Constructor coverage from constants:
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
index 6769397..0e66be9 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
@@ -263,35 +263,35 @@
   }
   function local() → FutureOr<self::A> async {
     if(true) {
-      return let final self::B? #t6 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+      return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
-             ^" in x as{TypeError,ForNonNullableByDefault} self::A in #t6 is asy::Future<self::A> ?{FutureOr<self::A>} await #t6 : #t6;
+             ^" in x as{TypeError,ForNonNullableByDefault} self::A;
     }
     else {
-      return let final asy::Future<self::B?> #t8 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+      return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<B?>.value(x); // Error.
-                 ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A in #t8 is asy::Future<self::A> ?{FutureOr<self::A>} await #t8 : #t8;
+                 ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
     }
   }
-  return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   return x; // Error.
          ^" in x as{TypeError,ForNonNullableByDefault} self::A;
 }
 static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
-  self::barContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  self::barContext(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   barContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
-  core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  core::List<self::A> y = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -314,16 +314,16 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   <List<A>, List<A>>{...m}; // Error.
                         ^"};
-  for (final core::List<self::B?> #t13 in l) {
-    core::List<self::A> y = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  for (final core::List<self::B?> #t11 in l) {
+    core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (List<A> y in l) {} // Error.
-               ^" in #t13 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+               ^" in #t11 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
   }
-  return let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -331,52 +331,52 @@
          ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
 }
 static method baz(self::C c) → void {
-  self::bazContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  self::bazContext(let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in (let final self::C #t17 = c in #t17.==(null) ?{() → core::num?} null : #t17.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+             ^" in (let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
 }
 static method boz(Null x) → self::A {
-  self::fooContext(let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x as{TypeError,ForNonNullableByDefault} self::A);
-  self::fooContext(let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(null); // Error.
              ^" in null as{TypeError,ForNonNullableByDefault} self::A);
-  self::A a1 = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a1 = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a1 = x; // Error.
          ^" in x as{TypeError,ForNonNullableByDefault} self::A;
-  self::A a2 = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a2 = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a2 = null; // Error.
          ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   if(true) {
-    return let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return x; // Error.
            ^" in x as{TypeError,ForNonNullableByDefault} self::A;
   }
   else {
-    return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return null; // Error.
            ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   }
   function local() → FutureOr<self::A> async {
     if(true) {
-      return let final Null #t24 = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+      return let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
-             ^" in null as{TypeError,ForNonNullableByDefault} self::A in #t24 is asy::Future<self::A> ?{FutureOr<self::A>} await #t24 : #t24;
+             ^" in null as{TypeError,ForNonNullableByDefault} self::A;
     }
     else {
-      return let final asy::Future<Null> #t26 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+      return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
-                 ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A in #t26 is asy::Future<self::A> ?{FutureOr<self::A>} await #t26 : #t26;
+                 ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
     }
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
index 242b2b4..4ba3fa1 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
@@ -180,7 +180,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -281,45 +280,25 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<self::A>:async_temporary_0;
-    FutureOr<self::A>:async_temporary_1;
-    FutureOr<self::A>:async_temporary_2;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L4:
         {
           if(true) {
-            final self::B? #t6 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+            :return_value = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return x; // Error.
              ^" in x;
-            if(#t6 is asy::Future<self::A>) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
-              :async_temporary_0 = _in::unsafeCast<self::B?>(:result);
-            }
-            else {
-              :async_temporary_0 = #t6;
-            }
-            :return_value = :async_temporary_0;
             break #L4;
           }
           else {
-            final asy::Future<self::B?> #t9 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+            :return_value = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<B?>.value(x); // Error.
                  ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
-            if(#t9 is asy::Future<self::A>) {
-              [yield] let dynamic #t11 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
-              :async_temporary_2 = _in::unsafeCast<self::B?>(:result);
-            }
-            else {
-              :async_temporary_2 = #t9;
-            }
-            :return_value = :async_temporary_2;
             break #L4;
           }
         }
@@ -335,20 +314,20 @@
     :is_sync = true;
     return :async_future;
   }
-  return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   return x; // Error.
          ^" in x;
 }
 static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
-  self::barContext(let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  self::barContext(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   barContext(x); // Error.
              ^" in x);
-  core::List<self::A> y = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  core::List<self::A> y = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -374,19 +353,19 @@
   {
     core::Iterator<core::List<self::B?>> :sync-for-iterator = l.{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-      final core::List<self::B?> #t15 = :sync-for-iterator.{core::Iterator::current};
+      final core::List<self::B?> #t11 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::List<self::A> y = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+        core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
 Try changing the type of the variable.
   for (List<A> y in l) {} // Error.
-               ^" in #t15;
+               ^" in #t11;
       }
     }
   }
-  return let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+  return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -394,35 +373,35 @@
          ^" in x;
 }
 static method baz(self::C c) → void {
-  self::bazContext(let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  self::bazContext(let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
   bazContext(c);
-             ^" in let final self::C #t19 = c in #t19.==(null) ?{() → core::num?} null : #t19.{self::C::call});
+             ^" in let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call});
 }
 static method boz(Null x) → self::A {
-  self::fooContext(let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(x); // Error.
              ^" in x);
-  self::fooContext(let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+  self::fooContext(let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   fooContext(null); // Error.
              ^" in null);
-  self::A a1 = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a1 = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a1 = x; // Error.
          ^" in x;
-  self::A a2 = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+  self::A a2 = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
   A a2 = null; // Error.
          ^" in null;
   if(true) {
-    return let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return x; // Error.
            ^" in x;
   }
   else {
-    return let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+    return let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
     return null; // Error.
            ^" in null;
@@ -435,43 +414,23 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<self::A>:async_temporary_0;
-    FutureOr<self::A>:async_temporary_1;
-    FutureOr<self::A>:async_temporary_2;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L5:
         {
           if(true) {
-            final Null #t26 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+            :return_value = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return null; // Error.
              ^" in null;
-            if(#t26 is asy::Future<self::A>) {
-              [yield] let dynamic #t28 = asy::_awaitHelper(#t26, :async_op_then, :async_op_error, :async_op) in null;
-              :async_temporary_0 = _in::unsafeCast<Null>(:result);
-            }
-            else {
-              :async_temporary_0 = #t26;
-            }
-            :return_value = :async_temporary_0;
             break #L5;
           }
           else {
-            final asy::Future<Null> #t29 = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+            :return_value = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
  - 'Future' is from 'dart:async'.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
       return new Future<Null>.value(null); // Error.
                  ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
-            if(#t29 is asy::Future<self::A>) {
-              [yield] let dynamic #t31 = asy::_awaitHelper(#t29, :async_op_then, :async_op_error, :async_op) in null;
-              :async_temporary_2 = _in::unsafeCast<Null>(:result);
-            }
-            else {
-              :async_temporary_2 = #t29;
-            }
-            :return_value = :async_temporary_2;
             break #L5;
           }
         }
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
index bda20dd..f39bdfbd 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
@@ -21,7 +21,7 @@
         else {
           throw core::Exception::•("Invalid response type");
         }
-    return let final self::TestMixin::T% #t1 = result in #t1 is asy::Future<self::TestMixin::T%> ?{FutureOr<self::TestMixin::T%>} await #t1 : #t1;
+    return result;
   }
 }
 class PagingResponse<T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index e23e8dd..76b3473 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
@@ -14,7 +14,6 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<self::TestMixin::T%>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L1:
@@ -36,15 +35,7 @@
               else {
                 throw core::Exception::•("Invalid response type");
               }
-          final self::TestMixin::T% #t2 = result;
-          if(#t2 is asy::Future<self::TestMixin::T%>) {
-            [yield] let dynamic #t3 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<self::TestMixin::T%>(:result);
-          }
-          else {
-            :async_temporary_0 = #t2;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = result;
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -91,12 +82,11 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t4 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
+          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
           final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -113,15 +103,7 @@
               else {
                 throw core::Exception::•("Invalid response type");
               }
-          final core::String #t5 = result;
-          if(#t5 is asy::Future<core::String>) {
-            [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::String>(:result);
-          }
-          else {
-            :async_temporary_0 = #t5;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = result;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,12 +141,11 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L3:
         {
-          [yield] let dynamic #t7 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
+          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
           final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -181,15 +162,7 @@
               else {
                 throw core::Exception::•("Invalid response type");
               }
-          final core::String #t8 = result;
-          if(#t8 is asy::Future<core::String>) {
-            [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::String>(:result);
-          }
-          else {
-            :async_temporary_0 = #t8;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = result;
           break #L3;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
index bda20dd..f39bdfbd 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
@@ -21,7 +21,7 @@
         else {
           throw core::Exception::•("Invalid response type");
         }
-    return let final self::TestMixin::T% #t1 = result in #t1 is asy::Future<self::TestMixin::T%> ?{FutureOr<self::TestMixin::T%>} await #t1 : #t1;
+    return result;
   }
 }
 class PagingResponse<T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
index e23e8dd..76b3473 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
@@ -14,7 +14,6 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<self::TestMixin::T%>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L1:
@@ -36,15 +35,7 @@
               else {
                 throw core::Exception::•("Invalid response type");
               }
-          final self::TestMixin::T% #t2 = result;
-          if(#t2 is asy::Future<self::TestMixin::T%>) {
-            [yield] let dynamic #t3 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<self::TestMixin::T%>(:result);
-          }
-          else {
-            :async_temporary_0 = #t2;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = result;
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -91,12 +82,11 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t4 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
+          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
           final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -113,15 +103,7 @@
               else {
                 throw core::Exception::•("Invalid response type");
               }
-          final core::String #t5 = result;
-          if(#t5 is asy::Future<core::String>) {
-            [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::String>(:result);
-          }
-          else {
-            :async_temporary_0 = #t5;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = result;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,12 +141,11 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L3:
         {
-          [yield] let dynamic #t7 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
+          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
           final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -181,15 +162,7 @@
               else {
                 throw core::Exception::•("Invalid response type");
               }
-          final core::String #t8 = result;
-          if(#t8 is asy::Future<core::String>) {
-            [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::String>(:result);
-          }
-          else {
-            :async_temporary_0 = #t8;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = result;
           break #L3;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
index ca6b488..11217a1 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
@@ -55,19 +55,19 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return self::throwing();
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => let final Never #t1 = throw v in #t1 is asy::Future<Never> ?{FutureOr<core::String>} await #t1 : #t1;
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => throw v;
   (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async {
     throw v;
   };
   (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async {
-    return let final Never #t2 = throw v in #t2 is asy::Future<Never> ?{FutureOr<core::String>} await #t2 : #t2;
+    return throw v;
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t3 = self::throwing() in #t3 is asy::Future<Never> ?{FutureOr<core::String>} await #t3 : #t3;
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => self::throwing();
   (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async {
     self::throwing();
   };
   (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async {
-    return let final Never #t4 = self::throwing() in #t4 is asy::Future<Never> ?{FutureOr<core::String>} await #t4 : #t4;
+    return self::throwing();
   };
 }
 static method errors() → void async {
@@ -77,7 +77,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
   };
@@ -87,7 +87,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
   };
@@ -97,7 +97,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
   };
@@ -107,7 +107,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
   };
@@ -117,17 +117,17 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
   };
   (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async {
     try {
-      return let final Never #t10 = throw v in #t10 is asy::Future<core::String> ?{FutureOr<core::String>} await #t10 : #t10;
+      return throw v;
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
   };
@@ -137,17 +137,17 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
   };
   (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
     try {
-      return let final Never #t13 = self::throwing() in #t13 is asy::Future<core::String> ?{FutureOr<core::String>} await #t13 : #t13;
+      return self::throwing();
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
index 515ceec..3e9bef1 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
@@ -37,7 +37,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 static method throwing() → Never
   return throw "";
@@ -64,21 +63,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L1:
         {
-          final Never #t1 = throw v;
-          if(#t1 is asy::Future<Never>) {
-            [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Never>(:result);
-          }
-          else {
-            :async_temporary_0 = #t1;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = throw v;
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -127,21 +116,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L3:
         {
-          final Never #t3 = throw v;
-          if(#t3 is asy::Future<Never>) {
-            [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Never>(:result);
-          }
-          else {
-            :async_temporary_0 = #t3;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = throw v;
           break #L3;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -164,21 +143,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L4:
         {
-          final Never #t5 = self::throwing();
-          if(#t5 is asy::Future<Never>) {
-            [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Never>(:result);
-          }
-          else {
-            :async_temporary_0 = #t5;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = self::throwing();
           break #L4;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -227,21 +196,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L6:
         {
-          final Never #t7 = self::throwing();
-          if(#t7 is asy::Future<Never>) {
-            [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Never>(:result);
-          }
-          else {
-            :async_temporary_0 = #t7;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = self::throwing();
           break #L6;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -275,7 +234,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
         };
@@ -285,7 +244,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
         };
@@ -295,7 +254,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
         };
@@ -305,7 +264,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
         };
@@ -326,7 +285,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
                 break #L8;
@@ -351,28 +310,17 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          FutureOr<core::String>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L9:
               {
                 try {
-                  final Never #t14 = throw v;
-                  if(#t14 is asy::Future<core::String>) {
-                    [yield] let dynamic #t15 = asy::_awaitHelper(#t14, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = _in::unsafeCast<Never>(:result);
-                  }
-                  else {
-                    :async_temporary_0 = #t14;
-                  }
-                  :return_value = :async_temporary_0;
+                  :return_value = throw v;
                   break #L9;
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
                 break #L9;
@@ -406,7 +354,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
                 break #L10;
@@ -431,28 +379,17 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          FutureOr<core::String>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L11:
               {
                 try {
-                  final Never #t18 = self::throwing();
-                  if(#t18 is asy::Future<core::String>) {
-                    [yield] let dynamic #t19 = asy::_awaitHelper(#t18, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = _in::unsafeCast<Never>(:result);
-                  }
-                  else {
-                    :async_temporary_0 = #t18;
-                  }
-                  :return_value = :async_temporary_0;
+                  :return_value = self::throwing();
                   break #L11;
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
                 break #L11;
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
index 344471e..3ced126 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
@@ -56,19 +56,19 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return let final Never #t3 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => let final Never #t4 = throw v in #t4 is asy::Future<Never> ?{FutureOr<core::String>} await #t4 : #t4;
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => throw v;
   (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async {
     throw v;
   };
   (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async {
-    return let final Never #t5 = throw v in #t5 is asy::Future<Never> ?{FutureOr<core::String>} await #t5 : #t5;
+    return throw v;
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t6 = let final Never #t7 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t6 is asy::Future<Never> ?{FutureOr<core::String>} await #t6 : #t6;
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async {
-    let final Never #t8 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
   (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async {
-    return let final Never #t9 = let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t9 is asy::Future<Never> ?{FutureOr<core::String>} await #t9 : #t9;
+    return let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
 }
 static method errors() → void async {
@@ -78,7 +78,7 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
   };
@@ -88,27 +88,27 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
   };
   (core::int) → core::String x5 = (core::int v) → core::String {
     try {
-      let final Never #t13 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+      let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
   };
   (core::int) → core::String x6 = (core::int v) → core::String {
     try {
-      return let final Never #t15 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+      return let final Never #t11 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
   };
@@ -118,37 +118,37 @@
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
   };
   (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async {
     try {
-      return let final Never #t18 = throw v in #t18 is asy::Future<core::String> ?{FutureOr<core::String>} await #t18 : #t18;
+      return throw v;
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
   };
   (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async {
     try {
-      let final Never #t20 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+      let final Never #t15 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
   };
   (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
     try {
-      return let final Never #t22 = let final Never #t23 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t22 is asy::Future<core::String> ?{FutureOr<core::String>} await #t22 : #t22;
+      return let final Never #t17 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
     on core::Object catch(final core::Object _) {
     }
-    return let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
index 5ebb180..e3ff8f7 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
@@ -64,21 +64,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L1:
         {
-          final Never #t4 = throw v;
-          if(#t4 is asy::Future<Never>) {
-            [yield] let dynamic #t5 = asy::_awaitHelper(#t4, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Never>(:result);
-          }
-          else {
-            :async_temporary_0 = #t4;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = throw v;
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -127,21 +117,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L3:
         {
-          final Never #t6 = throw v;
-          if(#t6 is asy::Future<Never>) {
-            [yield] let dynamic #t7 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Never>(:result);
-          }
-          else {
-            :async_temporary_0 = #t6;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = throw v;
           break #L3;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -164,21 +144,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L4:
         {
-          final Never #t8 = let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-          if(#t8 is asy::Future<Never>) {
-            [yield] let dynamic #t10 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Never>(:result);
-          }
-          else {
-            :async_temporary_0 = #t8;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
           break #L4;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -205,7 +175,7 @@
       try {
         #L5:
         {
-          let final Never #t11 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+          let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
@@ -227,21 +197,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::String>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L6:
         {
-          final Never #t12 = let final Never #t13 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-          if(#t12 is asy::Future<Never>) {
-            [yield] let dynamic #t14 = asy::_awaitHelper(#t12, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Never>(:result);
-          }
-          else {
-            :async_temporary_0 = #t12;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
           break #L6;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -275,7 +235,7 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
                             ^" in null;
         };
@@ -285,27 +245,27 @@
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
                             ^" in null;
         };
         (core::int) → core::String x5 = (core::int v) → core::String {
           try {
-            let final Never #t17 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+            let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
                             ^" in null;
         };
         (core::int) → core::String x6 = (core::int v) → core::String {
           try {
-            return let final Never #t19 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+            return let final Never #t11 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
           }
           on core::Object catch(final core::Object _) {
           }
-          return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+          return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
         };
@@ -326,7 +286,7 @@
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
                 break #L8;
@@ -351,28 +311,17 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          FutureOr<core::String>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L9:
               {
                 try {
-                  final Never #t22 = throw v;
-                  if(#t22 is asy::Future<core::String>) {
-                    [yield] let dynamic #t23 = asy::_awaitHelper(#t22, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = _in::unsafeCast<Never>(:result);
-                  }
-                  else {
-                    :async_temporary_0 = #t22;
-                  }
-                  :return_value = :async_temporary_0;
+                  :return_value = throw v;
                   break #L9;
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
                 break #L9;
@@ -402,11 +351,11 @@
               #L10:
               {
                 try {
-                  let final Never #t25 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+                  let final Never #t15 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
                 break #L10;
@@ -431,28 +380,17 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          dynamic :saved_try_context_var1;
-          FutureOr<core::String>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L11:
               {
                 try {
-                  final Never #t27 = let final Never #t28 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-                  if(#t27 is asy::Future<core::String>) {
-                    [yield] let dynamic #t29 = asy::_awaitHelper(#t27, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = _in::unsafeCast<Never>(:result);
-                  }
-                  else {
-                    :async_temporary_0 = #t27;
-                  }
-                  :return_value = :async_temporary_0;
+                  :return_value = let final Never #t17 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
                   break #L11;
                 }
                 on core::Object catch(final core::Object _) {
                 }
-                :return_value = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+                :return_value = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
                                     ^" in null;
                 break #L11;
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
index d7881ae..fbcd99e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
@@ -34,61 +34,61 @@
 static method getNull() → dynamic
   return null;
 static method getFutureNull() → asy::Future<dynamic> async {
-  return let final Null #t1 = null in #t1 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t1 : #t1;
+  return null;
 }
 static method getFutureBool() → asy::Future<core::bool> async {
-  return let final core::bool #t2 = true in #t2 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t2 : #t2;
+  return true;
 }
 static method test1() → asy::Future<core::bool> async 
-  return let final dynamic #t3 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t3 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t3 : #t3;
+  return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test2() → asy::Future<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
 static method test4() → asy::Future<core::bool> async 
-  return let final dynamic #t4 = await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t4 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t4 : #t4;
+  return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
-  return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+  return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
 Future<bool> test5() => getFutureNull(); // error
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
 static method test7() → asy::Future<core::bool> async 
-  return let final asy::Future<core::bool> #t6 = self::getFutureBool() in #t6 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t6 : #t6;
+  return self::getFutureBool();
 static method test() → dynamic async {
   function test1() → asy::Future<core::bool> async 
-    return let final dynamic #t7 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t7 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t7 : #t7;
+    return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test2() → asy::Future<core::bool>
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   function test4() → asy::Future<core::bool> async 
-    return let final dynamic #t8 = await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t8 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t8 : #t8;
+    return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test5() → asy::Future<core::bool>
-    return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   function test6() → asy::Future<core::bool>
     return self::getFutureBool();
   function test7() → asy::Future<core::bool> async 
-    return let final asy::Future<core::bool> #t10 = self::getFutureBool() in #t10 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t10 : #t10;
-  asy::Future<core::bool> var1 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+    return self::getFutureBool();
+  asy::Future<core::bool> var1 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> async => let final dynamic #t12 = await self::getNull() in #t12 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t12 : #t12).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  asy::Future<core::bool> var4 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  asy::Future<core::bool> var4 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> async => let final dynamic #t14 = await self::getFutureNull() in #t14 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t14 : #t14).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-  asy::Future<core::bool> var5 = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var5 = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool()).call();
-  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => let final asy::Future<core::bool> #t16 = self::getFutureBool() in #t16 is asy::Future<core::bool> ?{FutureOr<dynamic>} await #t16 : #t16).call();
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool()).call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
index 2b35c4f..b4ab7d2 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
@@ -30,7 +30,6 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 static method getNull() → dynamic
   return null;
@@ -42,21 +41,11 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<dynamic>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L1:
       {
-        final Null #t1 = null;
-        if(#t1 is asy::Future<dynamic>) {
-          [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<Null>(:result);
-        }
-        else {
-          :async_temporary_0 = #t1;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = null;
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -79,21 +68,11 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<core::bool>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L2:
       {
-        final core::bool #t3 = true;
-        if(#t3 is asy::Future<core::bool>) {
-          [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-        }
-        else {
-          :async_temporary_0 = #t3;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = true;
         break #L2;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -117,21 +96,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  FutureOr<core::bool>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        final FutureOr<core::bool>#t6 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-        if(#t6 is asy::Future<core::bool>) {
-          [yield] let dynamic #t7 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-        }
-        else {
-          :async_temporary_0 = #t6;
-        }
-        :return_value = :async_temporary_0;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,21 +129,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  FutureOr<core::bool>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-        final FutureOr<core::bool>#t9 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-        if(#t9 is asy::Future<core::bool>) {
-          [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-        }
-        else {
-          :async_temporary_0 = #t9;
-        }
-        :return_value = :async_temporary_0;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -189,7 +150,7 @@
   return :async_future;
 }
 static method test5() → asy::Future<core::bool>
-  return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+  return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
 Future<bool> test5() => getFutureNull(); // error
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -203,21 +164,11 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<core::bool>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L5:
       {
-        final asy::Future<core::bool> #t12 = self::getFutureBool();
-        if(#t12 is asy::Future<core::bool>) {
-          [yield] let dynamic #t13 = asy::_awaitHelper(#t12, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-        }
-        else {
-          :async_temporary_0 = #t12;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = self::getFutureBool();
         break #L5;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -253,21 +204,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          FutureOr<core::bool>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L7:
               {
-                [yield] let dynamic #t14 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                final FutureOr<core::bool>#t15 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-                if(#t15 is asy::Future<core::bool>) {
-                  [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t15;
-                }
-                :return_value = :async_temporary_0;
+                [yield] let dynamic #t4 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L7;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -295,21 +237,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          FutureOr<core::bool>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L8:
               {
-                [yield] let dynamic #t17 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                final FutureOr<core::bool>#t18 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-                if(#t18 is asy::Future<core::bool>) {
-                  [yield] let dynamic #t19 = asy::_awaitHelper(#t18, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t18;
-                }
-                :return_value = :async_temporary_0;
+                [yield] let dynamic #t5 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L8;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -325,7 +258,7 @@
           return :async_future;
         }
         function test5() → asy::Future<core::bool>
-          return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+          return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -339,21 +272,11 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          FutureOr<core::bool>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L9:
               {
-                final asy::Future<core::bool> #t21 = self::getFutureBool();
-                if(#t21 is asy::Future<core::bool>) {
-                  [yield] let dynamic #t22 = asy::_awaitHelper(#t21, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t21;
-                }
-                :return_value = :async_temporary_0;
+                :return_value = self::getFutureBool();
                 break #L9;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -368,7 +291,7 @@
           :is_sync = true;
           return :async_future;
         }
-        asy::Future<core::bool> var1 = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var1 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
                                                    ^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -380,21 +303,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L10:
               {
-                [yield] let dynamic #t24 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                final dynamic #t25 = :result;
-                if(#t25 is asy::Future<dynamic>) {
-                  [yield] let dynamic #t26 = asy::_awaitHelper(#t25, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = :result;
-                }
-                else {
-                  :async_temporary_0 = #t25;
-                }
-                :return_value = :async_temporary_0;
+                [yield] let dynamic #t8 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+                :return_value = :result;
                 break #L10;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -411,7 +325,7 @@
         }).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
         core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Future<core::bool> var4 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var4 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
                                                          ^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -423,21 +337,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L11:
               {
-                [yield] let dynamic #t28 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                final dynamic #t29 = :result;
-                if(#t29 is asy::Future<dynamic>) {
-                  [yield] let dynamic #t30 = asy::_awaitHelper(#t29, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = :result;
-                }
-                else {
-                  :async_temporary_0 = #t29;
-                }
-                :return_value = :async_temporary_0;
+                [yield] let dynamic #t10 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+                :return_value = :result;
                 break #L11;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -452,7 +357,7 @@
           :is_sync = true;
           return :async_future;
         }).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var5 = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var5 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -465,21 +370,11 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L12:
               {
-                final asy::Future<core::bool> #t32 = self::getFutureBool();
-                if(#t32 is asy::Future<core::bool>) {
-                  [yield] let dynamic #t33 = asy::_awaitHelper(#t32, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t32;
-                }
-                :return_value = :async_temporary_0;
+                :return_value = self::getFutureBool();
                 break #L12;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
index d7881ae..fbcd99e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
@@ -34,61 +34,61 @@
 static method getNull() → dynamic
   return null;
 static method getFutureNull() → asy::Future<dynamic> async {
-  return let final Null #t1 = null in #t1 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t1 : #t1;
+  return null;
 }
 static method getFutureBool() → asy::Future<core::bool> async {
-  return let final core::bool #t2 = true in #t2 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t2 : #t2;
+  return true;
 }
 static method test1() → asy::Future<core::bool> async 
-  return let final dynamic #t3 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t3 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t3 : #t3;
+  return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test2() → asy::Future<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
 static method test4() → asy::Future<core::bool> async 
-  return let final dynamic #t4 = await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t4 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t4 : #t4;
+  return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
-  return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+  return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
 Future<bool> test5() => getFutureNull(); // error
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
 static method test7() → asy::Future<core::bool> async 
-  return let final asy::Future<core::bool> #t6 = self::getFutureBool() in #t6 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t6 : #t6;
+  return self::getFutureBool();
 static method test() → dynamic async {
   function test1() → asy::Future<core::bool> async 
-    return let final dynamic #t7 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t7 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t7 : #t7;
+    return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test2() → asy::Future<core::bool>
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   function test4() → asy::Future<core::bool> async 
-    return let final dynamic #t8 = await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t8 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t8 : #t8;
+    return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test5() → asy::Future<core::bool>
-    return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   function test6() → asy::Future<core::bool>
     return self::getFutureBool();
   function test7() → asy::Future<core::bool> async 
-    return let final asy::Future<core::bool> #t10 = self::getFutureBool() in #t10 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t10 : #t10;
-  asy::Future<core::bool> var1 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+    return self::getFutureBool();
+  asy::Future<core::bool> var1 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> async => let final dynamic #t12 = await self::getNull() in #t12 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t12 : #t12).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  asy::Future<core::bool> var4 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+  asy::Future<core::bool> var4 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> async => let final dynamic #t14 = await self::getFutureNull() in #t14 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t14 : #t14).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-  asy::Future<core::bool> var5 = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var5 = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool()).call();
-  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => let final asy::Future<core::bool> #t16 = self::getFutureBool() in #t16 is asy::Future<core::bool> ?{FutureOr<dynamic>} await #t16 : #t16).call();
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool()).call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
index 2b35c4f..b4ab7d2 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
@@ -30,7 +30,6 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 static method getNull() → dynamic
   return null;
@@ -42,21 +41,11 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<dynamic>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L1:
       {
-        final Null #t1 = null;
-        if(#t1 is asy::Future<dynamic>) {
-          [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<Null>(:result);
-        }
-        else {
-          :async_temporary_0 = #t1;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = null;
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -79,21 +68,11 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<core::bool>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L2:
       {
-        final core::bool #t3 = true;
-        if(#t3 is asy::Future<core::bool>) {
-          [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-        }
-        else {
-          :async_temporary_0 = #t3;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = true;
         break #L2;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -117,21 +96,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  FutureOr<core::bool>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        final FutureOr<core::bool>#t6 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-        if(#t6 is asy::Future<core::bool>) {
-          [yield] let dynamic #t7 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-        }
-        else {
-          :async_temporary_0 = #t6;
-        }
-        :return_value = :async_temporary_0;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,21 +129,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  FutureOr<core::bool>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-        final FutureOr<core::bool>#t9 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-        if(#t9 is asy::Future<core::bool>) {
-          [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-        }
-        else {
-          :async_temporary_0 = #t9;
-        }
-        :return_value = :async_temporary_0;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -189,7 +150,7 @@
   return :async_future;
 }
 static method test5() → asy::Future<core::bool>
-  return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+  return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
 Future<bool> test5() => getFutureNull(); // error
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -203,21 +164,11 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<core::bool>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L5:
       {
-        final asy::Future<core::bool> #t12 = self::getFutureBool();
-        if(#t12 is asy::Future<core::bool>) {
-          [yield] let dynamic #t13 = asy::_awaitHelper(#t12, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-        }
-        else {
-          :async_temporary_0 = #t12;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = self::getFutureBool();
         break #L5;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -253,21 +204,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          FutureOr<core::bool>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L7:
               {
-                [yield] let dynamic #t14 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                final FutureOr<core::bool>#t15 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-                if(#t15 is asy::Future<core::bool>) {
-                  [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t15;
-                }
-                :return_value = :async_temporary_0;
+                [yield] let dynamic #t4 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L7;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -295,21 +237,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          FutureOr<core::bool>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L8:
               {
-                [yield] let dynamic #t17 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                final FutureOr<core::bool>#t18 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
-                if(#t18 is asy::Future<core::bool>) {
-                  [yield] let dynamic #t19 = asy::_awaitHelper(#t18, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t18;
-                }
-                :return_value = :async_temporary_0;
+                [yield] let dynamic #t5 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L8;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -325,7 +258,7 @@
           return :async_future;
         }
         function test5() → asy::Future<core::bool>
-          return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+          return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> test5() => getFutureNull(); // error
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -339,21 +272,11 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          FutureOr<core::bool>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L9:
               {
-                final asy::Future<core::bool> #t21 = self::getFutureBool();
-                if(#t21 is asy::Future<core::bool>) {
-                  [yield] let dynamic #t22 = asy::_awaitHelper(#t21, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t21;
-                }
-                :return_value = :async_temporary_0;
+                :return_value = self::getFutureBool();
                 break #L9;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -368,7 +291,7 @@
           :is_sync = true;
           return :async_future;
         }
-        asy::Future<core::bool> var1 = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var1 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
                                                    ^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -380,21 +303,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L10:
               {
-                [yield] let dynamic #t24 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                final dynamic #t25 = :result;
-                if(#t25 is asy::Future<dynamic>) {
-                  [yield] let dynamic #t26 = asy::_awaitHelper(#t25, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = :result;
-                }
-                else {
-                  :async_temporary_0 = #t25;
-                }
-                :return_value = :async_temporary_0;
+                [yield] let dynamic #t8 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+                :return_value = :result;
                 break #L10;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -411,7 +325,7 @@
         }).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
         core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        asy::Future<core::bool> var4 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var4 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
                                                          ^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -423,21 +337,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L11:
               {
-                [yield] let dynamic #t28 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                final dynamic #t29 = :result;
-                if(#t29 is asy::Future<dynamic>) {
-                  [yield] let dynamic #t30 = asy::_awaitHelper(#t29, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = :result;
-                }
-                else {
-                  :async_temporary_0 = #t29;
-                }
-                :return_value = :async_temporary_0;
+                [yield] let dynamic #t10 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+                :return_value = :result;
                 break #L11;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -452,7 +357,7 @@
           :is_sync = true;
           return :async_future;
         }).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
-        asy::Future<core::bool> var5 = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+        asy::Future<core::bool> var5 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -465,21 +370,11 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L12:
               {
-                final asy::Future<core::bool> #t32 = self::getFutureBool();
-                if(#t32 is asy::Future<core::bool>) {
-                  [yield] let dynamic #t33 = asy::_awaitHelper(#t32, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t32;
-                }
-                :return_value = :async_temporary_0;
+                :return_value = self::getFutureBool();
                 break #L12;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
index 58eebef..f0b15fb 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
@@ -34,23 +34,23 @@
     return s.{core::num::+}(1);
   };
   <S extends FutureOr<core::num> = FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num> = FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
-    return let final core::num #t1 = (await t).{core::num::+}(1) in #t1 is asy::Future<core::num> ?{FutureOr<dynamic>} await #t1 : #t1;
+    return (await t).{core::num::+}(1);
   };
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num? = core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num? = core::num?>(S% s) → core::num {
-    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
              ^" in s.{core::num::+}(1);
   };
   <S extends FutureOr<core::num?> = FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?> = FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
-    return let final core::num #t3 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^" in (await t).{core::num::+}(1) in #t3 is asy::Future<core::num> ?{FutureOr<dynamic>} await #t3 : #t3;
+                     ^" in (await t).{core::num::+}(1);
   };
 }
 static method test3<S extends core::num? = core::num?>(self::test3::S% s) → dynamic
-  return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
                                 ^" in s.{core::num::+}(1);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
index b08be8f..b287a57 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -43,21 +43,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<dynamic>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L1:
         {
           [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          final core::num #t2 = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
-          if(#t2 is asy::Future<core::num>) {
-            [yield] let dynamic #t3 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::num>(:result);
-          }
-          else {
-            :async_temporary_0 = #t2;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -75,7 +66,7 @@
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num? = core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num? = core::num?>(S% s) → core::num {
-    return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
              ^" in s.{core::num::+}(1);
   };
@@ -88,24 +79,15 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<dynamic>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L2:
         {
-          final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+          final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
                      ^";
-          [yield] let dynamic #t6 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          final core::num #t7 = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
-          if(#t7 is asy::Future<core::num>) {
-            [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::num>(:result);
-          }
-          else {
-            :async_temporary_0 = #t7;
-          }
-          :return_value = :async_temporary_0;
+          [yield] let dynamic #t4 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+          :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -122,7 +104,7 @@
   };
 }
 static method test3<S extends core::num? = core::num?>(self::test3::S% s) → dynamic
-  return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
                                 ^" in s.{core::num::+}(1);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
index 58eebef..f0b15fb 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
@@ -34,23 +34,23 @@
     return s.{core::num::+}(1);
   };
   <S extends FutureOr<core::num> = FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num> = FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
-    return let final core::num #t1 = (await t).{core::num::+}(1) in #t1 is asy::Future<core::num> ?{FutureOr<dynamic>} await #t1 : #t1;
+    return (await t).{core::num::+}(1);
   };
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num? = core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num? = core::num?>(S% s) → core::num {
-    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
              ^" in s.{core::num::+}(1);
   };
   <S extends FutureOr<core::num?> = FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?> = FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
-    return let final core::num #t3 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
-                     ^" in (await t).{core::num::+}(1) in #t3 is asy::Future<core::num> ?{FutureOr<dynamic>} await #t3 : #t3;
+                     ^" in (await t).{core::num::+}(1);
   };
 }
 static method test3<S extends core::num? = core::num?>(self::test3::S% s) → dynamic
-  return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
                                 ^" in s.{core::num::+}(1);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
index b08be8f..b287a57 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -43,21 +43,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<dynamic>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L1:
         {
           [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          final core::num #t2 = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
-          if(#t2 is asy::Future<core::num>) {
-            [yield] let dynamic #t3 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::num>(:result);
-          }
-          else {
-            :async_temporary_0 = #t2;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
           break #L1;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -75,7 +66,7 @@
 }
 static method test2(self::C<core::num?> c) → dynamic {
   <S extends core::num? = core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num? = core::num?>(S% s) → core::num {
-    return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
     return s + 1; // error
              ^" in s.{core::num::+}(1);
   };
@@ -88,24 +79,15 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    FutureOr<dynamic>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L2:
         {
-          final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+          final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
                      ^";
-          [yield] let dynamic #t6 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          final core::num #t7 = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
-          if(#t7 is asy::Future<core::num>) {
-            [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::num>(:result);
-          }
-          else {
-            :async_temporary_0 = #t7;
-          }
-          :return_value = :async_temporary_0;
+          [yield] let dynamic #t4 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+          :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -122,7 +104,7 @@
   };
 }
 static method test3<S extends core::num? = core::num?>(self::test3::S% s) → dynamic
-  return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
 test3<S extends num?>(S s) => s + 1; // error
                                 ^" in s.{core::num::+}(1);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
index c1d787d..aaf931d 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
@@ -7,6 +7,6 @@
   return null;
 static method fn() → asy::Future<core::Object> async {
   core::Object o = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
-  return let final dynamic #t1 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> in #t1 is asy::Future<core::Object> ?{FutureOr<core::Object>} await #t1 : #t1;
+  return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
index b5edde0..4e127a6 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 static method getNull() → dynamic
   return null;
@@ -15,7 +14,6 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  FutureOr<core::Object>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L1:
@@ -23,15 +21,7 @@
         [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
         core::Object o = let dynamic #t2 = :result in #t2.==(null) ?{core::Object} #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object : #t2{core::Object};
         [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        final FutureOr<core::Object>#t4 = let dynamic #t5 = :result in #t5.==(null) ?{FutureOr<core::Object>} #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t5{FutureOr<core::Object>};
-        if(#t4 is asy::Future<core::Object>) {
-          [yield] let dynamic #t6 = asy::_awaitHelper(#t4, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::Object>(:result);
-        }
-        else {
-          :async_temporary_0 = #t4;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = let dynamic #t4 = :result in #t4.==(null) ?{FutureOr<core::Object>} #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t4{FutureOr<core::Object>};
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
index c1d787d..aaf931d 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
@@ -7,6 +7,6 @@
   return null;
 static method fn() → asy::Future<core::Object> async {
   core::Object o = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
-  return let final dynamic #t1 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> in #t1 is asy::Future<core::Object> ?{FutureOr<core::Object>} await #t1 : #t1;
+  return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
index 36497a3..e61b30d 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 static method getNull() → dynamic
   return null;
@@ -15,7 +14,6 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  FutureOr<core::Object>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L1:
@@ -23,15 +21,7 @@
         [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
         core::Object o = :result;
         [yield] let dynamic #t2 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        final FutureOr<core::Object>#t3 = :result;
-        if(#t3 is asy::Future<core::Object>) {
-          [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<core::Object>(:result);
-        }
-        else {
-          :async_temporary_0 = #t3;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = :result;
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
index e446f7c..e5372a7 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
@@ -42,11 +42,11 @@
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final self::Divergent<core::int> #t2 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>> in #t2 is asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> ?{FutureOr<dynamic>} await #t2 : #t2).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
deleted file mode 100644
index 5ae2bec..0000000
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
+++ /dev/null
@@ -1,126 +0,0 @@
-library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
-//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-//  - 'Future' is from 'dart:async'.
-//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-//                                                          ^
-//
-// pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
-//  - 'Future' is from 'dart:async'.
-//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-//                                                                           ^
-//
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-
-import "dart:async";
-
-class Divergent<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>> {
-  synthetic constructor •() → self::Divergent<self::Divergent::T%>
-    : super core::Object::•()
-    ;
-  method noSuchMethod(core::Invocation invocation) → dynamic
-    return super.{core::Object::noSuchMethod}(invocation);
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-}
-static method test() → dynamic /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L1:
-      {
-        asy::Future<self::Divergent<self::Divergent<core::int>>> x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
- - 'Future' is from 'dart:async'.
- - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* originally async */ {
-          final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
-          core::bool* :is_sync = false;
-          FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-            try {
-              #L2:
-              {
-                final self::Divergent<core::int> #t2 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
- - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
- - 'Future' is from 'dart:async'.
-  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>;
-                if(#t2 is asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>) {
-                  [yield] let dynamic #t4 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<self::Divergent<self::Divergent<core::int>>>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t2;
-                }
-                :return_value = :async_temporary_0;
-                break #L2;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op.call();
-          :is_sync = true;
-          return :async_future;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → dynamic {}
-
-constants  {
-  #C1 = null
-  #C2 = #catchError
-  #C3 = <core::Type*>[]
-  #C4 = #test
-  #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #timeout
-  #C9 = #onTimeout
-  #C10 = #then
-  #C11 = #onError
-  #C12 = #asStream
-}
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
index e446f7c..e5372a7 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
@@ -42,11 +42,11 @@
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final self::Divergent<core::int> #t2 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>> in #t2 is asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> ?{FutureOr<dynamic>} await #t2 : #t2).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
deleted file mode 100644
index 5ae2bec..0000000
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
+++ /dev/null
@@ -1,126 +0,0 @@
-library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
-//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-//  - 'Future' is from 'dart:async'.
-//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-//                                                          ^
-//
-// pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
-//  - 'Future' is from 'dart:async'.
-//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-//                                                                           ^
-//
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-
-import "dart:async";
-
-class Divergent<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>> {
-  synthetic constructor •() → self::Divergent<self::Divergent::T%>
-    : super core::Object::•()
-    ;
-  method noSuchMethod(core::Invocation invocation) → dynamic
-    return super.{core::Object::noSuchMethod}(invocation);
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
-    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-}
-static method test() → dynamic /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L1:
-      {
-        asy::Future<self::Divergent<self::Divergent<core::int>>> x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
- - 'Future' is from 'dart:async'.
- - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* originally async */ {
-          final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
-          core::bool* :is_sync = false;
-          FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
-          (dynamic) → dynamic :async_op_then;
-          (core::Object, core::StackTrace) → dynamic :async_op_error;
-          core::int :await_jump_var = 0;
-          dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-            try {
-              #L2:
-              {
-                final self::Divergent<core::int> #t2 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
- - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
- - 'Future' is from 'dart:async'.
-  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>;
-                if(#t2 is asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>) {
-                  [yield] let dynamic #t4 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
-                  :async_temporary_0 = _in::unsafeCast<self::Divergent<self::Divergent<core::int>>>(:result);
-                }
-                else {
-                  :async_temporary_0 = #t2;
-                }
-                :return_value = :async_temporary_0;
-                break #L2;
-              }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-              return;
-            }
-            on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-              asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-            }
-          :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-          :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op.call();
-          :is_sync = true;
-          return :async_future;
-        }).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → dynamic {}
-
-constants  {
-  #C1 = null
-  #C2 = #catchError
-  #C3 = <core::Type*>[]
-  #C4 = #test
-  #C5 = #whenComplete
-  #C6 = <dynamic>[]
-  #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
-  #C8 = #timeout
-  #C9 = #onTimeout
-  #C10 = #then
-  #C11 = #onError
-  #C12 = #asStream
-}
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
index eaaabba4..1d21b07 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
@@ -11,6 +11,6 @@
   };
   (dynamic _) → asy::Future<core::int?> async {
     if(b)
-      return let final core::int #t1 = 42 in #t1 is asy::Future<core::int?> ?{FutureOr<dynamic>} await #t1 : #t1;
+      return 42;
   };
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
index 1509333..0ab4a75 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
@@ -29,22 +28,12 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L2:
               {
                 if(b) {
-                  final core::int #t1 = 42;
-                  if(#t1 is asy::Future<core::int?>) {
-                    [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-                  }
-                  else {
-                    :async_temporary_0 = #t1;
-                  }
-                  :return_value = :async_temporary_0;
+                  :return_value = 42;
                   break #L2;
                 }
               }
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
index eaaabba4..1d21b07 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
@@ -11,6 +11,6 @@
   };
   (dynamic _) → asy::Future<core::int?> async {
     if(b)
-      return let final core::int #t1 = 42 in #t1 is asy::Future<core::int?> ?{FutureOr<dynamic>} await #t1 : #t1;
+      return 42;
   };
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
index 1509333..0ab4a75 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
-import "dart:_internal" as _in;
 
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
@@ -29,22 +28,12 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          dynamic :saved_try_context_var0;
-          FutureOr<dynamic>:async_temporary_0;
           function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
             try {
               #L2:
               {
                 if(b) {
-                  final core::int #t1 = 42;
-                  if(#t1 is asy::Future<core::int?>) {
-                    [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-                  }
-                  else {
-                    :async_temporary_0 = #t1;
-                  }
-                  :return_value = :async_temporary_0;
+                  :return_value = 42;
                   break #L2;
                 }
               }
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
index 17dcee5..df47af6 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
@@ -120,7 +120,7 @@
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
-  return let final core::String #t2 = "hest" in #t2 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t2 : #t2;
+  return "hest";
 }
 static method fisk() → dynamic async {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
@@ -129,7 +129,7 @@
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
-  late core::Function f = () → asy::Future<dynamic> async => let final dynamic #t3 = await self::hest() in #t3 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t3 : #t3;
+  late core::Function f = () → asy::Future<dynamic> async => await self::hest();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
index 53a4028..2aba575 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -135,8 +135,6 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  FutureOr<dynamic>:async_temporary_0;
-  FutureOr<dynamic>:async_temporary_1;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L1:
@@ -164,15 +162,7 @@
               :result;
             }
         }
-        final core::String #t5 = "hest";
-        if(#t5 is asy::Future<dynamic>) {
-          [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_1 = _in::unsafeCast<core::String>(:result);
-        }
-        else {
-          :async_temporary_1 = #t5;
-        }
-        :return_value = :async_temporary_1;
+        :return_value = "hest";
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -219,21 +209,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            FutureOr<dynamic>:async_temporary_0;
             function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t7 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  final dynamic #t8 = :result;
-                  if(#t8 is asy::Future<dynamic>) {
-                    [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = :result;
-                  }
-                  else {
-                    :async_temporary_0 = #t8;
-                  }
-                  :return_value = :async_temporary_0;
+                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
+                  :return_value = :result;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
index 17dcee5..df47af6 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
@@ -120,7 +120,7 @@
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
-  return let final core::String #t2 = "hest" in #t2 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t2 : #t2;
+  return "hest";
 }
 static method fisk() → dynamic async {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
@@ -129,7 +129,7 @@
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
-  late core::Function f = () → asy::Future<dynamic> async => let final dynamic #t3 = await self::hest() in #t3 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t3 : #t3;
+  late core::Function f = () → asy::Future<dynamic> async => await self::hest();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index 53a4028..2aba575 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -135,8 +135,6 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  FutureOr<dynamic>:async_temporary_0;
-  FutureOr<dynamic>:async_temporary_1;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L1:
@@ -164,15 +162,7 @@
               :result;
             }
         }
-        final core::String #t5 = "hest";
-        if(#t5 is asy::Future<dynamic>) {
-          [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_1 = _in::unsafeCast<core::String>(:result);
-        }
-        else {
-          :async_temporary_1 = #t5;
-        }
-        :return_value = :async_temporary_1;
+        :return_value = "hest";
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -219,21 +209,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            FutureOr<dynamic>:async_temporary_0;
             function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t7 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  final dynamic #t8 = :result;
-                  if(#t8 is asy::Future<dynamic>) {
-                    [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
-                    :async_temporary_0 = :result;
-                  }
-                  else {
-                    :async_temporary_0 = #t8;
-                  }
-                  :return_value = :async_temporary_0;
+                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
+                  :return_value = :result;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
index 7fe1ab7..2c50b42 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
@@ -28,6 +28,6 @@
   }, (core::Object e, core::StackTrace s) → void {
     completer.{asy::Completer::completeError}(e, s);
   });
-  return let final asy::Future<void> #t1 = completer.{asy::Completer::future} in #t1 is asy::Future<void> ?{FutureOr<void>} await #t1 : #t1;
+  return completer.{asy::Completer::future};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
index d88bd46..b9094ae 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
@@ -106,8 +106,6 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<void>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L4:
@@ -144,15 +142,7 @@
         }, (core::Object e, core::StackTrace s) → void {
           completer.{asy::Completer::completeError}(e, s);
         });
-        final asy::Future<void> #t7 = completer.{asy::Completer::future};
-        if(#t7 is asy::Future<void>) {
-          [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<void>(:result);
-        }
-        else {
-          :async_temporary_0 = #t7;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = completer.{asy::Completer::future};
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
index 7fe1ab7..2c50b42 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
@@ -28,6 +28,6 @@
   }, (core::Object e, core::StackTrace s) → void {
     completer.{asy::Completer::completeError}(e, s);
   });
-  return let final asy::Future<void> #t1 = completer.{asy::Completer::future} in #t1 is asy::Future<void> ?{FutureOr<void>} await #t1 : #t1;
+  return completer.{asy::Completer::future};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
index d88bd46..b9094ae 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
@@ -106,8 +106,6 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<void>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L4:
@@ -144,15 +142,7 @@
         }, (core::Object e, core::StackTrace s) → void {
           completer.{asy::Completer::completeError}(e, s);
         });
-        final asy::Future<void> #t7 = completer.{asy::Completer::future};
-        if(#t7 is asy::Future<void>) {
-          [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<void>(:result);
-        }
-        else {
-          :async_temporary_0 = #t7;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = completer.{asy::Completer::future};
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart b/pkg/front_end/testcases/nnbd/return_from_async.dart
deleted file mode 100644
index 93e646e..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2020, 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 'dart:async';
-
-bool caughtFutureOrInt = false;
-
-FutureOr<int> throwFutureOrInt() async {
-  throw 'FutureOr<int>';
-}
-
-Future<int> callFutureOrInt() async {
-  try {
-    return throwFutureOrInt();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtFutureOrInt = true;
-    return 0;
-  }
-}
-
-bool caughtInt = false;
-
-int throwInt() {
-  throw 'int';
-}
-
-Future<int> callInt() async {
-  try {
-    return throwInt();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtInt = true;
-    return 0;
-  }
-}
-
-bool caughtFutureInt = false;
-
-Future<int> throwFutureInt() async {
-  throw 'Future<int>';
-}
-
-Future<int> callFutureInt() async {
-  try {
-    return throwFutureInt();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtFutureInt = true;
-    return 0;
-  }
-}
-
-bool caughtDynamic = false;
-
-dynamic throwDynamic() {
-  throw 'dynamic';
-}
-
-Future<int> callDynamic() async {
-  try {
-    return throwDynamic();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtDynamic = true;
-    return 0;
-  }
-}
-
-bool caughtFutureNum = false;
-
-Future<int> throwFutureNum() async {
-  throw 'Future<num>';
-}
-
-Future<num> callFutureNum() async {
-  try {
-    return throwFutureNum();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtFutureNum = true;
-    return 0;
-  }
-}
-
-void main() async {
-  await callFutureOrInt();
-  if (!caughtFutureOrInt) throw 'Uncaught async return';
-  await callInt();
-  if (!caughtInt) throw 'Uncaught async return';
-  await callFutureInt();
-  if (!caughtFutureInt) throw 'Uncaught async return';
-  await callDynamic();
-  if (!caughtDynamic) throw 'Uncaught async return';
-  await callFutureNum();
-  if (!caughtFutureNum) throw 'Uncaught async return';
-}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.outline.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.outline.expect
deleted file mode 100644
index fce58f8..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.outline.expect
+++ /dev/null
@@ -1,34 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt;
-static field core::bool caughtInt;
-static field core::bool caughtFutureInt;
-static field core::bool caughtDynamic;
-static field core::bool caughtFutureNum;
-static method throwFutureOrInt() → FutureOr<core::int> async 
-  ;
-static method callFutureOrInt() → asy::Future<core::int> async 
-  ;
-static method throwInt() → core::int
-  ;
-static method callInt() → asy::Future<core::int> async 
-  ;
-static method throwFutureInt() → asy::Future<core::int> async 
-  ;
-static method callFutureInt() → asy::Future<core::int> async 
-  ;
-static method throwDynamic() → dynamic
-  ;
-static method callDynamic() → asy::Future<core::int> async 
-  ;
-static method throwFutureNum() → asy::Future<core::int> async 
-  ;
-static method callFutureNum() → asy::Future<core::num> async 
-  ;
-static method main() → void async 
-  ;
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.expect
deleted file mode 100644
index 07f9c6e..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.expect
+++ /dev/null
@@ -1,94 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method throwFutureOrInt() → FutureOr<core::int> async {
-  throw "FutureOr<int>";
-}
-static method callFutureOrInt() → asy::Future<core::int> async {
-  try {
-    return let final FutureOr<core::int>#t1 = self::throwFutureOrInt() in #t1 is asy::Future<core::int> ?{FutureOr<core::int>} await #t1 : #t1;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureOrInt = true;
-    return let final core::int #t2 = 0 in #t2 is asy::Future<core::int> ?{FutureOr<core::int>} await #t2 : #t2;
-  }
-}
-static method throwInt() → core::int {
-  throw "int";
-}
-static method callInt() → asy::Future<core::int> async {
-  try {
-    return let final core::int #t3 = self::throwInt() in #t3 is asy::Future<core::int> ?{FutureOr<core::int>} await #t3 : #t3;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtInt = true;
-    return let final core::int #t4 = 0 in #t4 is asy::Future<core::int> ?{FutureOr<core::int>} await #t4 : #t4;
-  }
-}
-static method throwFutureInt() → asy::Future<core::int> async {
-  throw "Future<int>";
-}
-static method callFutureInt() → asy::Future<core::int> async {
-  try {
-    return let final asy::Future<core::int> #t5 = self::throwFutureInt() in #t5 is asy::Future<core::int> ?{FutureOr<core::int>} await #t5 : #t5;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureInt = true;
-    return let final core::int #t6 = 0 in #t6 is asy::Future<core::int> ?{FutureOr<core::int>} await #t6 : #t6;
-  }
-}
-static method throwDynamic() → dynamic {
-  throw "dynamic";
-}
-static method callDynamic() → asy::Future<core::int> async {
-  try {
-    return let final dynamic #t7 = self::throwDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int> in #t7 is asy::Future<core::int> ?{FutureOr<core::int>} await #t7 : #t7;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtDynamic = true;
-    return let final core::int #t8 = 0 in #t8 is asy::Future<core::int> ?{FutureOr<core::int>} await #t8 : #t8;
-  }
-}
-static method throwFutureNum() → asy::Future<core::int> async {
-  throw "Future<num>";
-}
-static method callFutureNum() → asy::Future<core::num> async {
-  try {
-    return let final asy::Future<core::int> #t9 = self::throwFutureNum() in #t9 is asy::Future<core::num> ?{FutureOr<core::num>} await #t9 : #t9;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureNum = true;
-    return let final core::int #t10 = 0 in #t10 is asy::Future<core::num> ?{FutureOr<core::num>} await #t10 : #t10;
-  }
-}
-static method main() → void async {
-  await self::callFutureOrInt();
-  if(!self::caughtFutureOrInt)
-    throw "Uncaught async return";
-  await self::callInt();
-  if(!self::caughtInt)
-    throw "Uncaught async return";
-  await self::callFutureInt();
-  if(!self::caughtFutureInt)
-    throw "Uncaught async return";
-  await self::callDynamic();
-  if(!self::caughtDynamic)
-    throw "Uncaught async return";
-  await self::callFutureNum();
-  if(!self::caughtFutureNum)
-    throw "Uncaught async return";
-}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.transformed.expect
deleted file mode 100644
index 5bd5d9f..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.transformed.expect
+++ /dev/null
@@ -1,433 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method throwFutureOrInt() → FutureOr<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L1:
-      {
-        throw "FutureOr<int>";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callFutureOrInt() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L2:
-      {
-        try {
-          final FutureOr<core::int>#t1 = self::throwFutureOrInt();
-          if(#t1 is asy::Future<core::int>) {
-            [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t1;
-          }
-          :return_value = :async_temporary_0;
-          break #L2;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureOrInt = true;
-          final core::int #t3 = 0;
-          if(#t3 is asy::Future<core::int>) {
-            [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t3;
-          }
-          :return_value = :async_temporary_2;
-          break #L2;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method throwInt() → core::int {
-  throw "int";
-}
-static method callInt() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L3:
-      {
-        try {
-          final core::int #t5 = self::throwInt();
-          if(#t5 is asy::Future<core::int>) {
-            [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t5;
-          }
-          :return_value = :async_temporary_0;
-          break #L3;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtInt = true;
-          final core::int #t7 = 0;
-          if(#t7 is asy::Future<core::int>) {
-            [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t7;
-          }
-          :return_value = :async_temporary_2;
-          break #L3;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method throwFutureInt() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L4:
-      {
-        throw "Future<int>";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callFutureInt() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L5:
-      {
-        try {
-          final asy::Future<core::int> #t9 = self::throwFutureInt();
-          if(#t9 is asy::Future<core::int>) {
-            [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t9;
-          }
-          :return_value = :async_temporary_0;
-          break #L5;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureInt = true;
-          final core::int #t11 = 0;
-          if(#t11 is asy::Future<core::int>) {
-            [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t11;
-          }
-          :return_value = :async_temporary_2;
-          break #L5;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method throwDynamic() → dynamic {
-  throw "dynamic";
-}
-static method callDynamic() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L6:
-      {
-        try {
-          final FutureOr<core::int>#t13 = self::throwDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int>;
-          if(#t13 is asy::Future<core::int>) {
-            [yield] let dynamic #t14 = asy::_awaitHelper(#t13, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t13;
-          }
-          :return_value = :async_temporary_0;
-          break #L6;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtDynamic = true;
-          final core::int #t15 = 0;
-          if(#t15 is asy::Future<core::int>) {
-            [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t15;
-          }
-          :return_value = :async_temporary_2;
-          break #L6;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method throwFutureNum() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L7:
-      {
-        throw "Future<num>";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callFutureNum() → asy::Future<core::num> /* originally async */ {
-  final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
-  core::bool* :is_sync = false;
-  FutureOr<core::num>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::num>:async_temporary_0;
-  FutureOr<core::num>:async_temporary_1;
-  FutureOr<core::num>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L8:
-      {
-        try {
-          final asy::Future<core::int> #t17 = self::throwFutureNum();
-          if(#t17 is asy::Future<core::num>) {
-            [yield] let dynamic #t18 = asy::_awaitHelper(#t17, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t17;
-          }
-          :return_value = :async_temporary_0;
-          break #L8;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureNum = true;
-          final core::int #t19 = 0;
-          if(#t19 is asy::Future<core::num>) {
-            [yield] let dynamic #t20 = asy::_awaitHelper(#t19, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t19;
-          }
-          :return_value = :async_temporary_2;
-          break #L8;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → void /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L9:
-      {
-        [yield] let dynamic #t21 = asy::_awaitHelper(self::callFutureOrInt(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtFutureOrInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t22 = asy::_awaitHelper(self::callInt(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t23 = asy::_awaitHelper(self::callFutureInt(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtFutureInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t24 = asy::_awaitHelper(self::callDynamic(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtDynamic)
-          throw "Uncaught async return";
-        [yield] let dynamic #t25 = asy::_awaitHelper(self::callFutureNum(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::num>(:result);
-        if(!self::caughtFutureNum)
-          throw "Uncaught async return";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline.expect
deleted file mode 100644
index bc32d23..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline.expect
+++ /dev/null
@@ -1,18 +0,0 @@
-import 'dart:async';
-
-bool caughtFutureOrInt = false;
-FutureOr<int> throwFutureOrInt() async {}
-Future<int> callFutureOrInt() async {}
-bool caughtInt = false;
-int throwInt() {}
-Future<int> callInt() async {}
-bool caughtFutureInt = false;
-Future<int> throwFutureInt() async {}
-Future<int> callFutureInt() async {}
-bool caughtDynamic = false;
-dynamic throwDynamic() {}
-Future<int> callDynamic() async {}
-bool caughtFutureNum = false;
-Future<int> throwFutureNum() async {}
-Future<num> callFutureNum() async {}
-void main() async {}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline_modelled.expect
deleted file mode 100644
index 7a7e905..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,18 +0,0 @@
-import 'dart:async';
-
-Future<int> callDynamic() async {}
-Future<int> callFutureInt() async {}
-Future<int> callFutureOrInt() async {}
-Future<int> callInt() async {}
-Future<int> throwFutureInt() async {}
-Future<int> throwFutureNum() async {}
-Future<num> callFutureNum() async {}
-FutureOr<int> throwFutureOrInt() async {}
-bool caughtDynamic = false;
-bool caughtFutureInt = false;
-bool caughtFutureNum = false;
-bool caughtFutureOrInt = false;
-bool caughtInt = false;
-dynamic throwDynamic() {}
-int throwInt() {}
-void main() async {}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.expect
deleted file mode 100644
index 07f9c6e..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.expect
+++ /dev/null
@@ -1,94 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method throwFutureOrInt() → FutureOr<core::int> async {
-  throw "FutureOr<int>";
-}
-static method callFutureOrInt() → asy::Future<core::int> async {
-  try {
-    return let final FutureOr<core::int>#t1 = self::throwFutureOrInt() in #t1 is asy::Future<core::int> ?{FutureOr<core::int>} await #t1 : #t1;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureOrInt = true;
-    return let final core::int #t2 = 0 in #t2 is asy::Future<core::int> ?{FutureOr<core::int>} await #t2 : #t2;
-  }
-}
-static method throwInt() → core::int {
-  throw "int";
-}
-static method callInt() → asy::Future<core::int> async {
-  try {
-    return let final core::int #t3 = self::throwInt() in #t3 is asy::Future<core::int> ?{FutureOr<core::int>} await #t3 : #t3;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtInt = true;
-    return let final core::int #t4 = 0 in #t4 is asy::Future<core::int> ?{FutureOr<core::int>} await #t4 : #t4;
-  }
-}
-static method throwFutureInt() → asy::Future<core::int> async {
-  throw "Future<int>";
-}
-static method callFutureInt() → asy::Future<core::int> async {
-  try {
-    return let final asy::Future<core::int> #t5 = self::throwFutureInt() in #t5 is asy::Future<core::int> ?{FutureOr<core::int>} await #t5 : #t5;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureInt = true;
-    return let final core::int #t6 = 0 in #t6 is asy::Future<core::int> ?{FutureOr<core::int>} await #t6 : #t6;
-  }
-}
-static method throwDynamic() → dynamic {
-  throw "dynamic";
-}
-static method callDynamic() → asy::Future<core::int> async {
-  try {
-    return let final dynamic #t7 = self::throwDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int> in #t7 is asy::Future<core::int> ?{FutureOr<core::int>} await #t7 : #t7;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtDynamic = true;
-    return let final core::int #t8 = 0 in #t8 is asy::Future<core::int> ?{FutureOr<core::int>} await #t8 : #t8;
-  }
-}
-static method throwFutureNum() → asy::Future<core::int> async {
-  throw "Future<num>";
-}
-static method callFutureNum() → asy::Future<core::num> async {
-  try {
-    return let final asy::Future<core::int> #t9 = self::throwFutureNum() in #t9 is asy::Future<core::num> ?{FutureOr<core::num>} await #t9 : #t9;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureNum = true;
-    return let final core::int #t10 = 0 in #t10 is asy::Future<core::num> ?{FutureOr<core::num>} await #t10 : #t10;
-  }
-}
-static method main() → void async {
-  await self::callFutureOrInt();
-  if(!self::caughtFutureOrInt)
-    throw "Uncaught async return";
-  await self::callInt();
-  if(!self::caughtInt)
-    throw "Uncaught async return";
-  await self::callFutureInt();
-  if(!self::caughtFutureInt)
-    throw "Uncaught async return";
-  await self::callDynamic();
-  if(!self::caughtDynamic)
-    throw "Uncaught async return";
-  await self::callFutureNum();
-  if(!self::caughtFutureNum)
-    throw "Uncaught async return";
-}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.transformed.expect
deleted file mode 100644
index 5bd5d9f..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.transformed.expect
+++ /dev/null
@@ -1,433 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method throwFutureOrInt() → FutureOr<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L1:
-      {
-        throw "FutureOr<int>";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callFutureOrInt() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L2:
-      {
-        try {
-          final FutureOr<core::int>#t1 = self::throwFutureOrInt();
-          if(#t1 is asy::Future<core::int>) {
-            [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t1;
-          }
-          :return_value = :async_temporary_0;
-          break #L2;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureOrInt = true;
-          final core::int #t3 = 0;
-          if(#t3 is asy::Future<core::int>) {
-            [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t3;
-          }
-          :return_value = :async_temporary_2;
-          break #L2;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method throwInt() → core::int {
-  throw "int";
-}
-static method callInt() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L3:
-      {
-        try {
-          final core::int #t5 = self::throwInt();
-          if(#t5 is asy::Future<core::int>) {
-            [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t5;
-          }
-          :return_value = :async_temporary_0;
-          break #L3;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtInt = true;
-          final core::int #t7 = 0;
-          if(#t7 is asy::Future<core::int>) {
-            [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t7;
-          }
-          :return_value = :async_temporary_2;
-          break #L3;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method throwFutureInt() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L4:
-      {
-        throw "Future<int>";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callFutureInt() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L5:
-      {
-        try {
-          final asy::Future<core::int> #t9 = self::throwFutureInt();
-          if(#t9 is asy::Future<core::int>) {
-            [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t9;
-          }
-          :return_value = :async_temporary_0;
-          break #L5;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureInt = true;
-          final core::int #t11 = 0;
-          if(#t11 is asy::Future<core::int>) {
-            [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t11;
-          }
-          :return_value = :async_temporary_2;
-          break #L5;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method throwDynamic() → dynamic {
-  throw "dynamic";
-}
-static method callDynamic() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L6:
-      {
-        try {
-          final FutureOr<core::int>#t13 = self::throwDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int>;
-          if(#t13 is asy::Future<core::int>) {
-            [yield] let dynamic #t14 = asy::_awaitHelper(#t13, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t13;
-          }
-          :return_value = :async_temporary_0;
-          break #L6;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtDynamic = true;
-          final core::int #t15 = 0;
-          if(#t15 is asy::Future<core::int>) {
-            [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t15;
-          }
-          :return_value = :async_temporary_2;
-          break #L6;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method throwFutureNum() → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L7:
-      {
-        throw "Future<num>";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callFutureNum() → asy::Future<core::num> /* originally async */ {
-  final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
-  core::bool* :is_sync = false;
-  FutureOr<core::num>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::num>:async_temporary_0;
-  FutureOr<core::num>:async_temporary_1;
-  FutureOr<core::num>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L8:
-      {
-        try {
-          final asy::Future<core::int> #t17 = self::throwFutureNum();
-          if(#t17 is asy::Future<core::num>) {
-            [yield] let dynamic #t18 = asy::_awaitHelper(#t17, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t17;
-          }
-          :return_value = :async_temporary_0;
-          break #L8;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureNum = true;
-          final core::int #t19 = 0;
-          if(#t19 is asy::Future<core::num>) {
-            [yield] let dynamic #t20 = asy::_awaitHelper(#t19, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t19;
-          }
-          :return_value = :async_temporary_2;
-          break #L8;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → void /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L9:
-      {
-        [yield] let dynamic #t21 = asy::_awaitHelper(self::callFutureOrInt(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtFutureOrInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t22 = asy::_awaitHelper(self::callInt(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t23 = asy::_awaitHelper(self::callFutureInt(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtFutureInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t24 = asy::_awaitHelper(self::callDynamic(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtDynamic)
-          throw "Uncaught async return";
-        [yield] let dynamic #t25 = asy::_awaitHelper(self::callFutureNum(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::num>(:result);
-        if(!self::caughtFutureNum)
-          throw "Uncaught async return";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
index dab461b..70d918b 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -103,7 +103,7 @@
 static method returnAsync4() → FutureOr<core::int?> async {}
 static method returnAsync5() → dynamic async {}
 static method returnAsync6() → asy::Future<core::int?> async {
-  return let final Null #t6 = null in #t6 is asy::Future<core::int?> ?{FutureOr<core::int?>} await #t6 : #t6;
+  return null;
 }
 static method returnAsync7() → asy::Future<core::int?> async {}
 static method yieldSync() → core::Iterable<dynamic> sync* {}
@@ -133,7 +133,7 @@
     default:
       {}
   }
-  return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
 Enum caseReturn2(Enum e) /* error */ {
      ^" in null;
@@ -141,38 +141,38 @@
 static method localFunctions() → dynamic {
   function returnImplicit() → core::String {
     core::print("foo");
-    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnImplicit() /* error */ {
   ^" in null;
   }
   function returnExplicit() → core::String {
     core::print("foo");
-    return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null as{TypeError,ForNonNullableByDefault} core::String;
   }
   function returnMixed(core::bool b) → core::String {
     if(b) {
       core::print("foo");
-      return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
       return null; // error
              ^" in null as{TypeError,ForNonNullableByDefault} core::String;
     }
-    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
   function returnAsync1() → asy::Future<dynamic> async {}
   function returnAsync2() → FutureOr<dynamic> async {}
   function returnAsync3() → FutureOr<core::int> async {
-    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
   }
   function returnAsync4() → FutureOr<core::int?> async {}
   function returnAsync5() → asy::Future<Null> async {}
   function returnAsync6() → asy::Future<core::int?> async {
-    return let final Null #t13 = null in #t13 is asy::Future<core::int?> ?{FutureOr<core::int?>} await #t13 : #t13;
+    return null;
   }
   function returnAsync7() → asy::Future<core::int?> async {}
   function yieldSync() → core::Iterable<dynamic> sync* {}
@@ -202,7 +202,7 @@
       default:
         {}
     }
-    return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
   Enum caseReturn2(Enum e) /* error */ {
   ^" in null;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index af2d2ae..2b1a3dc 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -55,7 +55,6 @@
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
-import "dart:_internal" as _in;
 
 import "dart:async";
 
@@ -227,21 +226,11 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<core::int?>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L6:
       {
-        final Null #t8 = null;
-        if(#t8 is asy::Future<core::int?>) {
-          [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<Null>(:result);
-        }
-        else {
-          :async_temporary_0 = #t8;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = null;
         break #L6;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -343,7 +332,7 @@
     default:
       {}
   }
-  return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
 Enum caseReturn2(Enum e) /* error */ {
      ^" in null;
@@ -351,24 +340,24 @@
 static method localFunctions() → dynamic {
   function returnImplicit() → core::String {
     core::print("foo");
-    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnImplicit() /* error */ {
   ^" in null;
   }
   function returnExplicit() → core::String {
     core::print("foo");
-    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
-           ^" in let Null #t13 = null in #t13.==(null) ?{core::String} #t13 as{TypeError,ForNonNullableByDefault} core::String : #t13{core::String};
+           ^" in let Null #t11 = null in #t11.==(null) ?{core::String} #t11 as{TypeError,ForNonNullableByDefault} core::String : #t11{core::String};
   }
   function returnMixed(core::bool b) → core::String {
     if(b) {
       core::print("foo");
-      return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
       return null; // error
-             ^" in let Null #t15 = null in #t15.==(null) ?{core::String} #t15 as{TypeError,ForNonNullableByDefault} core::String : #t15{core::String};
+             ^" in let Null #t13 = null in #t13.==(null) ?{core::String} #t13 as{TypeError,ForNonNullableByDefault} core::String : #t13{core::String};
     }
-    return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
@@ -432,7 +421,7 @@
       try {
         #L15:
         {
-          :return_value = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+          :return_value = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
           break #L15;
@@ -505,21 +494,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::int?>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L18:
         {
-          final Null #t18 = null;
-          if(#t18 is asy::Future<core::int?>) {
-            [yield] let dynamic #t19 = asy::_awaitHelper(#t18, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Null>(:result);
-          }
-          else {
-            :async_temporary_0 = #t18;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = null;
           break #L18;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -621,7 +600,7 @@
       default:
         {}
     }
-    return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+    return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
   Enum caseReturn2(Enum e) /* error */ {
   ^" in null;
@@ -663,7 +642,7 @@
 Evaluated: MethodInvocation @ org-dartlang-testcase:///return_null.dart:75:14 -> BoolConstant(true)
 Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:75:14 -> NullConstant(null)
 Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:75:14 -> NullConstant(null)
-Extra constant evaluation: evaluated: 422, effectively constant: 12
+Extra constant evaluation: evaluated: 394, effectively constant: 12
 
 
 Constructor coverage from constants:
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
index aef28a4..0513741 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -104,7 +104,7 @@
 static method returnAsync4() → FutureOr<core::int?> async {}
 static method returnAsync5() → dynamic async {}
 static method returnAsync6() → asy::Future<core::int?> async {
-  return let final Null #t6 = null in #t6 is asy::Future<core::int?> ?{FutureOr<core::int?>} await #t6 : #t6;
+  return null;
 }
 static method returnAsync7() → asy::Future<core::int?> async {}
 static method yieldSync() → core::Iterable<dynamic> sync* {}
@@ -137,7 +137,7 @@
     default:
       {}
   }
-  return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
 Enum caseReturn2(Enum e) /* error */ {
      ^" in null;
@@ -145,38 +145,38 @@
 static method localFunctions() → dynamic {
   function returnImplicit() → core::String {
     core::print("foo");
-    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnImplicit() /* error */ {
   ^" in null;
   }
   function returnExplicit() → core::String {
     core::print("foo");
-    return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null as{TypeError,ForNonNullableByDefault} core::String;
   }
   function returnMixed(core::bool b) → core::String {
     if(b) {
       core::print("foo");
-      return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
       return null; // error
              ^" in null as{TypeError,ForNonNullableByDefault} core::String;
     }
-    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
   function returnAsync1() → asy::Future<dynamic> async {}
   function returnAsync2() → FutureOr<dynamic> async {}
   function returnAsync3() → FutureOr<core::int> async {
-    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
   }
   function returnAsync4() → FutureOr<core::int?> async {}
   function returnAsync5() → asy::Future<Null> async {}
   function returnAsync6() → asy::Future<core::int?> async {
-    return let final Null #t13 = null in #t13 is asy::Future<core::int?> ?{FutureOr<core::int?>} await #t13 : #t13;
+    return null;
   }
   function returnAsync7() → asy::Future<core::int?> async {}
   function yieldSync() → core::Iterable<dynamic> sync* {}
@@ -209,7 +209,7 @@
       default:
         {}
     }
-    return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
   Enum caseReturn2(Enum e) /* error */ {
   ^" in null;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index dba40e5..3643cf7 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -227,21 +227,11 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  FutureOr<core::int?>:async_temporary_0;
   function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
     try {
       #L6:
       {
-        final Null #t6 = null;
-        if(#t6 is asy::Future<core::int?>) {
-          [yield] let dynamic #t7 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = _in::unsafeCast<Null>(:result);
-        }
-        else {
-          :async_temporary_0 = #t6;
-        }
-        :return_value = :async_temporary_0;
+        :return_value = null;
         break #L6;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -346,7 +336,7 @@
     default:
       {}
   }
-  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
 Enum caseReturn2(Enum e) /* error */ {
      ^" in null;
@@ -354,24 +344,24 @@
 static method localFunctions() → dynamic {
   function returnImplicit() → core::String {
     core::print("foo");
-    return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnImplicit() /* error */ {
   ^" in null;
   }
   function returnExplicit() → core::String {
     core::print("foo");
-    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
     return null; // error
            ^" in null;
   }
   function returnMixed(core::bool b) → core::String {
     if(b) {
       core::print("foo");
-      return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
       return null; // error
              ^" in null;
     }
-    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
@@ -435,7 +425,7 @@
       try {
         #L16:
         {
-          :return_value = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+          :return_value = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
           break #L16;
@@ -508,21 +498,11 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    dynamic :saved_try_context_var0;
-    FutureOr<core::int?>:async_temporary_0;
     function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
       try {
         #L19:
         {
-          final Null #t14 = null;
-          if(#t14 is asy::Future<core::int?>) {
-            [yield] let dynamic #t15 = asy::_awaitHelper(#t14, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<Null>(:result);
-          }
-          else {
-            :async_temporary_0 = #t14;
-          }
-          :return_value = :async_temporary_0;
+          :return_value = null;
           break #L19;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -627,7 +607,7 @@
       default:
         {}
     }
-    return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
   Enum caseReturn2(Enum e) /* error */ {
   ^" in null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart
deleted file mode 100644
index 5b167d0..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2020, 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 'dart:async';
-import 'return_from_async_lib.dart';
-
-abstract class Class {
-  FutureOr<int> throwFutureOrInt();
-
-  int throwInt();
-
-  Future<int> throwFutureInt();
-
-  dynamic throwDynamic();
-
-  Future<num> throwFutureNum();
-}
-
-bool caughtFutureOrInt = false;
-
-Future<int> callFutureOrInt(Class c) async {
-  try {
-    return c.throwFutureOrInt();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtFutureOrInt = true;
-    return 0;
-  }
-}
-
-bool caughtInt = false;
-
-Future<int> callInt(Class c) async {
-  try {
-    return c.throwInt();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtInt = true;
-    return 0;
-  }
-}
-
-bool caughtFutureInt = false;
-
-Future<int> callFutureInt(Class c) async {
-  try {
-    return c.throwFutureInt();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtFutureInt = true;
-    return 0;
-  }
-}
-
-bool caughtDynamic = false;
-
-Future<int> callDynamic(Class c) async {
-  try {
-    return c.throwDynamic();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtDynamic = true;
-    return 0;
-  }
-}
-
-bool caughtFutureNum = false;
-
-Future<num> callFutureNum(Class c) async {
-  try {
-    return c.throwFutureNum();
-  } catch (e) {
-    print('Caught "$e"');
-    caughtFutureNum = true;
-    return 0;
-  }
-}
-
-void main() async {
-  Class c = new Subclass();
-  await callFutureOrInt(c);
-  if (!caughtFutureOrInt) throw 'Uncaught async return';
-  await callInt(c);
-  if (!caughtInt) throw 'Uncaught async return';
-  await callFutureInt(c);
-  if (!caughtFutureInt) throw 'Uncaught async return';
-  await callDynamic(c);
-  if (!caughtDynamic) throw 'Uncaught async return';
-  await callFutureNum(c);
-  if (!caughtFutureNum) throw 'Uncaught async return';
-}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline.expect
deleted file mode 100644
index 66339b5..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline.expect
+++ /dev/null
@@ -1,22 +0,0 @@
-import 'dart:async';
-import 'return_from_async_lib.dart';
-
-abstract class Class {
-  FutureOr<int> throwFutureOrInt();
-  int throwInt();
-  Future<int> throwFutureInt();
-  dynamic throwDynamic();
-  Future<num> throwFutureNum();
-}
-
-bool caughtFutureOrInt = false;
-Future<int> callFutureOrInt(Class c) async {}
-bool caughtInt = false;
-Future<int> callInt(Class c) async {}
-bool caughtFutureInt = false;
-Future<int> callFutureInt(Class c) async {}
-bool caughtDynamic = false;
-Future<int> callDynamic(Class c) async {}
-bool caughtFutureNum = false;
-Future<num> callFutureNum(Class c) async {}
-void main() async {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline_modelled.expect
deleted file mode 100644
index 3c8dcd7..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,23 +0,0 @@
-import 'dart:async';
-import 'return_from_async_lib.dart';
-
-Future<int> callDynamic(Class c) async {}
-Future<int> callFutureInt(Class c) async {}
-Future<int> callFutureOrInt(Class c) async {}
-Future<int> callInt(Class c) async {}
-Future<num> callFutureNum(Class c) async {}
-
-abstract class Class {
-  Future<int> throwFutureInt();
-  Future<num> throwFutureNum();
-  FutureOr<int> throwFutureOrInt();
-  dynamic throwDynamic();
-  int throwInt();
-}
-
-bool caughtDynamic = false;
-bool caughtFutureInt = false;
-bool caughtFutureNum = false;
-bool caughtFutureOrInt = false;
-bool caughtInt = false;
-void main() async {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.expect
deleted file mode 100644
index 0a614de..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.expect
+++ /dev/null
@@ -1,122 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "return_from_async_lib.dart" as ret;
-
-import "dart:async";
-import "org-dartlang-testcase:///return_from_async_lib.dart";
-
-abstract class Class extends core::Object {
-  synthetic constructor •() → self::Class
-    : super core::Object::•()
-    ;
-  abstract method throwFutureOrInt() → FutureOr<core::int>;
-  abstract method throwInt() → core::int;
-  abstract method throwFutureInt() → asy::Future<core::int>;
-  abstract method throwDynamic() → dynamic;
-  abstract method throwFutureNum() → asy::Future<core::num>;
-}
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method callFutureOrInt(self::Class c) → asy::Future<core::int> async {
-  try {
-    return let final FutureOr<core::int>#t1 = c.{self::Class::throwFutureOrInt}() in #t1 is asy::Future<core::int> ?{FutureOr<core::int>} await #t1 : #t1;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureOrInt = true;
-    return let final core::int #t2 = 0 in #t2 is asy::Future<core::int> ?{FutureOr<core::int>} await #t2 : #t2;
-  }
-}
-static method callInt(self::Class c) → asy::Future<core::int> async {
-  try {
-    return let final core::int #t3 = c.{self::Class::throwInt}() in #t3 is asy::Future<core::int> ?{FutureOr<core::int>} await #t3 : #t3;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtInt = true;
-    return let final core::int #t4 = 0 in #t4 is asy::Future<core::int> ?{FutureOr<core::int>} await #t4 : #t4;
-  }
-}
-static method callFutureInt(self::Class c) → asy::Future<core::int> async {
-  try {
-    return let final asy::Future<core::int> #t5 = c.{self::Class::throwFutureInt}() in #t5 is asy::Future<core::int> ?{FutureOr<core::int>} await #t5 : #t5;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureInt = true;
-    return let final core::int #t6 = 0 in #t6 is asy::Future<core::int> ?{FutureOr<core::int>} await #t6 : #t6;
-  }
-}
-static method callDynamic(self::Class c) → asy::Future<core::int> async {
-  try {
-    return let final dynamic #t7 = c.{self::Class::throwDynamic}() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int> in #t7 is asy::Future<core::int> ?{FutureOr<core::int>} await #t7 : #t7;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtDynamic = true;
-    return let final core::int #t8 = 0 in #t8 is asy::Future<core::int> ?{FutureOr<core::int>} await #t8 : #t8;
-  }
-}
-static method callFutureNum(self::Class c) → asy::Future<core::num> async {
-  try {
-    return let final asy::Future<core::num> #t9 = c.{self::Class::throwFutureNum}() in #t9 is asy::Future<core::num> ?{FutureOr<core::num>} await #t9 : #t9;
-  }
-  on core::Object catch(final core::Object e) {
-    core::print("Caught \"${e}\"");
-    self::caughtFutureNum = true;
-    return let final core::int #t10 = 0 in #t10 is asy::Future<core::num> ?{FutureOr<core::num>} await #t10 : #t10;
-  }
-}
-static method main() → void async {
-  self::Class c = new ret::Subclass::•();
-  await self::callFutureOrInt(c);
-  if(!self::caughtFutureOrInt)
-    throw "Uncaught async return";
-  await self::callInt(c);
-  if(!self::caughtInt)
-    throw "Uncaught async return";
-  await self::callFutureInt(c);
-  if(!self::caughtFutureInt)
-    throw "Uncaught async return";
-  await self::callDynamic(c);
-  if(!self::caughtDynamic)
-    throw "Uncaught async return";
-  await self::callFutureNum(c);
-  if(!self::caughtFutureNum)
-    throw "Uncaught async return";
-}
-
-library /*isNonNullableByDefault*/;
-import self as ret;
-import "dart:core" as core;
-import "return_from_async.dart" as self;
-import "dart:async" as asy;
-
-import "dart:async";
-import "org-dartlang-testcase:///return_from_async.dart";
-
-class Subclass extends core::Object implements self::Class {
-  synthetic constructor •() → ret::Subclass
-    : super core::Object::•()
-    ;
-  method throwFutureOrInt() → FutureOr<core::int> async {
-    throw "FutureOr<int>";
-  }
-  method throwInt() → core::int {
-    throw "int";
-  }
-  method throwFutureInt() → asy::Future<core::int> async {
-    throw "Future<int>";
-  }
-  method throwDynamic() → dynamic {
-    throw "dynamic";
-  }
-  method throwFutureNum() → asy::Future<core::num> async {
-    throw "Future<num>";
-  }
-}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.transformed.expect
deleted file mode 100644
index 1924b7e..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.transformed.expect
+++ /dev/null
@@ -1,461 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-import "return_from_async_lib.dart" as ret;
-
-import "dart:async";
-import "org-dartlang-testcase:///return_from_async_lib.dart";
-
-abstract class Class extends core::Object {
-  synthetic constructor •() → self::Class
-    : super core::Object::•()
-    ;
-  abstract method throwFutureOrInt() → FutureOr<core::int>;
-  abstract method throwInt() → core::int;
-  abstract method throwFutureInt() → asy::Future<core::int>;
-  abstract method throwDynamic() → dynamic;
-  abstract method throwFutureNum() → asy::Future<core::num>;
-}
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method callFutureOrInt(self::Class c) → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L1:
-      {
-        try {
-          final FutureOr<core::int>#t1 = c.{self::Class::throwFutureOrInt}();
-          if(#t1 is asy::Future<core::int>) {
-            [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t1;
-          }
-          :return_value = :async_temporary_0;
-          break #L1;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureOrInt = true;
-          final core::int #t3 = 0;
-          if(#t3 is asy::Future<core::int>) {
-            [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t3;
-          }
-          :return_value = :async_temporary_2;
-          break #L1;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callInt(self::Class c) → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L2:
-      {
-        try {
-          final core::int #t5 = c.{self::Class::throwInt}();
-          if(#t5 is asy::Future<core::int>) {
-            [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t5;
-          }
-          :return_value = :async_temporary_0;
-          break #L2;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtInt = true;
-          final core::int #t7 = 0;
-          if(#t7 is asy::Future<core::int>) {
-            [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t7;
-          }
-          :return_value = :async_temporary_2;
-          break #L2;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callFutureInt(self::Class c) → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L3:
-      {
-        try {
-          final asy::Future<core::int> #t9 = c.{self::Class::throwFutureInt}();
-          if(#t9 is asy::Future<core::int>) {
-            [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t9;
-          }
-          :return_value = :async_temporary_0;
-          break #L3;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureInt = true;
-          final core::int #t11 = 0;
-          if(#t11 is asy::Future<core::int>) {
-            [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t11;
-          }
-          :return_value = :async_temporary_2;
-          break #L3;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callDynamic(self::Class c) → asy::Future<core::int> /* originally async */ {
-  final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-  core::bool* :is_sync = false;
-  FutureOr<core::int>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::int>:async_temporary_0;
-  FutureOr<core::int>:async_temporary_1;
-  FutureOr<core::int>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L4:
-      {
-        try {
-          final FutureOr<core::int>#t13 = c.{self::Class::throwDynamic}() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int>;
-          if(#t13 is asy::Future<core::int>) {
-            [yield] let dynamic #t14 = asy::_awaitHelper(#t13, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_0 = #t13;
-          }
-          :return_value = :async_temporary_0;
-          break #L4;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtDynamic = true;
-          final core::int #t15 = 0;
-          if(#t15 is asy::Future<core::int>) {
-            [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t15;
-          }
-          :return_value = :async_temporary_2;
-          break #L4;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method callFutureNum(self::Class c) → asy::Future<core::num> /* originally async */ {
-  final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
-  core::bool* :is_sync = false;
-  FutureOr<core::num>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  dynamic :saved_try_context_var1;
-  dynamic :exception0;
-  dynamic :stack_trace0;
-  FutureOr<core::num>:async_temporary_0;
-  FutureOr<core::num>:async_temporary_1;
-  FutureOr<core::num>:async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L5:
-      {
-        try {
-          final asy::Future<core::num> #t17 = c.{self::Class::throwFutureNum}();
-          if(#t17 is asy::Future<core::num>) {
-            [yield] let dynamic #t18 = asy::_awaitHelper(#t17, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::num>(:result);
-          }
-          else {
-            :async_temporary_0 = #t17;
-          }
-          :return_value = :async_temporary_0;
-          break #L5;
-        }
-        on core::Object catch(final core::Object e) {
-          core::print("Caught \"${e}\"");
-          self::caughtFutureNum = true;
-          final core::int #t19 = 0;
-          if(#t19 is asy::Future<core::num>) {
-            [yield] let dynamic #t20 = asy::_awaitHelper(#t19, :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_2 = _in::unsafeCast<core::int>(:result);
-          }
-          else {
-            :async_temporary_2 = #t19;
-          }
-          :return_value = :async_temporary_2;
-          break #L5;
-        }
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-static method main() → void /* originally async */ {
-  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
-  core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
-  (dynamic) → dynamic :async_op_then;
-  (core::Object, core::StackTrace) → dynamic :async_op_error;
-  core::int :await_jump_var = 0;
-  dynamic :await_ctx_var;
-  dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-    try {
-      #L6:
-      {
-        self::Class c = new ret::Subclass::•();
-        [yield] let dynamic #t21 = asy::_awaitHelper(self::callFutureOrInt(c), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtFutureOrInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t22 = asy::_awaitHelper(self::callInt(c), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t23 = asy::_awaitHelper(self::callFutureInt(c), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtFutureInt)
-          throw "Uncaught async return";
-        [yield] let dynamic #t24 = asy::_awaitHelper(self::callDynamic(c), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        if(!self::caughtDynamic)
-          throw "Uncaught async return";
-        [yield] let dynamic #t25 = asy::_awaitHelper(self::callFutureNum(c), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::num>(:result);
-        if(!self::caughtFutureNum)
-          throw "Uncaught async return";
-      }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-      return;
-    }
-    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-    }
-  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op.call();
-  :is_sync = true;
-  return :async_future;
-}
-
-library /*isNonNullableByDefault*/;
-import self as ret;
-import "dart:core" as core;
-import "return_from_async.dart" as self;
-import "dart:async" as asy;
-
-import "dart:async";
-import "org-dartlang-testcase:///return_from_async.dart";
-
-class Subclass extends core::Object implements self::Class {
-  synthetic constructor •() → ret::Subclass
-    : super core::Object::•()
-    ;
-  method throwFutureOrInt() → FutureOr<core::int> /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-      try {
-        #L7:
-        {
-          throw "FutureOr<int>";
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op.call();
-    :is_sync = true;
-    return :async_future;
-  }
-  method throwInt() → core::int {
-    throw "int";
-  }
-  method throwFutureInt() → asy::Future<core::int> /* originally async */ {
-    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
-    core::bool* :is_sync = false;
-    FutureOr<core::int>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-      try {
-        #L8:
-        {
-          throw "Future<int>";
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op.call();
-    :is_sync = true;
-    return :async_future;
-  }
-  method throwDynamic() → dynamic {
-    throw "dynamic";
-  }
-  method throwFutureNum() → asy::Future<core::num> /* originally async */ {
-    final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
-    core::bool* :is_sync = false;
-    FutureOr<core::num>? :return_value;
-    (dynamic) → dynamic :async_op_then;
-    (core::Object, core::StackTrace) → dynamic :async_op_error;
-    core::int :await_jump_var = 0;
-    dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
-      try {
-        #L9:
-        {
-          throw "Future<num>";
-        }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
-        return;
-      }
-      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
-        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
-      }
-    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
-    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op.call();
-    :is_sync = true;
-    return :async_future;
-  }
-}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async_lib.dart b/pkg/front_end/testcases/nnbd_mixed/return_from_async_lib.dart
deleted file mode 100644
index 0e4cbb7..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async_lib.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2020, 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 'dart:async';
-import 'return_from_async.dart';
-
-class Subclass implements Class {
-  FutureOr<int> throwFutureOrInt() async {
-    throw 'FutureOr<int>';
-  }
-
-  int throwInt() {
-    throw 'int';
-  }
-
-  Future<int> throwFutureInt() async {
-    throw 'Future<int>';
-  }
-
-  dynamic throwDynamic() {
-    throw 'dynamic';
-  }
-
-  Future<num> throwFutureNum() async {
-    throw 'Future<num>';
-  }
-}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 4b102ab..fef6e8a 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -173,6 +173,7 @@
 nnbd/duplicates_instance_extension: VerificationError
 nnbd/getter_vs_setter_type: TypeCheckError
 nnbd/issue41180: RuntimeError # Strong mode runtime checking fails due to mixed strong mode.
+nnbd/issue42546: TypeCheckError
 nnbd/issue42603: TypeCheckError
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
 nnbd/nullable_object_access: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index c22bd35..a422b0b 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -173,6 +173,7 @@
 nnbd/duplicates_instance_extension: VerificationError
 nnbd/getter_vs_setter_type: TypeCheckError
 nnbd/issue41180: RuntimeError
+nnbd/issue42546: TypeCheckError
 nnbd/issue42603: TypeCheckError
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
 nnbd/nullable_object_access: TypeCheckError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index fe180bd..fa279da 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -59,6 +59,7 @@
 nnbd/covariant_late_field: TypeCheckError
 nnbd/duplicates_instance_extension: VerificationError
 nnbd/getter_vs_setter_type: TypeCheckError
+nnbd/issue42546: TypeCheckError
 nnbd/issue42603: TypeCheckError
 nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
 nnbd/nullable_object_access: TypeCheckError
diff --git a/pkg/vm_service/test/async_single_step_out_test.dart b/pkg/vm_service/test/async_single_step_out_test.dart
index 7e5f200..a0a3d83 100644
--- a/pkg/vm_service/test/async_single_step_out_test.dart
+++ b/pkg/vm_service/test/async_single_step_out_test.dart
@@ -44,10 +44,6 @@
   stepInto, // exit helper via a single step.
 
   hasStoppedAtBreakpoint,
-  stoppedAtLine(LINE_B), // await helper
-  stepInto,
-
-  hasStoppedAtBreakpoint,
   stoppedAtLine(20), // return null (weird dispatching)
   stepInto, // exit helper via a single step.
 
diff --git a/runtime/observatory/tests/service/async_single_step_out_test.dart b/runtime/observatory/tests/service/async_single_step_out_test.dart
index 3c6de1b..cfeac6c 100644
--- a/runtime/observatory/tests/service/async_single_step_out_test.dart
+++ b/runtime/observatory/tests/service/async_single_step_out_test.dart
@@ -44,10 +44,6 @@
   stepInto, // exit helper via a single step.
 
   hasStoppedAtBreakpoint,
-  stoppedAtLine(LINE_B), // await helper
-  stepInto,
-
-  hasStoppedAtBreakpoint,
   stoppedAtLine(20), // return null (weird dispatching)
   stepInto, // exit helper via a single step.
 
diff --git a/runtime/tests/vm/dart/causal_stacks/utils.dart b/runtime/tests/vm/dart/causal_stacks/utils.dart
index 16deb64..d6bde67 100644
--- a/runtime/tests/vm/dart/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart/causal_stacks/utils.dart
@@ -693,22 +693,20 @@
     final mixedYieldsExpected = const <String>[
       r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#1      mixedYields3 \(.*/utils.dart:70(:3)?\)$',
+      r'^#1      mixedYields2 \(.*/utils.dart:66(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#2      mixedYields2 \(.*/utils.dart:66(:3)?\)$',
-      r'^<asynchronous suspension>$',
-      r'^#3      mixedYields \(.*/utils.dart:61(:3)?\)$',
+      r'^#2      mixedYields \(.*/utils.dart:61(:3)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
         mixedYields,
         mixedYieldsExpected +
             const <String>[
-              r'^#4      doTestAwait ',
+              r'^#3      doTestAwait ',
               r'^<asynchronous suspension>$',
-              r'^#5      doTestsLazy ',
+              r'^#4      doTestsLazy ',
               r'^<asynchronous suspension>$',
-              r'^#6      main ',
+              r'^#5      main ',
               r'^<asynchronous suspension>$',
             ],
         debugInfoFilename);
@@ -716,11 +714,11 @@
         mixedYields,
         mixedYieldsExpected +
             const <String>[
-              r'^#4      doTestAwaitThen ',
+              r'^#3      doTestAwaitThen ',
               r'^<asynchronous suspension>$',
-              r'^#5      doTestsLazy ',
+              r'^#4      doTestsLazy ',
               r'^<asynchronous suspension>$',
-              r'^#6      main ',
+              r'^#5      main ',
               r'^<asynchronous suspension>$',
             ],
         debugInfoFilename);
@@ -728,11 +726,11 @@
         mixedYields,
         mixedYieldsExpected +
             const <String>[
-              r'^#4      doTestAwaitCatchError ',
+              r'^#3      doTestAwaitCatchError ',
               r'^<asynchronous suspension>$',
-              r'^#5      doTestsLazy ',
+              r'^#4      doTestsLazy ',
               r'^<asynchronous suspension>$',
-              r'^#6      main ',
+              r'^#5      main ',
               r'^<asynchronous suspension>$',
             ],
         debugInfoFilename);
@@ -791,22 +789,20 @@
     final nonAsyncNoStackExpected = const <String>[
       r'^#0      throwAsync \(.*/utils.dart:21(:3)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#1      nonAsyncNoStack2 \(.*/utils.dart:97(:36)?\)$',
+      r'^#1      nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
       r'^<asynchronous suspension>$',
-      r'^#2      nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
-      r'^<asynchronous suspension>$',
-      r'^#3      nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
+      r'^#2      nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
       r'^<asynchronous suspension>$',
     ];
     await doTestAwait(
         nonAsyncNoStack,
         nonAsyncNoStackExpected +
             const <String>[
-              r'^#4      doTestAwait ',
+              r'^#3      doTestAwait ',
               r'^<asynchronous suspension>$',
-              r'^#5      doTestsLazy ',
+              r'^#4      doTestsLazy ',
               r'^<asynchronous suspension>$',
-              r'^#6      main ',
+              r'^#5      main ',
               r'^<asynchronous suspension>$',
             ],
         debugInfoFilename);
@@ -814,11 +810,11 @@
         nonAsyncNoStack,
         nonAsyncNoStackExpected +
             const <String>[
-              r'^#4      doTestAwaitThen ',
+              r'^#3      doTestAwaitThen ',
               r'^<asynchronous suspension>$',
-              r'^#5      doTestsLazy ',
+              r'^#4      doTestsLazy ',
               r'^<asynchronous suspension>$',
-              r'^#6      main ',
+              r'^#5      main ',
               r'^<asynchronous suspension>$',
             ],
         debugInfoFilename);
@@ -826,11 +822,11 @@
         nonAsyncNoStack,
         nonAsyncNoStackExpected +
             const <String>[
-              r'^#4      doTestAwaitCatchError ',
+              r'^#3      doTestAwaitCatchError ',
               r'^<asynchronous suspension>$',
-              r'^#5      doTestsLazy ',
+              r'^#4      doTestsLazy ',
               r'^<asynchronous suspension>$',
-              r'^#6      main ',
+              r'^#5      main ',
               r'^<asynchronous suspension>$',
             ],
         debugInfoFilename);
diff --git a/tests/language/async/explicit_await_test.dart b/tests/language/async/explicit_await_test.dart
deleted file mode 100644
index 545e5c5..0000000
--- a/tests/language/async/explicit_await_test.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2021, 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 'package:expect/expect.dart';
-
-bool caughtInMethod1 = false;
-bool caughtInMethod2 = false;
-bool caughtInMain = false;
-
-Future<Object> f() {
-  return new Future<Future<Object>>.value(new Future<Object>.delayed(
-      const Duration(seconds: 1), () => throw 'foo'));
-}
-
-Future<Object> method1() async {
-  try {
-    return await f();
-  } catch (e) {
-    print('caught in method1: $e');
-    caughtInMethod1 = true;
-  }
-  return new Object();
-}
-
-Future<Object> method2() async {
-  try {
-    return method1();
-  } catch (e) {
-    print('caught in method2: $e');
-    caughtInMethod2 = true;
-  }
-  return new Object();
-}
-
-void main() async {
-  try {
-    print(await method2());
-    print('Done');
-  } catch (e) {
-    print('caught in main: $e');
-    caughtInMain = true;
-  }
-  Expect.isTrue(caughtInMethod1, "Exception should be caught in 'method1'.");
-  Expect.isFalse(
-      caughtInMethod2, "Exception should not be caught in 'method2'.");
-  Expect.isFalse(caughtInMain, "Exception should not be caught in 'main'.");
-}
diff --git a/tests/language/async/implicit_await_test.dart b/tests/language/async/implicit_await_test.dart
deleted file mode 100644
index 9c79259..0000000
--- a/tests/language/async/implicit_await_test.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2021, 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 'package:expect/expect.dart';
-
-bool caughtInF = false;
-bool caughtInMain = false;
-
-class A {}
-
-class AAndFutureOfA implements A, Future<A> {
-  noSuchMethod(Invocation i) => throw 0;
-}
-
-Future<A> f(A a) async {
-  try {
-    // Statically looks like no `await` is needed, but dynamically it is needed.
-    // So we should check dynamically whether to await.
-    return a;
-  } catch (e) {
-    caughtInF = true;
-  }
-  return new A();
-}
-
-void main() async {
-  try {
-    print(await f(AAndFutureOfA()));
-    print('Done');
-  } catch (e) {
-    caughtInMain = true;
-  }
-  Expect.isTrue(caughtInF, "Exception should be caught in 'f'.");
-  Expect.isFalse(caughtInMain, "Exception should not be caught in 'main'.");
-}
diff --git a/tools/VERSION b/tools/VERSION
index 7f25062..cdb882a 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 280
+PRERELEASE 281
 PRERELEASE_PATCH 0
\ No newline at end of file