https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80986

Ramana Radhakrishnan <ramana at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ramana at gcc dot gnu.org

--- Comment #4 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> ---
(In reply to linzj from comment #2)
> I have found the cause of this bug.
> In 5.3, the function strip_typedefs only use
> result = cp_build_type_attribute_variant (result, TYPE_ATTRIBUTES (t));
> but in 6.3 remove_attributes prediction get invovled:
>   if (TYPE_ATTRIBUTES (t))
>     {
>       if (remove_attributes)
> result = apply_identity_attributes (result, TYPE_ATTRIBUTES (t),
>    remove_attributes);
>       else
> result = cp_build_type_attribute_variant (result, TYPE_ATTRIBUTES (t));
>     }
> and unfortunately the pcs attribute is declared as
>   { "pcs",          1, 1, false, true,  true,  arm_handle_pcs_attribute,
>     false },
> which affects_type_identity field is set to false, cause
> apply_identity_attributes
> drop this attribute.


Does affects_type_identity cause other user visible changes ? For e.g. based on
a cursory look it appears to affect mangling in C++. The comment in tree-core.h
simply says this affects the type's identity presumably implying that this
additionally adds value to the type's identity.

Almost all attributes I see in the front-ends or other backends has this set to
false and I'm certainly not happy switching this to true without understanding
the ramifications. 

In the use case that is considered here, I can see that it makes a difference
however without understanding what else can change I'm not happy with the patch
going in.

Reply via email to