On Wed, Dec 18, 2024 at 04:44:55PM +0100, Jakub Jelinek wrote:
> The first check would flag something that is used in the wild, e.g.
> g++.dg/Wmissing-attributes.C
> gcc.dg/gnu23-attrs-2.c
> g++.dg/cpp0x/gen-attrs-81.C
> g++.dg/warn/Wdangling-reference17.C
> g++.dg/warn/Wdangling-reference20.C
> tests would be affected by it (at least if pedantic), including
> <exception> header which uses this on
>   /// If you write a replacement %unexpected handler, it must be of this type.
>   typedef void (*_GLIBCXX11_DEPRECATED unexpected_handler) ();
> (not to mention the diagnostic wording is C++ish).
> E.g. gnu23-attrs-2.c has
> typedef int A[2];
> __typeof__ (int [[gnu::deprecated]]) var1; /* { dg-warning "deprecated" } */
> __typeof__ (A [[gnu::deprecated]]) var2; /* { dg-warning "deprecated" } */
> __typeof__ (int [3] [[gnu::deprecated]]) var3; /* { dg-warning "deprecated" } 
> */
> tests.

E.g.
typedef int * D * T;
T b;
typedef __typeof__ (*b) U;
currently works both in C and C++ for D [[gnu::deprecated]] and
__attribute__((deprecated)) and warns
a.C:12:1: warning: type is deprecated [-Wdeprecated-declarations]
   12 | typedef __typeof__ (*b) U;
      | ^~~~~~~

        Jakub

Reply via email to