[cfe-dev] AST matcher for C++11 [[attributes]]

James Dennett via cfe-dev cfe-dev at lists.llvm.org
Thu Feb 2 13:43:30 PST 2017


On Thu, Feb 2, 2017 at 5:54 AM, Aaron Ballman via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> On Thu, Feb 2, 2017 at 7:33 AM, Andrzej Krzemienski via cfe-dev
> <cfe-dev at lists.llvm.org> wrote:
> >
> >
> > 2017-01-23 15:14 GMT+01:00 Aaron Ballman <aaron at aaronballman.com>:
> >>
> >> On Mon, Jan 23, 2017 at 6:13 AM, Andrzej Krzemienski via cfe-dev
> >> <cfe-dev at lists.llvm.org> wrote:
> >> > Hi everyone,
> >> > I am not sure of this is the right list. I have an issue with
> >> > clang-tidy's
> >> > predefined AST Matchers. The documentation for using clang-tidy
> >> > (http://clang.llvm.org/extra/clang-tidy/) suggests that one should
> first
> >> > try
> >> > to use of predefined matchers listed in
> >> > http://clang.llvm.org/docs/LibASTMatchersReference.html.
> >> >
> >> > But there is no matcher for C++11 [[attributes]]. There is matcher
> >> > hasAttr,
> >> > but it only works for predefined GCC __attribute__((s)).
> >>
> >> The hasAttr() matcher works for all attributes based on the Attr::Kind
> >> enumeration. This will not distinguish between different spellings of
> >> the same attribute, but that should (hopefully) be largely irrelevant.
> >> So this matcher should do what you need already.
> >
> >
> > Aaron, thanks for the reply. However it seams I phrased my question
> > incorrectly. I would like to check the existence of my own unique
> attribute,
> > say [[ab::cd::my_attribute]]. It is not in the list of any known
> attributes.
> > hasAttr() appears to only detect the known attributes that are already
> > listed in the long attribute enum. But will not see a new attribute.
> >
> > So my question is, in clang-tidy is it possible to inspect custom
> > attributes, like [[ab::cd::my_attribute]] ?
>
> If your custom attribute is implemented by adding the attribute to
> Attr.td, then it should work fine (depending on your attribute
> definition). The list of known attributes used by hasAttr() is
> automatically generated from the attributes listed in Attr.td, and the
> only attributes that don't get enumerated are ones which do not have
> an AST node associated with them.
>
> If your attribute is not added to Attr.td, then you are correct,
> clang-tidy has no knowledge of it.
>

It might be useful to add a facility to Clang's AST to hold on to
unrecognized attributes (and to have an AST node type for that).  Not every
application wants to recompile the guts of Clang just to handle users'
attributes, and might not be able to if it wants to handle attributes in
some generic way (so that the users aren't the people who are building the
tools).

-- James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170202/a0152dab/attachment.html>


More information about the cfe-dev mailing list