Version 2.14.0-104.0.dev

Merge commit 'a4e4659c82ab02297d9c31429bbd404b28d36f7d' into 'dev'
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