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

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-11 branch has been updated by Jason Merrill
<ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:3e39a0a4b71dce674ee30fe71590b0152663b6d8

commit r11-10055-g3e39a0a4b71dce674ee30fe71590b0152663b6d8
Author: Jason Merrill <ja...@redhat.com>
Date:   Mon Jun 6 21:49:06 2022 -0400

    c++: redeclared hidden friend take 2 [PR105852]

    My previous patch for 105761 avoided copying DECL_TEMPLATE_INFO from a
    friend to a later definition, but in this testcase we have first a
    non-friend declaration and then a definition, and we need to avoid copying
    in that case as well.  But we do still want to set new_template_info to
    avoid GC trouble.

    With this change, the modules dump correctly identifies ::foo as a
    non-template function in tpl-friend-2_a.C.

    Along the way I noticed that the duplicate_decls handling of
    DECL_UNIQUE_FRIEND_P was backwards for templates, where we don't clobber
    DECL_LANG_SPECIFIC (olddecl) with DECL_LANG_SPECIFIC (newdecl) like we do
    for non-templates.

            PR c++/105852
            PR c++/105761

    gcc/cp/ChangeLog:

            * decl.c (duplicate_decls): Avoid copying template info
            from non-templated friend even if newdecl isn't a definition.
            Correct handling of DECL_UNIQUE_FRIEND_P on templates.
            * pt.c (non_templated_friend_p): New.
            * cp-tree.h (non_templated_friend_p): Declare it.

    gcc/testsuite/ChangeLog:

            * g++.dg/modules/tpl-friend-2_a.C: Adjust expected dump.
            * g++.dg/template/friend74.C: New test.

Reply via email to