diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index fdc1130..2cfb030 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -338,6 +338,7 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
+    var element = node.declaredElement as ConstructorElementImpl;
     if (!_isNonNullableByDefault && node.declaredElement!.isFactory) {
       if (node.body is BlockFunctionBody) {
         // Check the block for a return statement, if not, create the hint.
@@ -349,7 +350,12 @@
     }
     _checkStrictInferenceInParameters(node.parameters,
         body: node.body, initializers: node.initializers);
-    super.visitConstructorDeclaration(node);
+    _deprecatedVerifier.pushInDeprecatedValue(element.hasDeprecated);
+    try {
+      super.visitConstructorDeclaration(node);
+    } finally {
+      _deprecatedVerifier.popInDeprecated();
+    }
   }
 
   @override
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
index 77b7e3c..97435e1 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -135,6 +135,27 @@
     ]);
   }
 
+  test_field_inDeprecatedConstructor() async {
+    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+class A {
+  @deprecated
+  int x = 0;
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+import 'package:aaa/a.dart';
+
+class B extends A {
+  @deprecated
+  B() {
+    x;
+    x = 1;
+  }
+}
+''');
+  }
+
   test_fieldGet_implicitGetter() async {
     newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
 class A {
@@ -188,6 +209,26 @@
     ]);
   }
 
+  test_method_inDeprecatedConstructor() async {
+    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+class A {
+  @deprecated
+  void foo() {}
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+import 'package:aaa/a.dart';
+
+class B extends A {
+  @deprecated
+  B() {
+    foo();
+  }
+}
+''');
+  }
+
   test_methodInvocation() async {
     newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
 class A {
@@ -626,6 +667,36 @@
     ]);
   }
 
+  test_field_inDeprecatedConstructor() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  @deprecated
+  int x = 1;
+
+  @deprecated
+  A() {
+    x;
+    x = 2;
+  }
+}
+''');
+  }
+
+  test_field_inDeprecatedFunction() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  @deprecated
+  int x = 1;
+}
+
+@deprecated
+void f(A a) {
+  a.x;
+  a.x = 2;
+}
+''');
+  }
+
   test_getter() async {
     await assertErrorsInCode(r'''
 class A {
@@ -816,6 +887,20 @@
     ]);
   }
 
+  test_method_inDeprecatedConstructor() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  @deprecated
+  A() {
+    foo();
+  }
+
+  @deprecated
+  void foo() {}
+}
+''');
+  }
+
   test_methodInvocation_constant() async {
     await assertErrorsInCode(r'''
 class A {
@@ -966,6 +1051,32 @@
     ]);
   }
 
+  test_parameter_positionalOptional_inDeprecatedConstructor() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  @deprecated
+  A() {
+    foo(0);
+  }
+
+  void foo([@deprecated int x]) {}
+}
+''');
+  }
+
+  test_parameter_positionalOptional_inDeprecatedFunction() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  void foo([@deprecated int x]) {}
+}
+
+@deprecated
+void f(A a) {
+  a.foo(0);
+}
+''');
+  }
+
   test_parameter_positionalRequired() async {
     await assertNoErrorsInCode(r'''
 class A {
diff --git a/runtime/vm/bitmap.cc b/runtime/vm/bitmap.cc
index 52c32db..1799816 100644
--- a/runtime/vm/bitmap.cc
+++ b/runtime/vm/bitmap.cc
@@ -6,6 +6,7 @@
 
 #include "platform/assert.h"
 #include "vm/object.h"
+#include "vm/log.h"
 
 namespace dart {
 
@@ -77,9 +78,9 @@
 void BitmapBuilder::Print() const {
   for (intptr_t i = 0; i < Length(); i++) {
     if (Get(i)) {
-      OS::PrintErr("1");
+      THR_Print("1");
     } else {
-      OS::PrintErr("0");
+      THR_Print("0");
     }
   }
 }
diff --git a/tools/VERSION b/tools/VERSION
index 30b3cd5..bfb8831 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 103
+PRERELEASE 104
 PRERELEASE_PATCH 0
\ No newline at end of file
