On 13/01/2014 00:38, Sean Silva wrote:



On Sun, Jan 12, 2014 at 6:53 PM, Aaron Ballman <[email protected] <mailto:[email protected]>> 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.

It sounds like we're getting close to a plan of action.

Alp.



-- Sean Silva

    Regardless of the name picked, if
    it's different from __has_attribute, we should deprecate the existing
    usage since the proposed implementation is backwards compatible and
    the existing __has_attribute is not forwards-compatible.

    > For forward compatibility your new version should warn, rather
    than emitting
    > an error, upon encountering invalid attribute syntaxes that may
    be valid in
    > future standards or other language dialects (e.g. single-braced
    C++/CLI []
    > attributes should return 0, indicating "unsupported" rather than
    triggering
    > a parse error).

    I agree, and will implement for the next round.

    ~Aaron
    _______________________________________________
    cfe-commits mailing list
    [email protected] <mailto:[email protected]>
    http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



--
http://www.nuanti.com
the browser experts

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to