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));
#endif
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.
Hi Aaron,
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
double checking.
Alp.
~Aaron
_______________________________________________
cfe-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
--
http://www.nuanti.com
the browser experts
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits