diff --git a/DEPS b/DEPS
index d3ee93d..f16ed79 100644
--- a/DEPS
+++ b/DEPS
@@ -112,11 +112,11 @@
   "idl_parser_rev": "5fb1ebf49d235b5a70c9f49047e83b0654031eb7",
   "intl_tag": "0.16.1",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
-  "json_rpc_2_rev": "413ee9d1d1841c23ebfd2248abc4fc950e0d6946",
+  "json_rpc_2_rev": "995611cf006c927d51cc53cb28f1aa4356d5414f",
   "linter_tag": "0.1.118",
   "logging_rev": "9561ba016ae607747ae69b846c0e10958ca58ed4",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
-  "markdown_rev": "acaddfe74217f62498b5cf0cf5429efa6a700be3",
+  "markdown_rev": "dbeafd47759e7dd0a167602153bb9c49fb5e5fe7",
   "matcher_rev": "9cae8faa7868bf3a88a7ba45eb0bd128e66ac515",
   "mime_rev": "179b5e6a88f4b63f36dc1b8fcbc1e83e5e0cd3a7",
   "mockito_rev": "d39ac507483b9891165e422ec98d9fb480037c8b",
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 72328fa..bb4ce51 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -29,6 +29,7 @@
 import 'package:analysis_server/src/services/correction/dart/remove_empty_else.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_empty_statement.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_initializer.dart';
+import 'package:analysis_server/src/services/correction/dart/remove_interpolation_braces.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_method_declaration.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_operator.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_this_expression.dart';
@@ -98,6 +99,8 @@
     LintNames.slash_for_doc_comments: ConvertDocumentationIntoLine.newInstance,
     LintNames.type_init_formals: RemoveTypeAnnotation.newInstance,
     LintNames.unawaited_futures: AddAwait.newInstance,
+    LintNames.unnecessary_brace_in_string_interps:
+        RemoveInterpolationBraces.newInstance,
     LintNames.unnecessary_const: RemoveUnnecessaryConst.newInstance,
     LintNames.unnecessary_lambdas: ReplaceWithTearOff.newInstance,
     LintNames.unnecessary_new: RemoveUnnecessaryNew.newInstance,
diff --git a/pkg/analysis_server/test/src/services/correction/fix/bulk/remove_interpolation_braces_test.dart b/pkg/analysis_server/test/src/services/correction/fix/bulk/remove_interpolation_braces_test.dart
new file mode 100644
index 0000000..5060050
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/bulk/remove_interpolation_braces_test.dart
@@ -0,0 +1,35 @@
+// 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 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'bulk_fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RemoveInterpolationBracesTest);
+  });
+}
+
+@reflectiveTest
+class RemoveInterpolationBracesTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.unnecessary_brace_in_string_interps;
+
+  Future<void> test_singleFile() async {
+    await resolveTestUnit(r'''
+main() {
+  var v = 42;
+  print('v: ${ v}, ${ v}');
+}
+''');
+    await assertHasFix(r'''
+main() {
+  var v = 42;
+  print('v: $v, $v');
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
index b7a2148..7f0b31c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
@@ -28,6 +28,7 @@
 import 'remove_empty_else_test.dart' as remove_empty_else;
 import 'remove_empty_statement_test.dart' as remove_empty_statement;
 import 'remove_initializer_test.dart' as remove_initializer;
+import 'remove_interpolation_braces_test.dart' as remove_interpolation_braces;
 import 'remove_method_declaration_test.dart' as remove_method_declaration;
 import 'remove_operator_test.dart' as remove_operator;
 import 'remove_this_expression_test.dart' as remove_this_expression;
@@ -67,6 +68,7 @@
     remove_empty_constructor_body.main();
     remove_empty_else.main();
     remove_empty_statement.main();
+    remove_interpolation_braces.main();
     remove_method_declaration.main();
     remove_operator.main();
     remove_this_expression.main();
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index 7ce888a..dffe753 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -13,11 +13,15 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssignmentDriverResolutionTest);
+    defineReflectiveTests(AssignmentDriverResolutionWithNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class AssignmentDriverResolutionTest extends PubPackageResolutionTest {
+class AssignmentDriverResolutionTest extends PubPackageResolutionTest
+    with AssignmentDriverResolutionTestCases {}
+
+mixin AssignmentDriverResolutionTestCases on PubPackageResolutionTest {
   test_compound_indexExpression() async {
     await resolveTestCode(r'''
 main() {
@@ -692,8 +696,9 @@
   }
 
   test_simpleIdentifier_parameter_compound_ifNull() async {
-    await assertNoErrorsInCode(r'''
-void f(num x) {
+    var question = typeToStringWithNullability ? '?' : '';
+    await assertNoErrorsInCode('''
+void f(num$question x) {
   x ??= 0;
 }
 ''');
@@ -709,19 +714,21 @@
       assignment.leftHandSide,
       readElement: findElement.parameter('x'),
       writeElement: findElement.parameter('x'),
-      type: 'num',
+      type: 'num$question',
     );
 
     assertType(assignment.rightHandSide, 'int');
   }
 
   test_simpleIdentifier_parameter_compound_ifNull_notAssignableType() async {
-    await assertErrorsInCode(r'''
-void f(double a, int b) {
+    var question = typeToStringWithNullability ? '?' : '';
+    var code = '''
+void f(double$question a, int b) {
   a ??= b;
 }
-''', [
-      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 34, 1),
+''';
+    await assertErrorsInCode(code, [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, code.indexOf('b;'), 1),
     ]);
 
     var assignment = findNode.assignment('a ??=');
@@ -735,7 +742,7 @@
       assignment.leftHandSide,
       readElement: findElement.parameter('a'),
       writeElement: findElement.parameter('a'),
-      type: 'double',
+      type: 'double$question',
     );
 
     assertSimpleIdentifier(
@@ -1471,3 +1478,8 @@
     assertType(assignment.rightHandSide, 'int');
   }
 }
+
+@reflectiveTest
+class AssignmentDriverResolutionWithNullSafetyTest
+    extends PubPackageResolutionTest
+    with WithNullSafetyMixin, AssignmentDriverResolutionTestCases {}
diff --git a/pkg/dartdev/lib/src/commands/test.dart b/pkg/dartdev/lib/src/commands/test.dart
index cf40ee1..ef2a9a2 100644
--- a/pkg/dartdev/lib/src/commands/test.dart
+++ b/pkg/dartdev/lib/src/commands/test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:io';
+import 'dart:math' as math;
 
 import 'package:args/args.dart';
 
@@ -12,25 +14,16 @@
 import '../vm_interop_handler.dart';
 
 class TestCommand extends DartdevCommand<int> {
-  TestCommand() : super('test', 'Runs tests in this project.');
-
-  @override
-  final ArgParser argParser = ArgParser.allowAnything();
+  TestCommand() : super('test', 'Runs tests in this project.') {
+    generateParser(argParser);
+  }
 
   @override
   void printUsage() {
     if (!Sdk.checkArtifactExists(sdk.pub)) {
       return;
     }
-    if ((project.packageConfig != null) &&
-        !project.packageConfig.hasDependency('test')) {
-      _printPackageTestInstructions();
-    }
-    final command = sdk.pub;
-    final args = ['run', 'test', '--help'];
-
-    log.trace('$command ${args.join(' ')}');
-    VmInteropHandler.run(command, args);
+    super.printUsage();
   }
 
   @override
@@ -78,4 +71,307 @@
 adding package:test, and https://dart.dev/guides/testing for general
 information on testing.''');
   }
+
+  /// This content has been copied from and kept in sync with
+  /// https://github.com/dart-lang/test, by having a copy in dartdev itself,
+  /// help is faster and more robust, see
+  /// https://github.com/dart-lang/sdk/issues/42014.
+  void generateParser(ArgParser parser) {
+    // Set in test/pkgs/test_core/lib/src/runner/configuration/values.dart:
+    final defaultConcurrency = math.max(1, Platform.numberOfProcessors ~/ 2);
+
+    /// The parser used to parse the command-line arguments.
+    var allRuntimes = Runtime.builtIn.toList()..remove(Runtime.vm);
+    if (!Platform.isMacOS) allRuntimes.remove(Runtime.safari);
+    if (!Platform.isWindows) allRuntimes.remove(Runtime.internetExplorer);
+
+//    parser.addFlag('help',
+//        abbr: 'h', negatable: false, help: 'Shows this usage information.');
+    parser.addFlag('version',
+        negatable: false, help: "Shows the package's version.");
+
+    // Note that defaultsTo declarations here are only for documentation
+    // purposes.
+    // We pass null instead of the default so that it merges properly with the
+    // config file.
+
+    parser.addSeparator('======== Selecting Tests');
+    parser.addMultiOption('name',
+        abbr: 'n',
+        help: 'A substring of the name of the test to run.\n'
+            'Regular expression syntax is supported.\n'
+            'If passed multiple times, tests must match all substrings.',
+        splitCommas: false);
+    parser.addMultiOption('plain-name',
+        abbr: 'N',
+        help: 'A plain-text substring of the name of the test to run.\n'
+            'If passed multiple times, tests must match all substrings.',
+        splitCommas: false);
+    parser.addMultiOption('tags',
+        abbr: 't',
+        help: 'Run only tests with all of the specified tags.\n'
+            'Supports boolean selector syntax.');
+    parser.addMultiOption('tag', hide: true);
+    parser.addMultiOption('exclude-tags',
+        abbr: 'x',
+        help: "Don't run tests with any of the specified tags.\n"
+            'Supports boolean selector syntax.');
+    parser.addMultiOption('exclude-tag', hide: true);
+    parser.addFlag('run-skipped',
+        help: 'Run skipped tests instead of skipping them.');
+
+    parser.addSeparator('======== Running Tests');
+
+    // The UI term "platform" corresponds with the implementation term "runtime".
+    // The [Runtime] class used to be called [TestPlatform], but it was changed to
+    // avoid conflicting with [SuitePlatform]. We decided not to also change the
+    // UI to avoid a painful migration.
+    parser.addMultiOption('platform',
+        abbr: 'p',
+        help: 'The platform(s) on which to run the tests.\n'
+            '[vm (default), '
+            '${allRuntimes.map((runtime) => runtime.identifier).join(", ")}]');
+    parser.addMultiOption('preset',
+        abbr: 'P', help: 'The configuration preset(s) to use.');
+    parser.addOption('concurrency',
+        abbr: 'j',
+        help: 'The number of concurrent test suites run.',
+        defaultsTo: defaultConcurrency.toString(),
+        valueHelp: 'threads');
+    parser.addOption('total-shards',
+        help: 'The total number of invocations of the test runner being run.');
+    parser.addOption('shard-index',
+        help: 'The index of this test runner invocation (of --total-shards).');
+    parser.addOption('pub-serve',
+        help: 'The port of a pub serve instance serving "test/".',
+        valueHelp: 'port');
+    parser.addOption('timeout',
+        help: 'The default test timeout. For example: 15s, 2x, none',
+        defaultsTo: '30s');
+    parser.addFlag('pause-after-load',
+        help: 'Pauses for debugging before any tests execute.\n'
+            'Implies --concurrency=1, --debug, and --timeout=none.\n'
+            'Currently only supported for browser tests.',
+        negatable: false);
+    parser.addFlag('debug',
+        help: 'Runs the VM and Chrome tests in debug mode.', negatable: false);
+    parser.addOption('coverage',
+        help: 'Gathers coverage and outputs it to the specified directory.\n'
+            'Implies --debug.',
+        valueHelp: 'directory');
+    parser.addFlag('chain-stack-traces',
+        help: 'Chained stack traces to provide greater exception details\n'
+            'especially for asynchronous code. It may be useful to disable\n'
+            'to provide improved test performance but at the cost of\n'
+            'debuggability.',
+        defaultsTo: true);
+    parser.addFlag('no-retry',
+        help: "Don't re-run tests that have retry set.",
+        defaultsTo: false,
+        negatable: false);
+    parser.addOption('test-randomize-ordering-seed',
+        help: 'The seed to randomize the execution order of test cases.\n'
+            'Must be a 32bit unsigned integer or "random".\n'
+            'If "random", pick a random seed to use.\n'
+            'If not passed, do not randomize test case execution order.');
+
+    var defaultReporter = 'compact';
+    var reporterDescriptions = <String, String>{
+      'compact': 'A single line, updated continuously.',
+      'expanded': 'A separate line for each update.',
+      'json': 'A machine-readable format (see https://goo.gl/gBsV1a).'
+    };
+
+    parser.addSeparator('======== Output');
+    parser.addOption('reporter',
+        abbr: 'r',
+        help: 'The runner used to print test results.',
+        defaultsTo: defaultReporter,
+        allowed: reporterDescriptions.keys.toList(),
+        allowedHelp: reporterDescriptions);
+    parser.addOption('file-reporter',
+        help: 'The reporter used to write test results to a file.\n'
+            'Should be in the form <reporter>:<filepath>, '
+            'e.g. "json:reports/tests.json"');
+    parser.addFlag('verbose-trace',
+        negatable: false,
+        help: 'Whether to emit stack traces with core library frames.');
+    parser.addFlag('js-trace',
+        negatable: false,
+        help: 'Whether to emit raw JavaScript stack traces for browser tests.');
+    parser.addFlag('color',
+        help: 'Whether to use terminal colors.\n(auto-detected by default)');
+
+    /// The following options are used only by the internal Google test runner.
+    /// They're hidden and not supported as stable API surface outside Google.
+    parser.addOption('configuration',
+        help: 'The path to the configuration file.', hide: true);
+    parser.addOption('dart2js-path',
+        help: 'The path to the dart2js executable.', hide: true);
+    parser.addMultiOption('dart2js-args',
+        help: 'Extra arguments to pass to dart2js.', hide: true);
+
+    // If we're running test/dir/my_test.dart, we'll look for
+    // test/dir/my_test.dart.html in the precompiled directory.
+    parser.addOption('precompiled',
+        help: 'The path to a mirror of the package directory containing HTML '
+            'that points to precompiled JS.',
+        hide: true);
+  }
+}
+
+/// An enum of all Dart runtimes supported by the test runner.
+class Runtime {
+  // When adding new runtimes, be sure to update the baseline and derived
+  // variable tests in test/backend/platform_selector/evaluate_test.
+
+  /// The command-line Dart VM.
+  static const Runtime vm = Runtime('VM', 'vm', isDartVM: true);
+
+  /// Google Chrome.
+  static const Runtime chrome =
+      Runtime('Chrome', 'chrome', isBrowser: true, isJS: true, isBlink: true);
+
+  /// PhantomJS.
+  static const Runtime phantomJS = Runtime('PhantomJS', 'phantomjs',
+      isBrowser: true, isJS: true, isBlink: true, isHeadless: true);
+
+  /// Mozilla Firefox.
+  static const Runtime firefox =
+      Runtime('Firefox', 'firefox', isBrowser: true, isJS: true);
+
+  /// Apple Safari.
+  static const Runtime safari =
+      Runtime('Safari', 'safari', isBrowser: true, isJS: true);
+
+  /// Microsoft Internet Explorer.
+  static const Runtime internetExplorer =
+      Runtime('Internet Explorer', 'ie', isBrowser: true, isJS: true);
+
+  /// The command-line Node.js VM.
+  static const Runtime nodeJS = Runtime('Node.js', 'node', isJS: true);
+
+  /// The platforms that are supported by the test runner by default.
+  static const List<Runtime> builtIn = [
+    Runtime.vm,
+    Runtime.chrome,
+    Runtime.phantomJS,
+    Runtime.firefox,
+    Runtime.safari,
+    Runtime.internetExplorer,
+    Runtime.nodeJS
+  ];
+
+  /// The human-friendly name of the platform.
+  final String name;
+
+  /// The identifier used to look up the platform.
+  final String identifier;
+
+  /// The parent platform that this is based on, or `null` if there is no
+  /// parent.
+  final Runtime parent;
+
+  /// Returns whether this is a child of another platform.
+  bool get isChild => parent != null;
+
+  /// Whether this platform runs the Dart VM in any capacity.
+  final bool isDartVM;
+
+  /// Whether this platform is a browser.
+  final bool isBrowser;
+
+  /// Whether this platform runs Dart compiled to JavaScript.
+  final bool isJS;
+
+  /// Whether this platform uses the Blink rendering engine.
+  final bool isBlink;
+
+  /// Whether this platform has no visible window.
+  final bool isHeadless;
+
+  /// Returns the platform this is based on, or [this] if it's not based on
+  /// anything.
+  ///
+  /// That is, returns [parent] if it's non-`null` or [this] if it's `null`.
+  Runtime get root => parent ?? this;
+
+  const Runtime(this.name, this.identifier,
+      {this.isDartVM = false,
+      this.isBrowser = false,
+      this.isJS = false,
+      this.isBlink = false,
+      this.isHeadless = false})
+      : parent = null;
+
+  Runtime._child(this.name, this.identifier, Runtime parent)
+      : isDartVM = parent.isDartVM,
+        isBrowser = parent.isBrowser,
+        isJS = parent.isJS,
+        isBlink = parent.isBlink,
+        isHeadless = parent.isHeadless,
+        parent = parent;
+
+  /// Converts a JSON-safe representation generated by [serialize] back into a
+  /// [Runtime].
+  factory Runtime.deserialize(Object serialized) {
+    if (serialized is String) {
+      return builtIn
+          .firstWhere((platform) => platform.identifier == serialized);
+    }
+
+    var map = serialized as Map;
+    var parent = map['parent'];
+    if (parent != null) {
+      // Note that the returned platform's [parent] won't necessarily be `==` to
+      // a separately-deserialized parent platform. This should be fine, though,
+      // since we only deserialize platforms in the remote execution context
+      // where they're only used to evaluate platform selectors.
+      return Runtime._child(map['name'] as String, map['identifier'] as String,
+          Runtime.deserialize(parent as Object));
+    }
+
+    return Runtime(map['name'] as String, map['identifier'] as String,
+        isDartVM: map['isDartVM'] as bool,
+        isBrowser: map['isBrowser'] as bool,
+        isJS: map['isJS'] as bool,
+        isBlink: map['isBlink'] as bool,
+        isHeadless: map['isHeadless'] as bool);
+  }
+
+  /// Converts [this] into a JSON-safe object that can be converted back to a
+  /// [Runtime] using [Runtime.deserialize].
+  Object serialize() {
+    if (builtIn.contains(this)) return identifier;
+
+    if (parent != null) {
+      return {
+        'name': name,
+        'identifier': identifier,
+        'parent': parent.serialize()
+      };
+    }
+
+    return {
+      'name': name,
+      'identifier': identifier,
+      'isDartVM': isDartVM,
+      'isBrowser': isBrowser,
+      'isJS': isJS,
+      'isBlink': isBlink,
+      'isHeadless': isHeadless
+    };
+  }
+
+  /// Returns a child of [this] that counts as both this platform's identifier
+  /// and the new [identifier].
+  ///
+  /// This may not be called on a platform that's already a child.
+  Runtime extend(String name, String identifier) {
+    if (parent == null) return Runtime._child(name, identifier, this);
+    throw StateError('A child platform may not be extended.');
+  }
+
+  @override
+  String toString() => name;
 }
diff --git a/pkg/dartdev/test/commands/test_test.dart b/pkg/dartdev/test/commands/test_test.dart
index a3b5265..9dbb186 100644
--- a/pkg/dartdev/test/commands/test_test.dart
+++ b/pkg/dartdev/test/commands/test_test.dart
@@ -17,16 +17,13 @@
 
   test('--help', () {
     p = project();
-
-    var result = p.runSync('pub', ['get', '--offline']);
+    var result = p.runSync('test', ['--help']);
     expect(result.exitCode, 0);
-
-    result = p.runSync('test', ['--help']);
-
-    expect(result.exitCode, 0);
-    expect(result.stdout, contains('Runs tests in this package'));
     expect(result.stderr, isEmpty);
-  }, skip: 'https://github.com/dart-lang/sdk/issues/40854');
+    expect(result.stdout, contains('Runs tests in this project.'));
+    expect(result.stdout, contains('Usage: dart test [arguments]'));
+    expect(result.stdout, contains('======== Selecting Tests'));
+  });
 
   test('no dependency', () {
     p = project(mainSrc: 'int get foo => 1;\n');
diff --git a/runtime/tests/vm/dart/regress_flutter63819_test.dart b/runtime/tests/vm/dart/regress_flutter63819_test.dart
new file mode 100644
index 0000000..56d2412
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_flutter63819_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+// Verify that 'is' test of a nullable type accepts null.
+// Regression test for https://github.com/flutter/flutter/issues/63819.
+
+import 'package:expect/expect.dart';
+
+abstract class A {}
+
+class B extends A {}
+
+class C extends A {}
+
+@pragma('vm:never-inline')
+bool foo(A? x) {
+  if (x is C?) {
+    print('$x is C?');
+    return true;
+  }
+  print('$x is not C?');
+  return false;
+}
+
+void main() {
+  B();
+  C();
+  Expect.isFalse(foo(B()));
+  Expect.isTrue(foo(null));
+}
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index d066f11..5f51a5b 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -453,6 +453,12 @@
                                             intptr_t* lower_limit,
                                             intptr_t* upper_limit) {
   ASSERT(CompilerState::Current().is_aot());
+  if (type.IsNullable()) {
+    // 'is' test for nullable types should accept null cid in addition to the
+    // class range. In most cases it is not possible to extend class range to
+    // include kNullCid.
+    return false;
+  }
   if (CanUseSubtypeRangeCheckFor(type)) {
     const Class& type_class =
         Class::Handle(thread()->zone(), type.type_class());
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 0d7ffce..a17e9c6 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -1161,8 +1161,10 @@
     demangled = &String::Handle(
         Function::DemangleDynamicInvocationForwarderName(target_name));
   }
+  const bool is_getter = Field::IsGetterName(*demangled);
   Function& result = Function::Handle();
-  if (!ResolveCallThroughGetter(receiver_class, target_name, *demangled,
+  if (is_getter ||
+      !ResolveCallThroughGetter(receiver_class, target_name, *demangled,
                                 args_descriptor, &result)) {
     ArgumentsDescriptor desc(args_descriptor);
     const Function& target_function =
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 10b1918..4cdd14f 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -801,12 +801,10 @@
       {sourceAddress, Duration? timeout}) {
     final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
-      // TODO(b/162514236): This breaks internal device lab tests for Fuchsia.
-      //
-      // if (!isInsecureConnectionAllowed(host)) {
-      //   throw new SocketException(
-      //       "Insecure socket connections are disallowed by platform: $host");
-      // }
+      if (!isInsecureConnectionAllowed(host)) {
+        throw new SocketException(
+            "Insecure socket connections are disallowed by platform: $host");
+      }
       return Socket._connect(host, port,
           sourceAddress: sourceAddress, timeout: timeout);
     }
@@ -821,12 +819,10 @@
       {sourceAddress}) {
     final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
-      // TODO(b/162514236): This breaks internal device lab tests for Fuchsia.
-      //
-      // if (!isInsecureConnectionAllowed(host)) {
-      //   throw new SocketException(
-      //       "Insecure socket connections are disallowed by platform: $host");
-      // }
+      if (!isInsecureConnectionAllowed(host)) {
+        throw new SocketException(
+            "Insecure socket connections are disallowed by platform: $host");
+      }
       return Socket._startConnect(host, port, sourceAddress: sourceAddress);
     }
     return overrides.socketStartConnect(host, port,
diff --git a/tests/standalone/io/network_policy_configuration_test.dart b/tests/standalone/io/network_policy_configuration_test.dart
index 6ee1bf0..49e6c56 100644
--- a/tests/standalone/io/network_policy_configuration_test.dart
+++ b/tests/standalone/io/network_policy_configuration_test.dart
@@ -24,9 +24,17 @@
 
 void main() {
   // These have no policy but the default is false.
-  _checkDenies(["mailfoobar.com", "abc.com", "oobar.com", "foobar.co"]);
+  _checkDenies([
+    "mailfoobar.com",
+    "abc.com",
+    "oobar.com",
+    "foobar.co",
+    "128.221.55.31",
+    "fe80::4607:0bff:fea0:7747%invalid",
+  ]);
   // These are explicitly denied.
   _checkDenies(["baz.foobar.com"]);
   _checkAllows(
       ["foobar.com", "test.baz.foobar.com", "test2.test.baz.foobar.com"]);
+  _checkAllows(["::1", "localhost"]);
 }
diff --git a/tests/standalone/standalone_kernel.status b/tests/standalone/standalone_kernel.status
index a45b3d0..5eca181 100644
--- a/tests/standalone/standalone_kernel.status
+++ b/tests/standalone/standalone_kernel.status
@@ -7,8 +7,6 @@
 fragmentation_test: Pass, Slow # GC heavy
 fragmentation_typed_data_test: Pass, Slow # GC heavy
 io/process_sync_test: Pass, Slow # Spawns synchronously subprocesses in sequence.
-io/socket_network_policy_test: Skip # Temporarily disabled.
-io/socket_network_policy_localhost_test: Skip # Temporarily disabled.
 
 [ $compiler == dartkb ]
 no_lazy_dispatchers_test: SkipByDesign # KBC interpreter doesn't support --no_lazy_dispatchers
diff --git a/tests/standalone_2/io/network_policy_configuration_test.dart b/tests/standalone_2/io/network_policy_configuration_test.dart
index 6ee1bf0..49e6c56 100644
--- a/tests/standalone_2/io/network_policy_configuration_test.dart
+++ b/tests/standalone_2/io/network_policy_configuration_test.dart
@@ -24,9 +24,17 @@
 
 void main() {
   // These have no policy but the default is false.
-  _checkDenies(["mailfoobar.com", "abc.com", "oobar.com", "foobar.co"]);
+  _checkDenies([
+    "mailfoobar.com",
+    "abc.com",
+    "oobar.com",
+    "foobar.co",
+    "128.221.55.31",
+    "fe80::4607:0bff:fea0:7747%invalid",
+  ]);
   // These are explicitly denied.
   _checkDenies(["baz.foobar.com"]);
   _checkAllows(
       ["foobar.com", "test.baz.foobar.com", "test2.test.baz.foobar.com"]);
+  _checkAllows(["::1", "localhost"]);
 }
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index a45b3d0..5eca181 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -7,8 +7,6 @@
 fragmentation_test: Pass, Slow # GC heavy
 fragmentation_typed_data_test: Pass, Slow # GC heavy
 io/process_sync_test: Pass, Slow # Spawns synchronously subprocesses in sequence.
-io/socket_network_policy_test: Skip # Temporarily disabled.
-io/socket_network_policy_localhost_test: Skip # Temporarily disabled.
 
 [ $compiler == dartkb ]
 no_lazy_dispatchers_test: SkipByDesign # KBC interpreter doesn't support --no_lazy_dispatchers
diff --git a/tools/VERSION b/tools/VERSION
index caa91be..afa83d0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 37
+PRERELEASE 38
 PRERELEASE_PATCH 0
\ No newline at end of file
