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)
#include "coretypes.h"
#include "target.h"
#include "cp-tree.h"
+#include "decl.h"
#include "stringpool.h"
#include "cgraph.h"
#include "debug.h"
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))
{
--- /dev/null
+// 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 ()
+{
+}