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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

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

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Jakub's testcase points to the issue here: in the original testcase, when we
parse the member declaration (operator=), we create a method with type struct
S, but because we haven't yet parsed the trailing attribute, the type doesn't
have any attributes, thus
 7925   /* If the pointed-to type has the may_alias attribute set, force
 7926      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
 7927   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
 7928     can_alias_all = true;
in build_pointer_type_for_mode doesn't trigger.  Some time after that we parse
the trailing attribute:
21318   /* Look for trailing attributes to apply to this class.  */
21319   if (cp_parser_allow_gnu_extensions_p (parser))
21320     attributes = cp_parser_gnu_attributes_opt (parser);
And then we somehow arrive at finish_return_stmt -- and that will try to
convert 'this' to 'struct S', so it calls build_pointer_type again, but this
time we see the attribute and thus set TYPE_REF_CAN_ALIAS_ALL.

Reply via email to