On Thu, 17 Aug 2017, Martin Sebor wrote: > +/* Check LAST_DECL and NODE of the same symbol for attributes that are > + recorded in EXCL to be mutually exclusive with ATTRNAME, diagnose > + them, and return true if any have been found. NODE can be a DECL > + or a TYPE. */ > + > +static bool > +diag_attr_exclusions (tree last_decl, tree node, tree attrname, > + const attribute_spec *spec)
EXCL is not an argument to this function, so the comment above it should not refer to EXCL (presumably it should refer to SPEC instead). > + note &= warning (OPT_Wattributes, > + "ignoring attribute %qE in declaration of " > + "a built-in function qD because it conflicts " > + "with attribute %qs", > + attrname, node, excl->name); %qD not qD, presumably. (Generically, warning_at would be preferred to warning, but that may best be kept separate if you don't already have a location available here.) > +static const struct attribute_spec::exclusions attr_gnu_inline_exclusions[] = > +{ > + ATTR_EXCL ("gnu_inline", true, true, true), > + ATTR_EXCL ("noinline", true, true, true), > + ATTR_EXCL (NULL, false, false, false), > +}; This says gnu_inline is incompatible with noinline, and is listed as the EXCL field for the gnu_inline attribute. > +static const struct attribute_spec::exclusions attr_inline_exclusions[] = > +{ > + ATTR_EXCL ("always_inline", true, true, true), > + ATTR_EXCL ("noinline", true, true, true), > + ATTR_EXCL (NULL, false, false, false), > +}; This is listed as the EXCL field for the noinline attribute, but does not mention gnu_inline. Does this mean some asymmetry in when that pair is diagnosed? I don't see tests for that pair added by the patch. (Of course, gnu_inline + always_inline is OK, and attr_inline_exclusions is also used for the always_inline attribute in this patch.) In general, the data structures where you need to ensure manually that if attribute A is listed in EXCL for B, then attribute B is also listed in EXCL for A, seem concerning. I'd expect either data structures that make such asymmetry impossible, or a self-test that verifies that the tables in use are in fact symmetric (unless there is some reason the symmetry is not in fact required and symmetric diagnostics still result from asymmetric tables - in which case the various combinations and orderings of gnu_inline and noinline definitely need tests to show that the diagnostics work). > +both the @code{const} and the @code{pure} attribute is diagnnosed. s/diagnnosed/diagnosed/ -- Joseph S. Myers jos...@codesourcery.com