aaron.ballman added a comment.

In http://reviews.llvm.org/D17865#370912, @manmanren wrote:

> Hi Aaron,
>
> Thanks for the review!
>
> > I like the idea of a potential fixit being provided by the attribute, but I 
> > do not agree with the way the feature is surfaced in this patch.
>
> > 
>
> > For the GNU-style attribute, the named argument functionality is 
> > sufficiently novel syntax that I would strongly like to avoid it, 
> > especially since __attribute__((deprecated)) is supported by multiple 
> > compilers.
>
>
> I suggested `replacement = ""` mostly for its explicitness, especially when 
> we already have an optional message argument "".
>  If a user only want to specify replacement without a message, we can say 
> deprecated(replacement = "xxx")
>  With 'replacement =`, the user will need to specify an empty message.


I do like the explicit nature of this approach, but I'm worried about it being 
too novel. For instance, would this compel GCC to implement a similar parsing 
feature since they also support the deprecated attribute, that sort of thing. 
Also, it feels like a bit of an odd design in C and C++ since nothing else in 
the language supports argument passing by name like that (and I would really 
hate to see us use = blah only to find out that C++ someday standardizes on 
something different).

> But your concern makes sense too. We can support the following:

>  deprecated("xxx") --> a message

>  deprecated("xxx, "fixit") --> a message and a fixit


I think this is the correct approach, even with multiple optional arguments.

> > We should not be adding this functionality to the C++-style attribute in 
> > the gnu namespace; that's not our vendor namespace to modify.

> 

> 

> I believe the patch currently does not change the C++-style attribute. Of 
> course, I should add testing cases to verify.


I believe the patch does change the C++-style attribute in the gnu namespace, 
as best I can tell. e.g., it would now allow: ``[[gnu::deprecated("something", 
"a fixit")]]``. We need to be careful not to allow this unless GCC allows the 
same syntax, otherwise we are hijacking their vendor attribute namespace with 
something incompatible.

>   I wouldn't be opposed to adding a clang namespace where we support this 
> feature, however.

> 

> > We definitely need to make sure we are not modifying the functionality for 
> > the C++ standards-based attribute

> 

> 

> Is this ("the C++ standards-based attribute") the same as "the C++-style 
> attribute" you mentioned above?


This is talking about the C++14 [[deprecated]] attribute. We want to make sure 
we don't allow [[deprecated("foo", "fixit")]], which I don't think your patch 
does (but we should have tests ensuring it).

> , or the __declspec based attribute (for pretty printing, as well as parsing, 
> etc).

>  Yes, I should add testing cases to make sure __declspec is not changed at 
> all with this patch.

> 

> > So this change is missing a lot of tests to make sure we do not support 
> > this feature in places where it doesn't belong.

> 





http://reviews.llvm.org/D17865



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to