diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index c53d050..745683b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -43,6 +43,7 @@
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary2/ast_binary_flags.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer/src/workspace/pub.dart';
 import 'package:meta/meta.dart';
 
 /// This class computes [AnalysisResult]s for Dart files.
@@ -142,6 +143,7 @@
   /// The salt to mix into all hashes used as keys for linked data.
   final Uint32List _saltForResolution = Uint32List(3 +
       AnalysisOptionsImpl.signatureLength +
+      AnalysisOptionsImpl.signatureLength +
       _declaredVariablesSignatureLength);
 
   /// The set of priority files, that should be analyzed sooner.
@@ -1899,6 +1901,25 @@
     _saltForResolution[index] = enableDebugResolutionMarkers ? 1 : 0;
     index++;
 
+    // TODO(scheglov) Just combine everything into one signature.
+    {
+      var buffer = ApiSignature();
+
+      var workspace = analysisContext?.contextRoot.workspace;
+      // TODO(scheglov) Generalize?
+      if (workspace is PubWorkspace) {
+        buffer.addString(workspace.pubspecContent ?? '');
+      }
+
+      var bytes = buffer.toByteList();
+      _saltForResolution.setAll(
+        index,
+        // TODO(scheglov) Add a special method to ApiSignature?
+        Uint8List.fromList(bytes).buffer.asUint32List(),
+      );
+      index += AnalysisOptionsImpl.signatureLength;
+    }
+
     _saltForResolution.setAll(index, _analysisOptions.signature);
     index += AnalysisOptionsImpl.signatureLength;
 
diff --git a/pkg/analyzer/lib/src/dart/error/lint_codes.dart b/pkg/analyzer/lib/src/dart/error/lint_codes.dart
index d2c467a..536a0cb 100644
--- a/pkg/analyzer/lib/src/dart/error/lint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/lint_codes.dart
@@ -39,13 +39,6 @@
       other is LintCode && uniqueName == other.uniqueName;
 }
 
-@Deprecated('Use SecurityLintCode and its uniqueName')
-class LintCodeWithUniqueName extends LintCode {
-  const LintCodeWithUniqueName(String name, String uniqueName, String message,
-      {String? correction})
-      : super(name, message, uniqueName: uniqueName, correction: correction);
-}
-
 /// Defines security-related best practice recommendations.
 ///
 /// The primary difference from [LintCode]s is that these codes cannot be
@@ -59,11 +52,3 @@
   @override
   bool get isIgnorable => false;
 }
-
-@Deprecated('Use SecurityLintCode and its uniqueName')
-class SecurityLintCodeWithUniqueName extends SecurityLintCode {
-  const SecurityLintCodeWithUniqueName(
-      String name, String uniqueName, String message,
-      {String? correction})
-      : super(name, message, uniqueName: uniqueName, correction: correction);
-}
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 638fe05..c2b43c0 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -345,11 +345,7 @@
       _linker.elementNodes[element] = node;
       _enclosingContext.addParameter(null, element);
     }
-
-    // TODO(scheglov) https://github.com/dart-lang/sdk/issues/46039
-    // element.hasImplicitType = node.type == null && node.parameters == null;
-    element.hasImplicitType = false;
-
+    element.hasImplicitType = node.type == null && node.parameters == null;
     element.isExplicitlyCovariant = node.covariantKeyword != null;
     element.isFinal = node.isFinal;
     element.metadata = _buildAnnotations(node.metadata);
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index f9bf281..5f82cce 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -251,12 +251,6 @@
     required this.units,
   });
 
-  @Deprecated('Use LinkInputLibrary() with instead')
-  LinkInputLibrary.tmp1({
-    required this.source,
-    required this.units,
-  });
-
   Uri get uri => source.uri;
 
   String get uriStr => '$uri';
@@ -277,15 +271,6 @@
     required this.unit,
   });
 
-  @Deprecated('Use LinkInputUnit() with instead')
-  LinkInputUnit.tmp1({
-    required this.partDirectiveIndex,
-    this.partUriStr,
-    required this.source,
-    required this.isSynthetic,
-    required this.unit,
-  });
-
   Uri get uri => source.uri;
 
   String get uriStr => '$uri';
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index 5d76afe..2dd428d 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -7,7 +7,6 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -153,7 +152,7 @@
   _ConstructorInferenceNode(this._walker, this._constructor) {
     for (var parameter in _constructor.parameters) {
       if (parameter is FieldFormalParameterElementImpl) {
-        if (_hasImplicitType(parameter)) {
+        if (parameter.hasImplicitType) {
           var field = parameter.field;
           if (field != null) {
             _parameters.add(
@@ -234,18 +233,6 @@
     }
     isEvaluated = true;
   }
-
-  /// TODO(scheglov) https://github.com/dart-lang/sdk/issues/46039
-  bool _hasImplicitType(FieldFormalParameterElementImpl parameter) {
-    var parameterNode = _walker._linker.getLinkingNode(parameter);
-    if (parameterNode is DefaultFormalParameter) {
-      parameterNode = parameterNode.parameter;
-    }
-    return parameterNode is FieldFormalParameterImpl &&
-        parameterNode.type == null &&
-        parameterNode.parameters == null;
-    // return parameter.hasImplicitType;
-  }
 }
 
 /// A field formal parameter with a non-nullable field.
diff --git a/pkg/analyzer/lib/src/workspace/package_build.dart b/pkg/analyzer/lib/src/workspace/package_build.dart
index 94716f7..fc64f2a 100644
--- a/pkg/analyzer/lib/src/workspace/package_build.dart
+++ b/pkg/analyzer/lib/src/workspace/package_build.dart
@@ -190,6 +190,13 @@
   UriResolver get packageUriResolver => PackageBuildPackageUriResolver(
       this, PackageMapUriResolver(provider, packageMap));
 
+  @override
+  String? get pubspecContent {
+    try {
+      return _pubspecFile.readAsStringSync();
+    } catch (_) {}
+  }
+
   /// For some package file, which may or may not be a package source (it could
   /// be in `bin/`, `web/`, etc), find where its built counterpart will exist if
   /// its a generated source.
diff --git a/pkg/analyzer/lib/src/workspace/pub.dart b/pkg/analyzer/lib/src/workspace/pub.dart
index 9ec1ee7..76b85c1 100644
--- a/pkg/analyzer/lib/src/workspace/pub.dart
+++ b/pkg/analyzer/lib/src/workspace/pub.dart
@@ -31,6 +31,13 @@
     _theOnlyPackage = PubWorkspacePackage(root, this);
   }
 
+  /// Return the content of the pubspec file, `null` if cannot be read.
+  String? get pubspecContent {
+    try {
+      return _pubspecFile.readAsStringSync();
+    } catch (_) {}
+  }
+
   @override
   WorkspacePackage? findPackageFor(String filePath) {
     final Folder folder = provider.getFolder(filePath);
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
index ac0dca1..621c1a4 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
@@ -2,6 +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.
 
+import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/error/lint_codes.dart';
 import 'package:test/test.dart';
@@ -144,6 +145,66 @@
     _assertNoLinkedCycles();
   }
 
+  test_lint_dependOnReferencedPackage_update_pubspec_addDependency() async {
+    useEmptyByteStore();
+
+    var aaaPackageRootPath = '$packagesRootPath/aaa';
+    newFile('$aaaPackageRootPath/lib/a.dart', content: '');
+
+    writeTestPackageConfig(
+      PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: aaaPackageRootPath),
+    );
+
+    // Configure with the lint.
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(lints: ['depend_on_referenced_packages']),
+    );
+
+    // Configure without dependencies, but with a (required) name.
+    // So, the lint rule will be activated.
+    writeTestPackagePubspecYamlFile(
+      PubspecYamlFileConfig(
+        name: 'my_test',
+        dependencies: [],
+      ),
+    );
+
+    newFile(testFilePath, content: r'''
+// ignore:unused_import
+import 'package:aaa/a.dart';
+''');
+
+    // We don't have a dependency on `package:aaa`, so there is a lint.
+    _assertHasLintReported(
+      await _computeTestFileErrors(),
+      'depend_on_referenced_packages',
+    );
+
+    // The summary for the library was linked.
+    _assertContainsLinkedCycle({testFilePath}, andClear: true);
+
+    // We will recreate it with new pubspec.yaml content.
+    // But we will reuse the byte store, so can reuse summaries.
+    disposeAnalysisContextCollection();
+
+    // Add dependency on `package:aaa`.
+    writeTestPackagePubspecYamlFile(
+      PubspecYamlFileConfig(
+        name: 'my_test',
+        dependencies: [
+          PubspecYamlFileDependency(name: 'aaa'),
+        ],
+      ),
+    );
+
+    // With dependency on `package:aaa` added, no lint is reported.
+    expect(await _computeTestFileErrors(), isEmpty);
+
+    // Lints don't affect summaries, nothing should be linked.
+    _assertNoLinkedCycles();
+  }
+
   test_lints() async {
     useEmptyByteStore();
 
@@ -204,4 +265,17 @@
   void _assertNoLinkedCycles() {
     expect(_linkedCycles, isEmpty);
   }
+
+  /// Note that we intentionally use this method, we don't want to use
+  /// [resolveFile] instead. Resolving a file will force to produce its
+  /// resolved AST, and as a result to recompute the errors.
+  ///
+  /// But this method is used to check returning errors from the cache, or
+  /// recomputing when the cache key is expected to be different.
+  Future<List<AnalysisError>> _computeTestFileErrors() async {
+    var errorsResult = await contextFor(testFilePath)
+        .currentSession
+        .getErrors2(testFilePath) as ErrorsResult;
+    return errorsResult.errors;
+  }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index c8ffb4d..bfbaa94 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -347,22 +347,49 @@
 }
 
 class PubspecYamlFileConfig {
+  final String? name;
   final String? sdkVersion;
+  final List<PubspecYamlFileDependency> dependencies;
 
-  PubspecYamlFileConfig({this.sdkVersion});
+  PubspecYamlFileConfig({
+    this.name,
+    this.sdkVersion,
+    this.dependencies = const [],
+  });
 
   String toContent() {
     var buffer = StringBuffer();
 
+    if (name != null) {
+      buffer.writeln('name: $name');
+    }
+
     if (sdkVersion != null) {
       buffer.writeln('environment:');
       buffer.writeln("  sdk: '$sdkVersion'");
     }
 
+    if (dependencies.isNotEmpty) {
+      buffer.writeln('dependencies:');
+      for (var dependency in dependencies) {
+        buffer.writeln('  ${dependency.name}: ${dependency.version}');
+      }
+    }
+
     return buffer.toString();
   }
 }
 
+class PubspecYamlFileDependency {
+  final String name;
+  final String version;
+
+  PubspecYamlFileDependency({
+    required this.name,
+    this.version = 'any',
+  });
+}
+
 mixin WithNoImplicitCastsMixin on PubPackageResolutionTest {
   Future<void> assertErrorsWithNoImplicitCasts(
     String code,
diff --git a/pkg/analyzer/test/src/diagnostics/avoid_types_as_parameter_names_test.dart b/pkg/analyzer/test/src/diagnostics/avoid_types_as_parameter_names_test.dart
deleted file mode 100644
index f6563a0..0000000
--- a/pkg/analyzer/test/src/diagnostics/avoid_types_as_parameter_names_test.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/src/dart/error/lint_codes.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../dart/resolution/context_collection_resolution.dart';
-
-/// TODO(scheglov) Remove the file after fixing the linter.
-/// https://github.com/dart-lang/sdk/issues/46039
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(AvoidTypesAsParameterNamesTest);
-  });
-}
-
-@reflectiveTest
-class AvoidTypesAsParameterNamesTest extends PubPackageResolutionTest {
-  @override
-  void setUp() {
-    super.setUp();
-    writeTestPackageAnalysisOptionsFile(
-      AnalysisOptionsFileConfig(
-        lints: [
-          'avoid_types_as_parameter_names',
-        ],
-      ),
-    );
-  }
-
-  test_fieldFormalParameter() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  final int num;
-  const A(this.num);
-}
-''');
-  }
-
-  test_simpleFormalParameter_function() async {
-    await assertErrorsInCode(r'''
-void f(int) {}
-''', [
-      error(LintCode('avoid_types_as_parameter_names', ''), 7, 3),
-    ]);
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
index 89c5750..00b7f90 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,10 +24,6 @@
 }
 ''', [
       error(ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR, 27, 1),
-      // TODO(srawlins): Don't report this from within a mixin.
-      // TODO(scheglov) https://github.com/dart-lang/sdk/issues/46039
-      error(
-          CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, 29, 6),
     ]);
 
     var element = findElement.mixin('M');
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 97e5005..0625bd7 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -35,8 +35,6 @@
 import 'async_for_in_wrong_context_test.dart' as async_for_in_wrong_context;
 import 'async_keyword_used_as_identifier_test.dart'
     as async_keyword_used_as_identifier;
-import 'avoid_types_as_parameter_names_test.dart'
-    as avoid_types_as_parameter_names;
 import 'await_in_late_local_variable_initializer_test.dart'
     as await_in_late_local_variable_initializer;
 import 'await_in_wrong_context_test.dart' as await_in_wrong_context;
@@ -728,7 +726,6 @@
     assignment_to_type.main();
     async_for_in_wrong_context.main();
     async_keyword_used_as_identifier.main();
-    avoid_types_as_parameter_names.main();
     await_in_late_local_variable_initializer.main();
     await_in_wrong_context.main();
     binary_operator_written_out.main();
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index eb5b694..da97a49 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -243,13 +243,13 @@
   __ movq(RDI, Address(RSP, 4 * target::kWordSize));  // x_digits
   __ movq(R8, Address(RSP, 3 * target::kWordSize));   // x_used is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(R8, R8);
+  __ movsxd(R8, R8);
 #endif
   __ subq(R8, Immediate(2));  // x_used > 0, Smi. R8 = x_used - 1, round up.
   __ sarq(R8, Immediate(2));  // R8 + 1 = number of digit pairs to read.
   __ movq(RCX, Address(RSP, 2 * target::kWordSize));  // n is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RCX, RCX);
+  __ movsxd(RCX, RCX);
 #endif
   __ SmiUntag(RCX);
   __ movq(RBX, Address(RSP, 1 * target::kWordSize));  // r_digits
@@ -289,7 +289,7 @@
   __ movq(RDI, Address(RSP, 4 * target::kWordSize));  // x_digits
   __ movq(RCX, Address(RSP, 2 * target::kWordSize));  // n is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RCX, RCX);
+  __ movsxd(RCX, RCX);
 #endif
   __ SmiUntag(RCX);
   __ movq(RBX, Address(RSP, 1 * target::kWordSize));  // r_digits
@@ -297,7 +297,7 @@
   __ sarq(RDX, Immediate(6));  // RDX = n ~/ (2*_DIGIT_BITS).
   __ movq(RSI, Address(RSP, 3 * target::kWordSize));  // x_used is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RSI, RSI);
+  __ movsxd(RSI, RSI);
 #endif
   __ subq(RSI, Immediate(2));  // x_used > 0, Smi. RSI = x_used - 1, round up.
   __ sarq(RSI, Immediate(2));
@@ -335,14 +335,14 @@
   __ movq(RDI, Address(RSP, 5 * target::kWordSize));  // digits
   __ movq(R8, Address(RSP, 4 * target::kWordSize));   // used is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(R8, R8);
+  __ movsxd(R8, R8);
 #endif
   __ addq(R8, Immediate(2));  // used > 0, Smi. R8 = used + 1, round up.
   __ sarq(R8, Immediate(2));  // R8 = number of digit pairs to process.
   __ movq(RSI, Address(RSP, 3 * target::kWordSize));  // a_digits
   __ movq(RCX, Address(RSP, 2 * target::kWordSize));  // a_used is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RCX, RCX);
+  __ movsxd(RCX, RCX);
 #endif
   __ addq(RCX, Immediate(2));  // a_used > 0, Smi. R8 = a_used + 1, round up.
   __ sarq(RCX, Immediate(2));  // R8 = number of digit pairs to process.
@@ -402,14 +402,14 @@
   __ movq(RDI, Address(RSP, 5 * target::kWordSize));  // digits
   __ movq(R8, Address(RSP, 4 * target::kWordSize));   // used is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(R8, R8);
+  __ movsxd(R8, R8);
 #endif
   __ addq(R8, Immediate(2));  // used > 0, Smi. R8 = used + 1, round up.
   __ sarq(R8, Immediate(2));  // R8 = number of digit pairs to process.
   __ movq(RSI, Address(RSP, 3 * target::kWordSize));  // a_digits
   __ movq(RCX, Address(RSP, 2 * target::kWordSize));  // a_used is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RCX, RCX);
+  __ movsxd(RCX, RCX);
 #endif
   __ addq(RCX, Immediate(2));  // a_used > 0, Smi. R8 = a_used + 1, round up.
   __ sarq(RCX, Immediate(2));  // R8 = number of digit pairs to process.
@@ -489,7 +489,7 @@
   __ movq(RCX, Address(RSP, 7 * target::kWordSize));  // x_digits
   __ movq(RAX, Address(RSP, 6 * target::kWordSize));  // xi is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RAX, RAX);
+  __ movsxd(RAX, RAX);
 #endif
   __ movq(RBX,
           FieldAddress(RCX, RAX, TIMES_2, target::TypedData::data_offset()));
@@ -499,7 +499,7 @@
   // R8 = (SmiUntag(n) + 1)/2, no_op if n == 0
   __ movq(R8, Address(RSP, 1 * target::kWordSize));  // n is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(R8, R8);
+  __ movsxd(R8, R8);
 #endif
   __ addq(R8, Immediate(2));
   __ sarq(R8, Immediate(2));  // R8 = number of digit pairs to process.
@@ -509,7 +509,7 @@
   __ movq(RDI, Address(RSP, 5 * target::kWordSize));  // m_digits
   __ movq(RAX, Address(RSP, 4 * target::kWordSize));  // i is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RAX, RAX);
+  __ movsxd(RAX, RAX);
 #endif
   __ leaq(RDI,
           FieldAddress(RDI, RAX, TIMES_2, target::TypedData::data_offset()));
@@ -518,7 +518,7 @@
   __ movq(RSI, Address(RSP, 3 * target::kWordSize));  // a_digits
   __ movq(RAX, Address(RSP, 2 * target::kWordSize));  // j is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RAX, RAX);
+  __ movsxd(RAX, RAX);
 #endif
   __ leaq(RSI,
           FieldAddress(RSI, RAX, TIMES_2, target::TypedData::data_offset()));
@@ -609,7 +609,7 @@
   __ movq(RDI, Address(RSP, 4 * target::kWordSize));  // x_digits
   __ movq(RAX, Address(RSP, 3 * target::kWordSize));  // i is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RAX, RAX);
+  __ movsxd(RAX, RAX);
 #endif
   __ leaq(RDI,
           FieldAddress(RDI, RAX, TIMES_2, target::TypedData::data_offset()));
@@ -730,7 +730,7 @@
   __ movq(RBX, Address(RSP, 2 * target::kWordSize));  // digits
   __ movq(RAX, Address(RSP, 1 * target::kWordSize));  // i is Smi and odd.
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RAX, RAX);
+  __ movsxd(RAX, RAX);
 #endif
   __ leaq(RBX, FieldAddress(
                    RBX, RAX, TIMES_2,
@@ -785,7 +785,7 @@
   __ movq(RBX, Address(RSP, 2 * target::kWordSize));  // digits
   __ movq(RAX, Address(RSP, 1 * target::kWordSize));  // i is Smi
 #if defined(DART_COMPRESSED_POINTERS)
-  __ movsxw(RAX, RAX);
+  __ movsxd(RAX, RAX);
 #endif
   __ movq(RAX,
           FieldAddress(RBX, RAX, TIMES_2, target::TypedData::data_offset()));
diff --git a/sdk/lib/html/doc/WORKAROUNDS.md b/sdk/lib/html/doc/WORKAROUNDS.md
index d3d8456..39a1c06 100644
--- a/sdk/lib/html/doc/WORKAROUNDS.md
+++ b/sdk/lib/html/doc/WORKAROUNDS.md
@@ -26,7 +26,7 @@
 missing the API `readAsBinaryString` ([#42834][]). We can work around this by
 doing something like the following:
 
-```
+```dart
 import 'dart:html';
 import 'dart:js_util' as js_util;
 
@@ -50,7 +50,7 @@
 `callConstructor`. For example, instead of using the factory constructor for
 `KeyboardEvent`, we can do the following:
 
-```
+```dart
 import 'dart:html';
 import 'dart:js_util' as js_util;
 
@@ -77,7 +77,7 @@
 again to circumvent this issue. For example, we can manipulate a
 `_SubtleCrypto` object:
 
-```
+```dart
 import 'dart:html';
 import 'dart:js_util' as js_util;
 import 'dart:typed_data';
@@ -99,7 +99,7 @@
 What you shouldn’t do is attempt to cast these native objects using your own JS
 interop types, e.g.
 
-```
+```dart
 import 'dart:html';
 
 import 'package:js/js.dart';
diff --git a/tests/corelib/very_big_integer_test.dart b/tests/corelib/very_big_integer_test.dart
new file mode 100644
index 0000000..cbfc609
--- /dev/null
+++ b/tests/corelib/very_big_integer_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+main() {
+  // x and y have lengths in 32-bit digits that overflow 16 bits.
+  var x = new BigInt.from(13) << (65000 * 32);
+  var y = new BigInt.from(42) << (65000 * 32);
+  print(x.bitLength);
+  Expect.equals(x, (x + y) - y);
+  Expect.equals(x, -((-x + y) - y));
+  Expect.equals(x, (x << 2) >> 2);
+  Expect.equals(x, (x >> 3) << 3);
+  Expect.equals(0, (x ^ x).toInt());
+  Expect.equals(0, (y ^ y).toInt());
+}
diff --git a/tests/corelib_2/very_big_integer_test.dart b/tests/corelib_2/very_big_integer_test.dart
new file mode 100644
index 0000000..11465f9
--- /dev/null
+++ b/tests/corelib_2/very_big_integer_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.9
+
+import "package:expect/expect.dart";
+
+main() {
+  // x and y have lengths in 32-bit digits that overflow 16 bits.
+  var x = new BigInt.from(13) << (65000 * 32);
+  var y = new BigInt.from(42) << (65000 * 32);
+  print(x.bitLength);
+  Expect.equals(x, (x + y) - y);
+  Expect.equals(x, -((-x + y) - y));
+  Expect.equals(x, (x << 2) >> 2);
+  Expect.equals(x, (x >> 3) << 3);
+  Expect.equals(0, (x ^ x).toInt());
+  Expect.equals(0, (y ^ y).toInt());
+}
diff --git a/tools/VERSION b/tools/VERSION
index addd689..8d3dadb 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 182
+PRERELEASE 183
 PRERELEASE_PATCH 0
\ No newline at end of file
