[cfe-dev] [PATCH] New syntax and functionality for __has_attribute
Aaron Ballman
aaron at aaronballman.com
Sun Jan 12 16:52:09 PST 2014
On Sun, Jan 12, 2014 at 7:49 PM, Alp Toker <alp at nuanti.com> wrote:
>
> On 13/01/2014 00:38, Sean Silva wrote:
>
>>
>>
>>
>> On Sun, Jan 12, 2014 at 6:53 PM, Aaron Ballman <aaron at aaronballman.com
>> <mailto:aaron at aaronballman.com>> wrote:
>>
>> > That's good news -- thanks for confirming.
>> >
>> > The feature detection macro itself will still need to have a
>> different name
>> > (or some other mechanism) so it can be used compatibly with
>> existing clang
>> > deployments, because _has_attribute() currently emits a parse
>> error instead
>> > of gracefully returning 0 when passed the new argument syntax:
>> >
>> > tmp/attr2.cpp:1:5: error: builtin feature check macro requires a
>> > parenthesized identifier
>> > #if __has_attribute(__attribute__((weakref)))
>> > ^
>>
>> Good catch. Unfortunately, __has_attribute is really the best
>> identifier for the macro, so I am loathe to let it go.
>>
>> Due to the current design of __has_attribute, we can't get away with "
>> magic" by expanding the non-function-like form into a value that could
>> be tested. So we would really have to pick a new name if we are
>> worried about this.
>>
>> Suggestions on the name are welcome.
>>
>>
>> Ok, I'll bite:
>>
>> __has_attribute_written_as([[foo]])
>> __has_attribute_syntax([[foo]])
>> __has_attribute_spelling([[foo]])
>
>
> Another possibility:
>
> __has_any_attribute([[foo]])
>
> The silver lining to any one of these names is that they describe the new
> semantics more clearly without overloading the existing feature macro.
>
> With the naming and forward compatibility changes, the proposal appears to
> pass the "can we use it in LLVM Compiler.h" sanity check with flying
> colours.
>
> As for the question of what to do with the old __has_attribute, ~400 uses
> show up in an Ohloh code search and I'd be concerned to deprecate the
> present usage without strong reason.
>
> Instead of deprecation and code churn, how about restricting and shoring up
> the old semantics to match actual usage in the wild? All uses I've seen on
> Ohloh so far appear to be checking for GNU attributes only.
That's how we use it, and one of Richard's suggestions on the PR as
well, so I would be fine with that.
The deprecation I was speaking of was of the more silent variety --
updating the documentation to mention that the new syntax is
preferred. Not the barking loud variety where it warns on usage in
code.
> It sounds like we're getting close to a plan of action.
Agreed!
~Aaron
More information about the cfe-dev
mailing list