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.