[cfe-dev] Duplicate attributes

Aaron Ballman aaron at aaronballman.com
Mon Oct 14 17:11:35 PDT 2013


To resolve this in a more generic way, I am thinking of table
generating some code on the parsed attributes that allows us to ask
"given a list of Attr instances, are there any conflicts you can
diagnose with this parsed attribute?"  Eg)

bool AttributeList::conflictsWith(Sema &S, attr_iterator I,
attr_iterator E) const;

In this way, when SemaDeclAttr.cpp does common checking for a decl (or
statement, type, etc), we can ask the parsed attribute to diagnose any
problems it can, generically.

There are two situations I am thinking of initially:

1) Duplicate attributes.  This applies pretty generally, and when
opt-out is required, we can use table gen to specify the opt-out
2) Mutually exclusive attributes.  This doesn't apply as generally,
but is something we already have hand-written support for (cold vs hot
attributes), and is missing elsewhere (calling conventions immediately
spring to mind).

Before I do more concrete work in this direction, do you see any
particular problems with this approach?  Or is there a better way you
would prefer to see employed?

Thanks!

~Aaron

On Sun, Oct 6, 2013 at 9:01 PM, Richard Smith <richard at metafoo.co.uk> wrote:
>
> On 5 Oct 2013 16:15, "Aaron Ballman" <aaron at aaronballman.com> wrote:
>>
>> I noticed that we have a diagnostic "err_repeat_attribute", but
>> currently only vecreturn is making use of it.
>>
>> This seems like it is something we could generalize across attributes
>> relatively easily, but there appears to be no documentation (even in
>> the C++ standard) as to whether duplicate attributes are acceptable or
>> not for any given attribute.
>
> For a standard c++11 attribute, there is usually (always?) a restriction
> that the attribute cannot be repeated in the same attribute-specifier.
>
>> As best I can tell, most attributes should diagnose a duplicate on the
>> same subject.  The exceptions, as best I can gather, are:
>>
>> alloc_size
>> format_arg
>> nonnull
>> ownership_holds
>> ownership_returns
>> ownership_takes
>> argument_with_type_tag
>> pointer_with_type_tag
>>
>> Basically, anything which allows you to specify an argument index as
>> an attribute parameter seems like it could have a duplicate attribute.
>>
>> Would it make sense to add a generalized duplicate attribute test in
>> SemaDeclAttr that emits an error when a duplicate is found, except for
>> the above cases?
>>
>> ~Aaron



More information about the cfe-dev mailing list