diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index 41802d0..cf14dd4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -521,23 +521,20 @@
         nameErrorEntity: function,
       );
 
-      if (functionType == null) {
+      if (functionType is FunctionType) {
+        function.staticType = functionType;
+        _resolve(
+          node: node,
+          rawType: functionType,
+          name: function.propertyName.name,
+        );
+      } else {
         // The target is known, but the method is not; [UNDEFINED_GETTER] is
         // reported elsewhere.
         node.staticType = DynamicTypeImpl.instance;
-        return;
-      } else {
-        if (functionType is FunctionType) {
-          function.staticType = functionType;
-          _resolve(
-            node: node,
-            rawType: functionType,
-            name: function.propertyName.name,
-          );
-        }
-
-        return;
       }
+
+      return;
     }
 
     var propertyElement = _resolver.typePropertyResolver
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index a2dab45..6cb3570 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -945,6 +945,22 @@
         reference, findElement.method('foo'), 'void Function(int)');
   }
 
+  test_instanceMethod_explicitReceiver_getter_wrongNumberOfTypeArguments() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+void f(A a) {
+  // Extra `()` to force reading the type.
+  ((a).foo<double>);
+}
+''');
+
+    var reference = findNode.functionReference('foo<double>');
+    assertFunctionReference(reference, null, 'dynamic');
+  }
+
   test_instanceMethod_explicitReceiver_otherExpression() async {
     await assertNoErrorsInCode('''
 class A {
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index 12f0069..937f1c0 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -543,10 +543,13 @@
       // Loops and switches handle their own labels.
       visit(body);
     } else {
+      LocalState stateBefore = _state;
       JumpTarget jumpTarget = _localsMap.getJumpTargetForLabel(node);
       _setupBreaksAndContinues(jumpTarget);
+      _state = LocalState.childPath(stateBefore);
       visit(body);
-      _state.mergeAfterBreaks(_inferrer, _getBreaks(jumpTarget));
+      _state = stateBefore.mergeAfterBreaks(_inferrer, _getBreaks(jumpTarget),
+          keepOwnLocals: false);
       _clearBreaksAndContinues(jumpTarget);
     }
     return null;
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index c0c8468..1d417b8 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -82,11 +82,11 @@
   /// [FeatureOption]s which are shipped and cannot be toggled.
   late final List<FeatureOption> shipped = [
     newHolders,
+    legacyJavaScript,
   ];
 
   /// [FeatureOption]s which default to enabled.
   late final List<FeatureOption> shipping = [
-    legacyJavaScript,
     useContentSecurityPolicy,
   ];
 
@@ -948,7 +948,7 @@
     }
     if (enableFeature && feature.isNegativeFlag) {
       throw ArgumentError(
-          "$disableFeatureFlag has already shipped and cannot be enabled.");
+          "$enableFeatureFlag has been removed and cannot be enabled.");
     }
     if (disableFeature && !feature.isNegativeFlag) {
       throw ArgumentError(
diff --git a/pkg/compiler/test/inference/data/break_continue.dart b/pkg/compiler/test/inference/data/break_continue.dart
index 9fbb86e..d815f1d 100644
--- a/pkg/compiler/test/inference/data/break_continue.dart
+++ b/pkg/compiler/test/inference/data/break_continue.dart
@@ -12,6 +12,8 @@
   noContinueInWhile();
   breakInIf();
   noBreakInIf();
+  breakInBlock();
+  noBreakInBlock();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -107,7 +109,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// A break statement in a labeled statement.
+// A conditional break statement in a labeled statement.
 ////////////////////////////////////////////////////////////////////////////////
 
 /*member: _breakInIf:Union([exact=JSString], [exact=JSUInt31])*/
@@ -150,3 +152,34 @@
   _noBreakInIf(true);
   _noBreakInIf(false);
 }
+
+////////////////////////////////////////////////////////////////////////////////
+// An unconditional break statement in a labeled statement.
+////////////////////////////////////////////////////////////////////////////////
+
+/*member: breakInBlock:Value([exact=JSString], value: "")*/
+breakInBlock() {
+  dynamic local = 42;
+  label:
+  {
+    local = '';
+    break label;
+    local = false;
+  }
+  return local;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// The "labeled statement" above _without_ the break statement.
+////////////////////////////////////////////////////////////////////////////////
+
+/*member: noBreakInBlock:Value([exact=JSBool], value: false)*/
+noBreakInBlock() {
+  dynamic local = 42;
+  label:
+  {
+    local = '';
+    local = false;
+  }
+  return local;
+}
diff --git a/pkg/compiler/test/inference/data/general.dart b/pkg/compiler/test/inference/data/general.dart
index da299fc..db114da 100644
--- a/pkg/compiler/test/inference/data/general.dart
+++ b/pkg/compiler/test/inference/data/general.dart
@@ -560,13 +560,13 @@
   return a;
 }
 
-/*member: testDoWhile3:[exact=JSUInt31]*/
+/*member: testDoWhile3:Value([exact=JSBool], value: false)*/
 testDoWhile3() {
   dynamic a = 42;
   do {
     a = 'foo';
     if (true) continue;
-    return 42;
+    return false;
   } while (true);
   // ignore: dead_code
   return a;
diff --git a/tests/web/regress/48317_test.dart b/tests/web/regress/48317_test.dart
new file mode 100644
index 0000000..ff16cfc
--- /dev/null
+++ b/tests/web/regress/48317_test.dart
@@ -0,0 +1,18 @@
+// 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 'package:expect/expect.dart';
+
+helper(num c) => c * -1;
+
+void main() {
+  num a = 3;
+
+  label:
+  {
+    break label;
+  }
+
+  Expect.equals(-3, helper(a));
+}
diff --git a/tests/web_2/regress/48317_test.dart b/tests/web_2/regress/48317_test.dart
new file mode 100644
index 0000000..ff16cfc
--- /dev/null
+++ b/tests/web_2/regress/48317_test.dart
@@ -0,0 +1,18 @@
+// 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 'package:expect/expect.dart';
+
+helper(num c) => c * -1;
+
+void main() {
+  num a = 3;
+
+  label:
+  {
+    break label;
+  }
+
+  Expect.equals(-3, helper(a));
+}
diff --git a/tools/VERSION b/tools/VERSION
index cff630a..99ab702 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 120
+PRERELEASE 121
 PRERELEASE_PATCH 0
\ No newline at end of file
