Author: Shashi Shankar
Date: 2025-07-24T08:48:27+02:00
New Revision: 31db0f0a7ae43981fdfadc693662c239f921a05b

URL: 
https://github.com/llvm/llvm-project/commit/31db0f0a7ae43981fdfadc693662c239f921a05b
DIFF: 
https://github.com/llvm/llvm-project/commit/31db0f0a7ae43981fdfadc693662c239f921a05b.diff

LOG: [Clang] Suppress deprecated field warnings in implicit functions 
definitions (#147400)

Do not warn on deprecated member used in an implicit definition (such as a 
defaulted special member function).

Co-authored-by: Corentin Jabot <corentinja...@gmail.com>

Fixes #147293

Added: 
    clang/test/Sema/implicit-special-member-deprecated.cpp

Modified: 
    clang/docs/ReleaseNotes.rst
    clang/lib/Sema/SemaAvailability.cpp

Removed: 
    


################################################################################
diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index dd6b44dd0c657..e685233e2400c 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -988,6 +988,7 @@ Bug Fixes to C++ Support
   non-empty initializer list. (#GH147949)
 - Fixed constant evaluation of equality comparisons of constexpr-unknown 
references. (#GH147663)
 - Diagnose binding a reference to ``*nullptr`` during constant evaluation. 
(#GH48665)
+- Suppress -Wdeprecated-declarations in implicitly generated functions. 
(#GH147293)
 
 Bug Fixes to AST Handling
 ^^^^^^^^^^^^^^^^^^^^^^^^^

diff  --git a/clang/lib/Sema/SemaAvailability.cpp 
b/clang/lib/Sema/SemaAvailability.cpp
index 8c6a17301fba6..68a698fea1815 100644
--- a/clang/lib/Sema/SemaAvailability.cpp
+++ b/clang/lib/Sema/SemaAvailability.cpp
@@ -547,6 +547,12 @@ static void DoEmitAvailabilityWarning(Sema &S, 
AvailabilityResult K,
     return;
   }
   case AR_Deprecated:
+    // Suppress -Wdeprecated-declarations in implicit
+    // functions.
+    if (const auto *FD = 
dyn_cast_or_null<FunctionDecl>(S.getCurFunctionDecl());
+        FD && FD->isImplicit())
+      return;
+
     if (ObjCPropertyAccess)
       diag = diag::warn_property_method_deprecated;
     else if (S.currentEvaluationContext().IsCaseExpr)

diff  --git a/clang/test/Sema/implicit-special-member-deprecated.cpp 
b/clang/test/Sema/implicit-special-member-deprecated.cpp
new file mode 100644
index 0000000000000..8e23404552f53
--- /dev/null
+++ b/clang/test/Sema/implicit-special-member-deprecated.cpp
@@ -0,0 +1,24 @@
+// RUN: %clang_cc1 -std=c++20 -Wdeprecated-declarations -verify %s
+
+struct A {
+  [[deprecated("use something else")]] int x = 42; // expected-note {{marked 
deprecated here}}
+};
+
+A makeDefaultA() { return {}; }    // ctor is implicit → no warn
+A copyA(const A &a) { return a; }  // copy-ctor implicit → no warn
+
+void assignA() {
+  A a, b;
+  a = b;                           // copy-assign implicit → no warn
+}
+
+void useA() {
+  A a;
+  (void)a.x;                       // expected-warning {{is deprecated}}
+}
+
+// Explicitly-defaulted ctor – now silent
+struct B {
+  [[deprecated]] int y;
+  B() = default;                   // no warning under new policy
+};


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to