__has_attribute and pragmas

Richard Smith richard at metafoo.co.uk
Thu Nov 20 16:22:40 PST 2014


On Thu, Nov 20, 2014 at 3:48 PM, Aaron Ballman <aaron at aaronballman.com>
wrote:

> On Thu, Nov 20, 2014 at 6:27 PM, Richard Smith <richard at metafoo.co.uk>
> wrote:
> > On Thu, Nov 20, 2014 at 1:38 PM, Aaron Ballman <aaron at aaronballman.com>
> > wrote:
> >>
> >> The __has_attribute implementation does not pay attention to the
> >> syntax supported by attributes -- instead, it looks to see whether an
> >> attribute is generally known with that spelling. Since pragmas can now
> >> be spelled as attributes, this means __has_attribute(loop) returns
> >> true because of the #pragma loop functionality. Same for unroll.
> >>
> >> Should __has_attribute ignore attributes spelled with a #pragma
> spelling?
> >
> >
> > I would go further: __has_attribute should probably only look for
> GNU-syntax
> > attributes. We have __has_cpp_attribute for C++-syntax attributes now,
> and I
> > don't think anyone is (yet) using this for __declspec, so now seems like
> a
> > good time to make this change.
>
> A long, long while back, we discussed having a way to determine
> attributes by syntax, because that's sometimes important, as well as a
> general query mechanism.
>
> How about adding:
>
> __has_declspec_attribute
> __has_keyword_attribute
> __has_gnu_attribute
>
> and leaving __has_attribute generic across syntaxes?
>
> This also reduces the chances of breaking code by allowing the
> __has_attribute syntax to continue to work as it always has.
>

Back when we only had GNU attributes, that's all it detected. I'm not
convinced that people are actually using it for anything else, and I think
it would be surprising if it said an attribute was supported but that
attribute didn't work with GNU syntax. A generic-across-syntaxes
__has_attribute is basically useless.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141120/5a88a5b8/attachment.html>


More information about the cfe-commits mailing list