clang: C++1y deprecated attribute message

Aaron Ballman aaron at aaronballman.com
Wed Jan 29 05:36:42 PST 2014


On Wed, Jan 29, 2014 at 2:39 AM, Alp Toker <alp at nuanti.com> wrote:
>
> On 29/01/2014 06:30, Richard Smith wrote:
>
> On Tue, Jan 28, 2014 at 4:58 PM, Joseph Mansfield <sftrabbit at gmail.com>
> wrote:
>>
>> The attached patch adds support for deprecation messages in C++1y. This is
>> my first time hacking with clang so a code review would definitely be
>> needed.
>>
>> As an example of what is now supported:
>>
>> [[deprecated("use bar instead")]] void foo();
>>
>> When this function is used, the following warning is emitted:
>>
>> warning: 'foo' is deprecated: use bar instead [-Wdeprecated-declarations]
>>   foo();
>>   ^
>>
>> Some tests included.
>>
>> Known potential issues:
>> - Attribute parsing currently doesn't seem to distinguish between C++11
>> and C++1y attributes.
>> - Maybe errors like [[deprecated("foo", "bar")]] would better report "too
>> many arguments" than "expected ')'". Not sure about the best way to go about
>> this.
>
>
> Thanks for the patch! The code generally looks good from a style
> perspective, but please start variable names with a capital letter in new
> code (the current codebase is woefully inconsistent, but we're trying to get
> new code to follow the style guide). (The style guide also says to start
> functions with a lowercase letter, but we're not doing that for Parse*
> because it's such a well-established pattern that the inconsistency would be
> worse than following the style guide. We'll get around to doing a mass
> cleanup of this stuff one day...)
>
> We've been trying to move away from having a collection of different
> attribute argument parsing functions, and towards generating the parsing
> logic from the Attr.td file -- I'll let Aaron weigh in on whether we want
> something like ParseAttributeWithMessageArg or whether we should generalize
> and reuse ParseGNUAttributeArgs.
>
>
> Indeed, this should work already if you remove the check (ScopeName &&
> ScopeName->getName() == "gnu"):

Alp hit the nail on the head -- the parsing is already handled for the
GNU case, we can simply reuse it.

I'm not certain we need the IsBuiltInOrStandardCXX11Attribute function
any longer -- I think this should be declarative-based and handled as
part of sema, not parsing (in terms of complaining about repeated
attributes) since it really depends on the attribute, not the
spelling. Not that it would block this patch.

The new spelling does not appear in Attr.td, which is the only thing I
really see missing.

~Aaron



More information about the cfe-commits mailing list