c++: Don't emit deprecated/unavailable attribute diagnostics when creating cdtor thunks [PR116678]

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.
This commit is contained in:
Jakub Jelinek 2024-09-13 16:13:01 +02:00 committed by Jakub Jelinek
parent 4963eb7691
commit b7b67732e2
2 changed files with 22 additions and 0 deletions

View 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"
@ -287,6 +288,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))
{

View file

@ -0,0 +1,16 @@
// PR c++/116678
// { dg-do compile }
// { dg-options "-Os -pedantic" }
struct S
{
[[deprecated]] S () { s = 1; } // { dg-bogus "'S::S\\\(\\\)' is deprecated" }
S (int x) { s = x; } // { dg-warning "C\\\+\\\+11 attributes only available with" "" { target c++98_only } .-1 }
~S () {}
int s;
};
int
main ()
{
}