On Thu, Nov 20, 2014 at 7:22 PM, Richard Smith <[email protected]> wrote: > On Thu, Nov 20, 2014 at 3:48 PM, Aaron Ballman <[email protected]> > wrote: >> >> On Thu, Nov 20, 2014 at 6:27 PM, Richard Smith <[email protected]> >> wrote: >> > On Thu, Nov 20, 2014 at 1:38 PM, Aaron Ballman <[email protected]> >> > 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,
I believe I've seen some code using it for __declspec attributes. IIRC, we may have run into this with MinGW, which implements __declspec as a macro, replaced by __attribute__. > 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. The more I think about cross-syntax attribute checking, the more I agree it's useless. I still think it would make sense to add the various forms of this, and I definitely think that pragmas should be excluded from __has_attribute. How does this sound as a path forward: * Change __has_attribute to only support GNU-style attributes. This has the potential to break code, so this will require careful watching of the lists. * Add __has_declspec_attribute & __has_keyword_attribute, that only apply to __declspecs and keywords. ~Aaron _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
