On Tue, Dec 17, 2024 at 05:40:15PM -0500, Jason Merrill wrote: > > --- gcc/cp/tree.cc.jj 2024-08-15 22:23:07.908239976 +0200 > > +++ gcc/cp/tree.cc 2024-08-30 13:15:26.863829810 +0200 > > @@ -5087,6 +5087,25 @@ handle_likeliness_attribute (tree *node, > > return error_mark_node; > > } > > +/* The C++14 [[deprecated]] attribute mostly maps to the GNU deprecated > > + attribute. */ > > + > > +static tree > > +handle_std_deprecated_attribute (tree *node, tree name, tree args, int > > flags, > > + bool *no_add_attrs) > > +{ > > + tree t = *node; > > + tree ret = handle_deprecated_attribute (node, name, args, flags, > > + no_add_attrs); > > + if (TYPE_P (*node) && t != *node) > > + pedwarn (input_location, OPT_Wattributes, > > + "%qE on a type other than class or enumeration definition", name); > > + else if (TREE_CODE (*node) == FIELD_DECL && DECL_UNNAMED_BIT_FIELD > > (*node)) > > + pedwarn (input_location, OPT_Wattributes, "%qE on unnamed bit-field", > > + name); > > Why not warn about these for the GNU deprecated attribute as well?
Do you mean both, or just unnamed bit-fields? 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. The unnamed bit-field case is something I don't see used in our testsuite from quick skimming, though we've accepted __attribute__((deprecated)) on those for the last 22 years, so I was just trying to be safe and emit the pedantic diagnostics only where the standard says it is invalid. Jakub