[cfe-dev] [PATCH] New syntax and functionality for __has_attribute
alp at nuanti.com
Sat Jan 11 11:31:48 PST 2014
On 10/01/2014 22:07, Aaron Ballman wrote:
> The __has_attribute feature macro is fantastic in many respects, but
> is lacking the ability to determine whether a specific attribute
> syntax is available or not. Instead, it currently checks whether the
> attribute is known within the compilation target, and nothing more.
> This can cause problems because not all attributes are applied in the
> same way.
> Consider dllexport as a contrived example:
> #if __has_attribute(dllexport)
> void foo(void) __attribute__((dllexport));
> This code looks fine, but is actually broken because clang only
> supports __declspec(dllexport) and not __attribute__((dllexport)), and
> __declspec must precede the declaration.
> The attached patch implements new syntax for __has_attribute while
> retaining backwards compatibility. It allows you to specify exactly
> which attribute syntax you desire. If no specific syntax is specified,
> it behaves as it always has.
> The supported forms are:
> __has_attribute(__attribute__((ident))) // GNU-style
> __has_attribute(__declspec(ident)) // MS-style
> __has_attribute([[ident]]) // C++11-style
> __has_attribute([[scope::ident]]) // C++11-style
> __has_attribute(ident) // Keywords, or "don't care"
> Note that attribute arguments are not supported by design -- they
> really don't make any sense in the context of a feature macro.
This is a step forward with some long-standing problems so certainly
would be a step forward. The syntax is unconventional but not unreasonable.
Have you confirmed that the new __has_attribute() syntax can still be
defined to an empty expansion? That pattern is important to provide
source compatibility with gcc / MSVC. The latter in particular has
fairly different expansion rules to watch out for -- I've got a feeling
it'll be OK as long as no commas appear in the argument list (which was
a problem with the other proposed "cxx, ..." syntax) but it's worth
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
the browser experts
More information about the cfe-commits