]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: Don't emit deprecated/unavailable attribute diagnostics when creating cdtor...
authorJakub Jelinek <jakub@redhat.com>
Fri, 13 Sep 2024 14:13:01 +0000 (16:13 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 13 Jun 2025 09:05:38 +0000 (11:05 +0200)
Another spot where we mark_used a function (in this case ctor or dtor)
even when it is just artificially used inside of thunks (emitted on mingw
with -Os for the testcase).

2024-09-13  Jakub Jelinek  <jakub@redhat.com>

PR c++/116678
* optimize.cc: Include decl.h.
(maybe_thunk_body): Temporarily change deprecated_state to
UNAVAILABLE_DEPRECATED_SUPPRESS.

* g++.dg/warn/deprecated-20.C: New test.

(cherry picked from commit b7b67732e20217196f2a13a10fc3df4605b2b2ab)

gcc/cp/optimize.cc
gcc/testsuite/g++.dg/warn/deprecated-20.C [new file with mode: 0644]

index 13ab8b7361ed8a64f796e0dcbbaad45600709671..e766b695adb1e534bbc50131fdbcdb8fd938f00d 100644 (file)
@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "coretypes.h"
 #include "target.h"
 #include "cp-tree.h"
+#include "decl.h"
 #include "stringpool.h"
 #include "cgraph.h"
 #include "debug.h"
@@ -295,6 +296,11 @@ maybe_thunk_body (tree fn, bool force)
   if (ctor_omit_inherited_parms (fns[0]))
     return 0;
 
+  /* Don't diagnose deprecated or unavailable cdtors just because they
+     have thunks emitted for them.  */
+  auto du = make_temp_override (deprecated_state,
+                               UNAVAILABLE_DEPRECATED_SUPPRESS);
+
   DECL_ABSTRACT_P (fn) = false;
   if (!DECL_WEAK (fn))
     {
diff --git a/gcc/testsuite/g++.dg/warn/deprecated-20.C b/gcc/testsuite/g++.dg/warn/deprecated-20.C
new file mode 100644 (file)
index 0000000..99b6e40
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/116678
+// { dg-do compile { target c++11 } }
+// { dg-options "-Os -pedantic" }
+
+struct S
+{
+  [[deprecated]] S () { s = 1; }       // { dg-bogus "'S::S\\\(\\\)' is deprecated" }
+  S (int x) { s = x; }
+  ~S () {}
+  int s;
+};
+
+int
+main ()
+{
+}