diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index ddd0e28..02535d9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -5934,48 +5934,39 @@
       }
 
       variable.type = function.computeFunctionType(libraryBuilder.nonNullable);
-      if (isFunctionExpression) {
-        Expression? oldInitializer = variable.initializer;
-        variable.initializer = new FunctionExpression(function)
-          ..parent = variable
-          ..fileOffset = formals.charOffset;
-        exitLocalScope();
-        // This is matched by the call to [beginNode] in [enterFunction].
-        typeInferrer.assignedVariables.endNode(variable.initializer!,
-            isClosureOrLateVariableInitializer: true);
-        Expression expression = new NamedFunctionExpressionJudgment(variable);
-        if (oldInitializer != null) {
-          // This must have been a compile-time error.
-          Expression error = oldInitializer;
-          assert(isErroneousNode(error));
-          int offset = expression.fileOffset;
-          push(new Let(
-              new VariableDeclaration.forValue(error)..fileOffset = offset,
-              expression)
-            ..fileOffset = offset);
-        } else {
-          push(expression);
-        }
-      } else {
-        declaration.function = function;
-        function.parent = declaration;
-        if (variable.initializer != null) {
-          // This must have been a compile-time error.
-          assert(isErroneousNode(variable.initializer!));
 
-          push(forest
-              .createBlock(declaration.fileOffset, noLocation, <Statement>[
-            forest.createExpressionStatement(
-                offsetForToken(token), variable.initializer!),
-            declaration
-          ]));
-          variable.initializer = null;
-        } else {
-          push(declaration);
-        }
-        // This is matched by the call to [beginNode] in [enterFunction].
-        typeInferrer.assignedVariables
-            .endNode(declaration, isClosureOrLateVariableInitializer: true);
+      declaration.function = function;
+      function.parent = declaration;
+      Statement statement;
+      if (variable.initializer != null) {
+        // This must have been a compile-time error.
+        assert(isErroneousNode(variable.initializer!));
+
+        statement =
+            forest.createBlock(declaration.fileOffset, noLocation, <Statement>[
+          forest.createExpressionStatement(
+              offsetForToken(token), variable.initializer!),
+          declaration
+        ]);
+        variable.initializer = null;
+      } else {
+        statement = declaration;
+      }
+      // This is matched by the call to [beginNode] in [enterFunction].
+      typeInferrer.assignedVariables
+          .endNode(declaration, isClosureOrLateVariableInitializer: true);
+      if (isFunctionExpression) {
+        // This is an error case. An expression is expected but we got a
+        // function declaration instead. We wrap it in a [BlockExpression].
+        exitLocalScope();
+        push(new BlockExpression(
+            forest.createBlock(declaration.fileOffset, noLocation, [statement]),
+            buildProblem(fasta.messageNamedFunctionExpression,
+                declaration.fileOffset, noLength,
+                // Error has already been reported by the parser.
+                suppressMessage: true)));
+      } else {
+        push(statement);
       }
     } else {
       unhandled("${declaration.runtimeType}", "pushNamedFunction",
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 8593b65..16a32f9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -366,7 +366,7 @@
 
   /// Return a representation of a block of [statements] at the given
   /// [fileOffset].
-  Statement createBlock(
+  Block createBlock(
       int fileOffset, int fileEndOffset, List<Statement> statements) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 71ba7f6..75dff4b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -108,7 +108,19 @@
   @override
   ExpressionInferenceResult visitBlockExpression(
       BlockExpression node, DartType typeContext) {
-    return _unhandledExpression(node, typeContext);
+    // This is only used for error cases. The spec doesn't use this and
+    // therefore doesn't specify the type context for the subterms.
+    if (!inferrer.isTopLevel) {
+      StatementInferenceResult bodyResult = inferrer.inferStatement(node.body);
+      if (bodyResult.hasChanged) {
+        node.body = (bodyResult.statement as Block)..parent = node;
+      }
+    }
+    ExpressionInferenceResult valueResult = inferrer.inferExpression(
+        node.value, const UnknownType(), true,
+        isVoidAllowed: true);
+    node.value = valueResult.expression..parent = node;
+    return new ExpressionInferenceResult(valueResult.inferredType, node);
   }
 
   @override
@@ -2930,16 +2942,6 @@
         isImplicitCall: true);
   }
 
-  ExpressionInferenceResult visitNamedFunctionExpressionJudgment(
-      NamedFunctionExpressionJudgment node, DartType typeContext) {
-    ExpressionInferenceResult initializerResult =
-        inferrer.inferExpression(node.variable.initializer!, typeContext, true);
-    node.variable.initializer = initializerResult.expression
-      ..parent = node.variable;
-    node.variable.type = initializerResult.inferredType;
-    return new ExpressionInferenceResult(initializerResult.inferredType, node);
-  }
-
   @override
   ExpressionInferenceResult visitNot(Not node, DartType typeContext) {
     InterfaceType boolType =
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 01e408e..56d562f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -1226,32 +1226,6 @@
   }
 }
 
-/// Concrete shadow object representing a named function expression.
-///
-/// Named function expressions are not legal in Dart, but they are accepted by
-/// the parser and BodyBuilder for error recovery purposes.
-///
-/// A named function expression of the form `f() { ... }` is represented as the
-/// kernel expression:
-///
-///     let f = () { ... } in f
-class NamedFunctionExpressionJudgment extends Let
-    implements ExpressionJudgment {
-  NamedFunctionExpressionJudgment(VariableDeclaration variable)
-      : super(variable, new VariableGet(variable));
-
-  @override
-  ExpressionInferenceResult acceptInference(
-      InferenceVisitor visitor, DartType typeContext) {
-    return visitor.visitNamedFunctionExpressionJudgment(this, typeContext);
-  }
-
-  @override
-  String toString() {
-    return "NamedFunctionExpressionJudgment(${toStringInternal()})";
-  }
-}
-
 /// Internal expression representing a null-aware method invocation.
 ///
 /// A null-aware method invocation of the form `a?.b(...)` is encoded as:
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 bb6d2ee..4ab6e5a 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
@@ -2364,7 +2364,8 @@
     if (libraryFeatures.namedArgumentsAnywhere.isEnabled &&
         arguments.argumentsOriginalOrder != null &&
         hoistedExpressions == null &&
-        !isTopLevel) {
+        !isTopLevel &&
+        !isConst) {
       hoistedExpressions = localHoistedExpressions = <VariableDeclaration>[];
     }
 
diff --git a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
index a1d7543..857b3a1 100644
--- a/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart
@@ -64,7 +64,6 @@
     _testInternalPropertyGet();
     _testInternalPropertySet();
     _testExpressionInvocation();
-    _testNamedFunctionExpressionJudgment();
     _testNullAwareMethodInvocation();
     _testNullAwarePropertyGet();
     _testNullAwarePropertySet();
@@ -589,15 +588,6 @@
 0<void, dynamic>(1, foo: 2, bar: 3)''');
 }
 
-void _testNamedFunctionExpressionJudgment() {
-  testExpression(
-      new NamedFunctionExpressionJudgment(new VariableDeclarationImpl('foo',
-          initializer:
-              new FunctionExpression(new FunctionNode(new Block([]))))),
-      '''
-let dynamic foo = dynamic () {} in foo''');
-}
-
 void _testNullAwareMethodInvocation() {
   VariableDeclarationImpl variable =
       new VariableDeclarationImpl.forValue(new IntLiteral(0));
diff --git a/pkg/front_end/test/utils/kernel_chain.dart b/pkg/front_end/test/utils/kernel_chain.dart
index 3457bb1..93beea1 100644
--- a/pkg/front_end/test/utils/kernel_chain.dart
+++ b/pkg/front_end/test/utils/kernel_chain.dart
@@ -7,8 +7,6 @@
 import 'dart:async';
 import 'dart:io' show Directory, File, IOSink, Platform;
 
-import 'dart:typed_data' show Uint8List;
-
 import 'package:_fe_analyzer_shared/src/util/relativize.dart'
     show isWindows, relativizeUri;
 
@@ -454,51 +452,38 @@
         writeToFile = false;
       }
     }
-
-    Sink<List<int>> sink;
-    String writeMessage;
-    if (writeToFile && !skipVm) {
-      Directory tmp = await Directory.systemTemp.createTemp();
-      Uri uri = tmp.uri.resolve("generated.dill");
-      File generated = new File.fromUri(uri);
-      sink = generated.openWrite();
-      result = new ComponentResult(
-          result.description,
-          result.component,
-          result.userLibraries,
-          result.compilationSetup,
-          result.sourceTarget,
-          uri);
-      writeMessage = "Wrote component to `${generated.path}`";
-    } else {
-      sink = new DevNullSink();
-      writeMessage = "Wrote component to /dev/null";
-    }
+    ByteSink sink = new ByteSink();
+    bool good = false;
     try {
       // TODO(johnniwinther,jensj): Avoid serializing the sdk.
       new BinaryPrinter(sink).writeComponentFile(component);
+      good = true;
     } catch (e, s) {
       return fail(result, e, s);
     } finally {
-      print(writeMessage);
-      if (sink is IOSink) {
-        await sink.close();
+      if (good && writeToFile && !skipVm) {
+        Directory tmp = await Directory.systemTemp.createTemp();
+        Uri uri = tmp.uri.resolve("generated.dill");
+        File generated = new File.fromUri(uri);
+        IOSink ioSink = generated.openWrite();
+        ioSink.add(sink.builder.takeBytes());
+        await ioSink.close();
+        result = new ComponentResult(
+            result.description,
+            result.component,
+            result.userLibraries,
+            result.compilationSetup,
+            result.sourceTarget,
+            uri);
+        print("Wrote component to `${generated.path}`.");
       } else {
-        sink.close();
+        print("Wrote component to memory.");
       }
     }
     return pass(result);
   }
 }
 
-class DevNullSink<T> extends Sink<T> {
-  @override
-  void add(T data) {}
-
-  @override
-  void close() {}
-}
-
 class ReadDill extends Step<Uri, Uri, ChainContext> {
   const ReadDill();
 
@@ -516,32 +501,6 @@
   }
 }
 
-class BytesCollector implements Sink<List<int>> {
-  final List<List<int>> lists = <List<int>>[];
-
-  int length = 0;
-
-  @override
-  void add(List<int> data) {
-    lists.add(data);
-    length += data.length;
-  }
-
-  Uint8List collect() {
-    Uint8List result = new Uint8List(length);
-    int offset = 0;
-    for (List<int> list in lists) {
-      result.setRange(offset, offset += list.length, list);
-    }
-    lists.clear();
-    length = 0;
-    return result;
-  }
-
-  @override
-  void close() {}
-}
-
 Future<String> runDiff(Uri expected, String actual) async {
   if (Platform.isWindows) {
     // TODO(johnniwinther): Work-around for Windows. For some reason piping
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect
index 336105f..0870c9a 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect
@@ -6,8 +6,8 @@
   static const field core::List<self::C> values = const <self::C>[self::C::a, self::C::b, self::C::c, self::C::d, self::C::e, self::C::f];
   final field core::String log;
   static const field self::C a = const self::C::•(0, "a", 1, 2, z: 3);
-  static const field self::C b = let final core::int #t1 = 1 in let final core::String #t2 = "b" in let final core::int #t3 = 3 in const self::C::•(#t1, #t2, 1, 2, z: #t3);
-  static const field self::C c = let final core::int #t4 = 2 in let final core::String #t5 = "c" in let final core::int #t6 = 1 in let final core::int #t7 = 3 in const self::C::•(#t4, #t5, #t6, 2, z: #t7);
+  static const field self::C b = const self::C::•(1, "b", 1, 2, z: 3);
+  static const field self::C c = const self::C::•(2, "c", 1, 2, z: 3);
   static const field self::C d = const self::C::named1(3, "d", 1, 2, 3);
   static const field self::C e = const self::C::named2(4, "e", 1, 2, 3);
   static const field self::C f = const self::C::named3(5, "f", 1, 2, 3);
@@ -18,10 +18,10 @@
     : this self::C::•(#index, #name, x, y, z: z)
     ;
   const constructor named2(core::int #index, core::String #name, core::int x, core::int y, core::int z) → self::C
-    : final core::int #t8 = #index, final core::String #t9 = #name, final core::int #t10 = x, final core::int #t11 = z, this self::C::•(#t8, #t9, #t10, y, z: #t11)
+    : final core::int #t1 = #index, final core::String #t2 = #name, final core::int #t3 = x, final core::int #t4 = z, this self::C::•(#t1, #t2, #t3, y, z: #t4)
     ;
   const constructor named3(core::int #index, core::String #name, core::int x, core::int y, core::int z) → self::C
-    : final core::int #t12 = #index, final core::String #t13 = #name, final core::int #t14 = z, this self::C::•(#t12, #t13, x, y, z: #t14)
+    : final core::int #t5 = #index, final core::String #t6 = #name, final core::int #t7 = z, this self::C::•(#t5, #t6, x, y, z: #t7)
     ;
   method toString() → core::String
     return "C.${this.{core::_Enum::_name}{core::String}}";
@@ -35,8 +35,8 @@
 Extra constant evaluation status:
 Evaluated: ListLiteral @ org-dartlang-testcase:///redirecting_constructor.dart:5:6 -> ListConstant(const <C*>[const C{C.log: "x=1, y=2, z=3", _Enum.index: 0, _Enum._name: "a"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 1, _Enum._name: "b"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 2, _Enum._name: "c"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 3, _Enum._name: "d"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 4, _Enum._name: "e"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 5, _Enum._name: "f"}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:6:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 0, _Enum._name: "a"})
-Evaluated: Let @ org-dartlang-testcase:///redirecting_constructor.dart:7:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 1, _Enum._name: "b"})
-Evaluated: Let @ org-dartlang-testcase:///redirecting_constructor.dart:8:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 2, _Enum._name: "c"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:7:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:8:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 2, _Enum._name: "c"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:9:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 3, _Enum._name: "d"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:10:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 4, _Enum._name: "e"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:11:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 5, _Enum._name: "f"})
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart b/pkg/front_end/testcases/general/illegal_named_function_expression.dart
index ac09db3..5289ab2 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart
@@ -2,7 +2,7 @@
 // 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.
 
-main() {
+test() {
   var x = void f<T>(T t) {};
   print(x.runtimeType);
   print(void g<T>(T t) {});
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline.expect
index bae895a..a9f9e5f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline.expect
@@ -1 +1 @@
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline_modelled.expect
index bae895a..a9f9e5f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline_modelled.expect
@@ -1 +1 @@
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
index 812ba6f..9f8e706 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
@@ -13,8 +13,16 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%) → Null x = let final <T extends core::Object? = dynamic>(T%) → Null f = <T extends core::Object? = dynamic>(T% t) → Null {} in f;
+static method test() → dynamic {
+  invalid-type x = block {
+    function f<T extends core::Object? = dynamic>(T% t) → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a name.
+  var x = void f<T>(T t) {};
+          ^";
   core::print(x.{core::Object::runtimeType}{core::Type});
-  core::print(let final <T extends core::Object? = dynamic>(T%) → Null g = <T extends core::Object? = dynamic>(T% t) → Null {} in g);
+  core::print( block {
+    function g<T extends core::Object? = dynamic>(T% t) → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a name.
+  print(void g<T>(T t) {});
+        ^");
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect
index 812ba6f..9f8e706 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect
@@ -13,8 +13,16 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%) → Null x = let final <T extends core::Object? = dynamic>(T%) → Null f = <T extends core::Object? = dynamic>(T% t) → Null {} in f;
+static method test() → dynamic {
+  invalid-type x = block {
+    function f<T extends core::Object? = dynamic>(T% t) → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a name.
+  var x = void f<T>(T t) {};
+          ^";
   core::print(x.{core::Object::runtimeType}{core::Type});
-  core::print(let final <T extends core::Object? = dynamic>(T%) → Null g = <T extends core::Object? = dynamic>(T% t) → Null {} in g);
+  core::print( block {
+    function g<T extends core::Object? = dynamic>(T% t) → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a name.
+  print(void g<T>(T t) {});
+        ^");
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.outline.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.outline.expect
index e2cba6b..eef3152 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.outline.expect
@@ -1,5 +1,5 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
index 812ba6f..9f8e706 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
@@ -13,8 +13,16 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  <T extends core::Object? = dynamic>(T%) → Null x = let final <T extends core::Object? = dynamic>(T%) → Null f = <T extends core::Object? = dynamic>(T% t) → Null {} in f;
+static method test() → dynamic {
+  invalid-type x = block {
+    function f<T extends core::Object? = dynamic>(T% t) → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a name.
+  var x = void f<T>(T t) {};
+          ^";
   core::print(x.{core::Object::runtimeType}{core::Type});
-  core::print(let final <T extends core::Object? = dynamic>(T%) → Null g = <T extends core::Object? = dynamic>(T% t) → Null {} in g);
+  core::print( block {
+    function g<T extends core::Object? = dynamic>(T% t) → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a name.
+  print(void g<T>(T t) {});
+        ^");
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart
index 2b3df38..1cdbbe0 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart
@@ -2,7 +2,7 @@
 // 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.
 
-main() {
+test() {
   void f() {}
   print(void f() {});
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline.expect
index bae895a..a9f9e5f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline.expect
@@ -1 +1 @@
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline_modelled.expect
index bae895a..a9f9e5f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline_modelled.expect
@@ -1 +1 @@
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.expect
index 470f8b7..a87651f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.expect
@@ -9,7 +9,11 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
+static method test() → dynamic {
   function f() → void {}
-  core::print(let final () → Null f = () → Null {} in f);
+  core::print( block {
+    function f() → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a name.
+  print(void f() {});
+        ^");
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect
index 470f8b7..a87651f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect
@@ -9,7 +9,11 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
+static method test() → dynamic {
   function f() → void {}
-  core::print(let final () → Null f = () → Null {} in f);
+  core::print( block {
+    function f() → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a name.
+  print(void f() {});
+        ^");
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.outline.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.outline.expect
index e2cba6b..eef3152 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.outline.expect
@@ -1,5 +1,5 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.transformed.expect
index 470f8b7..a87651f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.transformed.expect
@@ -9,7 +9,11 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
+static method test() → dynamic {
   function f() → void {}
-  core::print(let final () → Null f = () → Null {} in f);
+  core::print( block {
+    function f() → void {}
+  } =>invalid-expression "pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a name.
+  print(void f() {});
+        ^");
 }
diff --git a/pkg/front_end/testcases/general/issue49087.dart b/pkg/front_end/testcases/general/issue49087.dart
new file mode 100644
index 0000000..0073bb9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49087.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2022, 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.
+
+class A {
+  const A(int x, {String? y});
+  const factory A.redir(int x, {String? y}) = A;
+}
+
+test1() => const A(y: "foo", 0);
+test2() => const A.redir(y: "foo", 0);
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue49087.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue49087.dart.textual_outline.expect
new file mode 100644
index 0000000..b783d52
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49087.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+class A {
+  const A(int x, {String? y});
+  const factory A.redir(int x, {String? y}) = A;
+}
+
+test1() => const A(y: "foo", 0);
+test2() => const A.redir(y: "foo", 0);
+main() {}
diff --git a/pkg/front_end/testcases/general/issue49087.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue49087.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2239f30
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49087.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+class A {
+  const A(int x, {String? y});
+  const factory A.redir(int x, {String? y}) = A;
+}
+
+main() {}
+test1() => const A(y: "foo", 0);
+test2() => const A.redir(y: "foo", 0);
diff --git a/pkg/front_end/testcases/general/issue49087.dart.weak.expect b/pkg/front_end/testcases/general/issue49087.dart.weak.expect
new file mode 100644
index 0000000..0664156
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49087.dart.weak.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor •(core::int x, {core::String? y = #C2}) → self::A
+    : super core::Object::•()
+    ;
+  static factory redir(core::int x, {core::String? y = #C2}) → self::A
+    return new self::A::•(x, y: y);
+}
+static method test1() → dynamic
+  return #C3;
+static method test2() → dynamic
+  return #C3;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+  #C2 = null
+  #C3 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue49087.dart:
+- A. (from org-dartlang-testcase:///issue49087.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/issue49087.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue49087.dart.weak.modular.expect
new file mode 100644
index 0000000..0664156
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49087.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor •(core::int x, {core::String? y = #C2}) → self::A
+    : super core::Object::•()
+    ;
+  static factory redir(core::int x, {core::String? y = #C2}) → self::A
+    return new self::A::•(x, y: y);
+}
+static method test1() → dynamic
+  return #C3;
+static method test2() → dynamic
+  return #C3;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+  #C2 = null
+  #C3 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue49087.dart:
+- A. (from org-dartlang-testcase:///issue49087.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/issue49087.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue49087.dart.weak.outline.expect
new file mode 100644
index 0000000..b574977
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49087.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir]/*isLegacy*/;
+  const constructor •(core::int x, {core::String? y = null}) → self::A
+    : super core::Object::•()
+    ;
+  static factory redir(core::int x, {core::String? y = null}) → self::A
+    return new self::A::•(x, y: y);
+}
+static method test1() → dynamic
+  ;
+static method test2() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue49087.dart:5:7 -> ConstructorTearOffConstant(A.redir)
+Extra constant evaluation: evaluated: 5, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue49087.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue49087.dart.weak.transformed.expect
new file mode 100644
index 0000000..0664156
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49087.dart.weak.transformed.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor •(core::int x, {core::String? y = #C2}) → self::A
+    : super core::Object::•()
+    ;
+  static factory redir(core::int x, {core::String? y = #C2}) → self::A
+    return new self::A::•(x, y: y);
+}
+static method test1() → dynamic
+  return #C3;
+static method test2() → dynamic
+  return #C3;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+  #C2 = null
+  #C3 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue49087.dart:
+- A. (from org-dartlang-testcase:///issue49087.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/issue49122.dart b/pkg/front_end/testcases/general/issue49122.dart
new file mode 100644
index 0000000..63a9199
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49122.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2022, 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.
+
+test(x) => x();
+
+void test2() {
+  test(bar() { print(bar); });
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue49122.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue49122.dart.textual_outline.expect
new file mode 100644
index 0000000..65ffcb2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49122.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+test(x) => x();
+void test2() {}
diff --git a/pkg/front_end/testcases/general/issue49122.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue49122.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..65ffcb2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49122.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+test(x) => x();
+void test2() {}
diff --git a/pkg/front_end/testcases/general/issue49122.dart.weak.expect b/pkg/front_end/testcases/general/issue49122.dart.weak.expect
new file mode 100644
index 0000000..88cc020
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49122.dart.weak.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue49122.dart:8:8: Error: A function expression can't have a name.
+//   test(bar() { print(bar); });
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test(dynamic x) → dynamic
+  return x{dynamic}.call();
+static method test2() → void {
+  self::test( block {
+    function bar() → Null {
+      core::print(bar);
+    }
+  } =>invalid-expression "pkg/front_end/testcases/general/issue49122.dart:8:8: Error: A function expression can't have a name.
+  test(bar() { print(bar); });
+       ^");
+}
diff --git a/pkg/front_end/testcases/general/issue49122.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue49122.dart.weak.modular.expect
new file mode 100644
index 0000000..88cc020
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49122.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue49122.dart:8:8: Error: A function expression can't have a name.
+//   test(bar() { print(bar); });
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test(dynamic x) → dynamic
+  return x{dynamic}.call();
+static method test2() → void {
+  self::test( block {
+    function bar() → Null {
+      core::print(bar);
+    }
+  } =>invalid-expression "pkg/front_end/testcases/general/issue49122.dart:8:8: Error: A function expression can't have a name.
+  test(bar() { print(bar); });
+       ^");
+}
diff --git a/pkg/front_end/testcases/general/issue49122.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue49122.dart.weak.outline.expect
new file mode 100644
index 0000000..3bfe9f1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49122.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method test(dynamic x) → dynamic
+  ;
+static method test2() → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue49122.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue49122.dart.weak.transformed.expect
new file mode 100644
index 0000000..88cc020
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue49122.dart.weak.transformed.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue49122.dart:8:8: Error: A function expression can't have a name.
+//   test(bar() { print(bar); });
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test(dynamic x) → dynamic
+  return x{dynamic}.call();
+static method test2() → void {
+  self::test( block {
+    function bar() → Null {
+      core::print(bar);
+    }
+  } =>invalid-expression "pkg/front_end/testcases/general/issue49122.dart:8:8: Error: A function expression can't have a name.
+  test(bar() { print(bar); });
+       ^");
+}
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
index 18cd85e..f36f2ea 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
@@ -81,6 +81,11 @@
 //     void T(T t) {}
 //            ^
 //
+// pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A non-null value must be returned since the return type 'T' doesn't allow null.
+//  - 'T' is from 'pkg/front_end/testcases/general/named_function_scope.dart'.
+//     var x = T T() {};
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -105,7 +110,11 @@
   }
   {
     self::T t;
-    () → Null x = let final () → Null T = () → Null {} in T;
+    invalid-type x = block {
+      function T() → Null {}
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:26:13: Error: A function expression can't have a name.
+    var x = T() {};
+            ^";
   }
   {
     self::V v;
@@ -120,9 +129,21 @@
         ^" in null;
   }
   {
-    () → Null x = let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    invalid-type x = block {
+      {
+        invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
-              ^" in let final () → Null T = () → Null {} in T;
+              ^";
+        function T() → self::T {
+          return invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A non-null value must be returned since the return type 'T' doesn't allow null.
+ - 'T' is from 'pkg/front_end/testcases/general/named_function_scope.dart'.
+    var x = T T() {};
+            ^" in null;
+        }
+      }
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A function expression can't have a name.
+    var x = T T() {};
+            ^";
   }
   {
     self::V V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
@@ -130,9 +151,16 @@
       ^";
   }
   {
-    <T extends core::Object? = dynamic>() → Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    invalid-type x = block {
+      {
+        invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
-            ^" in let final <T extends core::Object? = dynamic>() → Null T = <T extends core::Object? = dynamic>() → Null {} in T;
+            ^";
+        function T<T extends core::Object? = dynamic>() → Null {}
+      }
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: A function expression can't have a name.
+    var x = T<T>() {};
+            ^";
   }
   {
     self::T t;
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect
index 18cd85e..f36f2ea 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect
@@ -81,6 +81,11 @@
 //     void T(T t) {}
 //            ^
 //
+// pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A non-null value must be returned since the return type 'T' doesn't allow null.
+//  - 'T' is from 'pkg/front_end/testcases/general/named_function_scope.dart'.
+//     var x = T T() {};
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -105,7 +110,11 @@
   }
   {
     self::T t;
-    () → Null x = let final () → Null T = () → Null {} in T;
+    invalid-type x = block {
+      function T() → Null {}
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:26:13: Error: A function expression can't have a name.
+    var x = T() {};
+            ^";
   }
   {
     self::V v;
@@ -120,9 +129,21 @@
         ^" in null;
   }
   {
-    () → Null x = let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    invalid-type x = block {
+      {
+        invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
-              ^" in let final () → Null T = () → Null {} in T;
+              ^";
+        function T() → self::T {
+          return invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A non-null value must be returned since the return type 'T' doesn't allow null.
+ - 'T' is from 'pkg/front_end/testcases/general/named_function_scope.dart'.
+    var x = T T() {};
+            ^" in null;
+        }
+      }
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A function expression can't have a name.
+    var x = T T() {};
+            ^";
   }
   {
     self::V V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
@@ -130,9 +151,16 @@
       ^";
   }
   {
-    <T extends core::Object? = dynamic>() → Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    invalid-type x = block {
+      {
+        invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
-            ^" in let final <T extends core::Object? = dynamic>() → Null T = <T extends core::Object? = dynamic>() → Null {} in T;
+            ^";
+        function T<T extends core::Object? = dynamic>() → Null {}
+      }
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: A function expression can't have a name.
+    var x = T<T>() {};
+            ^";
   }
   {
     self::T t;
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
index b2b67d2..f36f2ea 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
@@ -81,6 +81,11 @@
 //     void T(T t) {}
 //            ^
 //
+// pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A non-null value must be returned since the return type 'T' doesn't allow null.
+//  - 'T' is from 'pkg/front_end/testcases/general/named_function_scope.dart'.
+//     var x = T T() {};
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -105,7 +110,11 @@
   }
   {
     self::T t;
-    () → Null x = let final () → Null T = () → Null {} in T;
+    invalid-type x = block {
+      function T() → Null {}
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:26:13: Error: A function expression can't have a name.
+    var x = T() {};
+            ^";
   }
   {
     self::V v;
@@ -120,9 +129,21 @@
         ^" in null;
   }
   {
-    () → Null x = let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    invalid-type x = block {
+      {
+        invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
-              ^" in let final () → Null T = () → Null {} in T;
+              ^";
+        function T() → self::T {
+          return invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A non-null value must be returned since the return type 'T' doesn't allow null.
+ - 'T' is from 'pkg/front_end/testcases/general/named_function_scope.dart'.
+    var x = T T() {};
+            ^" in null;
+        }
+      }
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:13: Error: A function expression can't have a name.
+    var x = T T() {};
+            ^";
   }
   {
     self::V V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
@@ -130,9 +151,16 @@
       ^";
   }
   {
-    <T extends core::Object? = dynamic>() → Null x = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    invalid-type x = block {
+      {
+        invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
-            ^" in let final <T extends core::Object? = dynamic>() → Null T = <T extends core::Object? = dynamic>() → Null {} in T;
+            ^";
+        function T<T extends core::Object? = dynamic>() → Null {}
+      }
+    } =>invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: A function expression can't have a name.
+    var x = T<T>() {};
+            ^";
   }
   {
     self::T t;
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart b/pkg/front_end/testcases/regress/issue_29937.dart
index fcbb92c..77e2f5c 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart
+++ b/pkg/front_end/testcases/regress/issue_29937.dart
@@ -2,6 +2,6 @@
 // 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.
 
-main() {
+test() {
   [f() {}];
 }
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline.expect
index bae895a..a9f9e5f 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline.expect
@@ -1 +1 @@
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline_modelled.expect
index bae895a..a9f9e5f 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.textual_outline_modelled.expect
@@ -1 +1 @@
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.expect
index 2df04ab..e57bd11 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.expect
@@ -8,6 +8,10 @@
 //
 import self as self;
 
-static method main() → dynamic {
-  <() → Null>[let final () → Null f = () → Null {} in f];
+static method test() → dynamic {
+  <dynamic>[ block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+  [f() {}];
+   ^"];
 }
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect
index 2df04ab..e57bd11 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect
@@ -8,6 +8,10 @@
 //
 import self as self;
 
-static method main() → dynamic {
-  <() → Null>[let final () → Null f = () → Null {} in f];
+static method test() → dynamic {
+  <dynamic>[ block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+  [f() {}];
+   ^"];
 }
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.outline.expect
index e2cba6b..eef3152 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.outline.expect
@@ -1,5 +1,5 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.transformed.expect
index 860524d..bb94983 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.transformed.expect
@@ -9,6 +9,10 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic {
-  core::_GrowableList::_literal1<() → Null>(let final () → Null f = () → Null {} in f);
+static method test() → dynamic {
+  core::_GrowableList::_literal1<dynamic>( block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+  [f() {}];
+   ^");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29942.dart.weak.expect
index 1bb672f..1a0399f 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.weak.expect
@@ -15,4 +15,9 @@
 
 static method main() → dynamic {}
 static method f() → dynamic
-  return let final () → Null h = () → Null => null in h;
+  return block {
+    function h() → Null
+      return null;
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+h() => null;
+^";
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect
index 1bb672f..1a0399f 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect
@@ -15,4 +15,9 @@
 
 static method main() → dynamic {}
 static method f() → dynamic
-  return let final () → Null h = () → Null => null in h;
+  return block {
+    function h() → Null
+      return null;
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+h() => null;
+^";
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29942.dart.weak.transformed.expect
index 1bb672f..1a0399f 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.weak.transformed.expect
@@ -15,4 +15,9 @@
 
 static method main() → dynamic {}
 static method f() → dynamic
-  return let final () → Null h = () → Null => null in h;
+  return block {
+    function h() → Null
+      return null;
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+h() => null;
+^";
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart b/pkg/front_end/testcases/regress/issue_29978.dart
index 997d9aa..166837f 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart
+++ b/pkg/front_end/testcases/regress/issue_29978.dart
@@ -4,6 +4,6 @@
 
 foo(a, b) => null;
 
-main() {
+test() {
   foo(null, f() {});
 }
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline.expect
index 2a44271..1c673d5 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline.expect
@@ -1,2 +1,2 @@
 foo(a, b) => null;
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline_modelled.expect
index 2a44271..1c673d5 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.textual_outline_modelled.expect
@@ -1,2 +1,2 @@
 foo(a, b) => null;
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.expect
index 34a58b5..4871133 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.expect
@@ -10,6 +10,10 @@
 
 static method foo(dynamic a, dynamic b) → dynamic
   return null;
-static method main() → dynamic {
-  self::foo(null, let final () → Null f = () → Null {} in f);
+static method test() → dynamic {
+  self::foo(null, block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+  foo(null, f() {});
+            ^");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect
index 34a58b5..4871133 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect
@@ -10,6 +10,10 @@
 
 static method foo(dynamic a, dynamic b) → dynamic
   return null;
-static method main() → dynamic {
-  self::foo(null, let final () → Null f = () → Null {} in f);
+static method test() → dynamic {
+  self::foo(null, block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+  foo(null, f() {});
+            ^");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.outline.expect
index 8884d25..58140d5 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.outline.expect
@@ -3,5 +3,5 @@
 
 static method foo(dynamic a, dynamic b) → dynamic
   ;
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.transformed.expect
index 34a58b5..4871133 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.transformed.expect
@@ -10,6 +10,10 @@
 
 static method foo(dynamic a, dynamic b) → dynamic
   return null;
-static method main() → dynamic {
-  self::foo(null, let final () → Null f = () → Null {} in f);
+static method test() → dynamic {
+  self::foo(null, block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+  foo(null, f() {});
+            ^");
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart b/pkg/front_end/testcases/regress/issue_29979.dart
index c6bfd12..70b39d7 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart
+++ b/pkg/front_end/testcases/regress/issue_29979.dart
@@ -2,6 +2,6 @@
 // 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.
 
-main() {
+test() {
   (f() {})();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline.expect b/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline.expect
index bae895a..a9f9e5f 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline.expect
@@ -1 +1 @@
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline_modelled.expect
index bae895a..a9f9e5f 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.textual_outline_modelled.expect
@@ -1 +1 @@
-main() {}
+test() {}
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
index 453aa64..dcd451c 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.expect
@@ -8,6 +8,10 @@
 //
 import self as self;
 
-static method main() → dynamic {
-  (let final () → Null f = () → Null {} in f)(){() → Null};
+static method test() → dynamic {
+  ( block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+  (f() {})();
+   ^"){dynamic}.call();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect
index 453aa64..dcd451c 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect
@@ -8,6 +8,10 @@
 //
 import self as self;
 
-static method main() → dynamic {
-  (let final () → Null f = () → Null {} in f)(){() → Null};
+static method test() → dynamic {
+  ( block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+  (f() {})();
+   ^"){dynamic}.call();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.outline.expect
index e2cba6b..eef3152 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.outline.expect
@@ -1,5 +1,5 @@
 library /*isNonNullableByDefault*/;
 import self as self;
 
-static method main() → dynamic
+static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
index 453aa64..dcd451c 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.transformed.expect
@@ -8,6 +8,10 @@
 //
 import self as self;
 
-static method main() → dynamic {
-  (let final () → Null f = () → Null {} in f)(){() → Null};
+static method test() → dynamic {
+  ( block {
+    function f() → Null {}
+  } =>invalid-expression "pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+  (f() {})();
+   ^"){dynamic}.call();
 }
diff --git a/pkg/vm/lib/transformations/ffi/finalizable.dart b/pkg/vm/lib/transformations/ffi/finalizable.dart
index 84b1469..4fe96f3 100644
--- a/pkg/vm/lib/transformations/ffi/finalizable.dart
+++ b/pkg/vm/lib/transformations/ffi/finalizable.dart
@@ -220,14 +220,15 @@
 
   @override
   TreeNode visitVariableDeclaration(VariableDeclaration node) {
+    node = super.visitVariableDeclaration(node) as VariableDeclaration;
     if (_currentScope == null) {
       // Global variable.
-      return super.visitVariableDeclaration(node);
+      return node;
     }
     if (_isFinalizable(node.type)) {
       _currentScope!.addDeclaration(node);
     }
-    return super.visitVariableDeclaration(node);
+    return node;
   }
 
   @override
diff --git a/pkg/vm/testcases/transformations/ffi/regress_49075.dart b/pkg/vm/testcases/transformations/ffi/regress_49075.dart
new file mode 100644
index 0000000..0046fd8
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/regress_49075.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2022, 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:ffi';
+
+Future<void> main(List<String> arguments) async {
+  // ignore: unused_local_variable
+  final myFinalizable = await MyFinalizable();
+}
+
+class MyFinalizable implements Finalizable {
+  MyFinalizable();
+}
diff --git a/pkg/vm/testcases/transformations/ffi/regress_49075.dart.expect b/pkg/vm/testcases/transformations/ffi/regress_49075.dart.expect
new file mode 100644
index 0000000..2974867
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/regress_49075.dart.expect
@@ -0,0 +1,45 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:ffi";
+
+class MyFinalizable extends core::Object implements ffi::Finalizable {
+  constructor •() → self::MyFinalizable
+    : super core::Object::•() {
+    ;
+    _in::reachabilityFence(this);
+  }
+}
+static method main(core::List<core::String> arguments) → asy::Future<void> /* futureValueType= void */ /* originally async */ {
+  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
+  core::bool* :is_sync = false;
+  void :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_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L1:
+      {
+        [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFinalizable::•(), :async_op_then, :async_op_error) in null;
+        final self::MyFinalizable myFinalizable = _in::unsafeCast<self::MyFinalizable>(:result_or_exception);
+        _in::reachabilityFence(myFinalizable);
+      }
+      asy::_completeWithNoFutureOnAsyncReturn(: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(null, null){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
diff --git a/tools/VERSION b/tools/VERSION
index cd48429..f0ba236 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 154
+PRERELEASE 155
 PRERELEASE_PATCH 0
\ No newline at end of file
