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