OK.

On Sun, Dec 3, 2017 at 9:59 AM, Martin Sebor <mse...@gmail.com> wrote:
> Ping: https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01034.html
>
> The attached C++ only patch is rebased on the top of trunk.
>
> The remaining patches in the series (C FE and the back ends)
> have been approved.
>
> Martin
>
>
> On 08/23/2017 08:36 AM, Martin Sebor wrote:
>>
>> On 08/22/2017 09:51 PM, Jason Merrill wrote:
>>>
>>> The C and C++ front ends already have a diagnose_mismatched_attributes
>>> function, which seems like the natural place to add more conflict
>>> checking.
>>
>>
>> There are a few major problems with handling attribute conflicts
>> in diagnose_mismatched_attributes.
>>
>> The function only diagnoses conflicts, it doesn't resolve them
>> (choose one attribute or the other).  Currently, when they are
>> resolved, it's done in each attribute handler.  But this is done
>> inconsistently because of the limitations of the infrastructure:
>> no access to the last pushed declaration.  Often, it's not done
>> at all.  Making the declaration  available to every handler is
>> one of the design improvements of the patch.
>>
>> Attributes are defined in the attribute_spec tables in a number
>> of different places: all the back ends, in addition to the front
>> ends, but processed by the general infrastructure in
>> decl_attributes in attribs.c.  The infrastructure already has
>> all the smarts to either accept or reject a conflicting attribute.
>> None of this is available in diagnose_mismatched_attributes.
>> The current implementation of the function hardcodes knowledge
>> about a small number of attribute relationships in the code.
>> That's a poor approach given the table-driven attribute_spec
>> design.  For one, it makes it difficult for back-end maintainers
>> to add a new attribute that's mutually exclusive with another
>> (the back-end maintainer would need to change the front end).
>> It might explain why no back-end attribute conflicts are
>> diagnosed there.
>>
>> Some, maybe even most of these problems could be overcome by
>> moving the conflict resolution from decl_attributes to
>> diagnose_mismatched_attributes.  But it would mean duplicating
>> a fair amount of the logic between the two functions.  I think
>> that would result in an inferior solution.  From both a design
>> and implementation point of view, I feel the logic fits best
>> in the attribs.c.
>>
>> Martin
>
>

Reply via email to