On Apr 29, 2011, at 7:32 AM, Jean-Daniel Dupas wrote:

> 
> 
> Début du message réexpédié :
> 
>> De : Jean-Daniel Dupas <[email protected]>
>> Date : 26 avril 2011 09:53:42 HAEC
>> À : Peter Collingbourne <[email protected]>
>> Cc : [email protected]
>> Objet : Rép : [cfe-commits] [PATCH] _has_feature support for new C1X 
>> features.
>> 
>> 
>> Le 26 avr. 2011 à 01:02, Peter Collingbourne a écrit :
>> 
>>> On Mon, Apr 25, 2011 at 09:15:09PM +0200, Jean-Daniel Dupas wrote:
>>>> As clang start to implements C1X, it may be useful to extend __has_feature 
>>>> to support the new implemented features.
>>>> 
>>>> Here is a patch that add 'c_static_assert' and 'c_generic_selection', and 
>>>> a test case similar to the one used for c++0x.
>>>> 
>>>> This patch adds 'c_generic_selection', but I don't know the status of this 
>>>> feature. If it is not ready yet, this part should be commented.
>>> 
>>> Hi Jean-Daniel,
>>> 
>>> We already have __has_feature(generic_selections).
>> 
>> My bad, I missed it.
>> I moved it next to "static_assert", so it would be easier to find what C1X 
>> extensions are already declared here.
>> 
>>> Prefixing C features with c_ is unprecedented (and it would of course
>>> be a bad idea to rename the existing C features/extensions) so I think
>>> that for the sake of consistency the C1X static assert feature should
>>> just be called "static_assert".
>> 
>> Of course, it would definitively be better to keep it consistent.
>> 
>>> Also, C1X static assertions are supported as an extension in all
>>> languages so the feature should not be predicated on the C1X language
>>> option.
>> 
>> 
>> Here is a patch that simply add "static_assert" and declare it enabled 
>> unconditionally.
>> 
> 
> 
> Is there someone to review (and apply) this minor change ? 


Sorry I missed this original discussion, but I actually disagree with Peter's 
suggestions. Both C++ and Objective-C feature-test identifiers have language 
prefixes (cxx_, objc_), and features that come from a particular revision of 
that language are tied to the appropriate LangOpts bit. I don't see any reason 
for C to deviate. Any claim they had about being a common subset evaporated 
with VLAs and their _Keyword_uglification strategy for C++ features :)

For example, consider "static_assert":  __has_feature(static_assert) doesn't 
mean that "static_assert" is a keyword, which is what one would expect from a 
common feature. It means that we have the C1x _Static_assert. I'd far rather 
have the unambiguous __has_feature(c_static_assert).

With generic selections, I'd far rather have 
__has_feature(c_generic_selections) than what we currently have. However, we 
may be stuck with the name since it's been in the tree for a while. Peter, do 
you have any idea of whether anyone depends on the name 
__has_feature(generic_selections)?

        - Doug

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

Reply via email to