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

Adhemerval Zanella <adhemerval.zanella at linaro dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |adhemerval.zanella at linaro 
dot o
                   |                            |rg

--- Comment #8 from Adhemerval Zanella <adhemerval.zanella at linaro dot org> 
---
(In reply to GCC Commits from comment #6)
> The master branch has been updated by Nathaniel Shead <nsh...@gcc.gnu.org>:
> 
> https://gcc.gnu.org/g:b5f6a56940e70838a07e885de03a92e2bd64674a
> 
> commit r15-59-gb5f6a56940e70838a07e885de03a92e2bd64674a
> Author: Nathaniel Shead <nathanielosh...@gmail.com>
> Date:   Mon Apr 29 17:00:13 2024 +1000
> 
>     c++: Fix instantiation of imported temploid friends [PR114275]
>     
>     This patch fixes a number of issues with the handling of temploid friend
>     declarations.
>     
>     The primary issue is that instantiations of friend declarations should
>     attach the declaration to the same module as the befriending class, by
>     [module.unit] p7.1 and [temp.friend] p2; this could be a different
>     module from the current TU, and so needs special handling.
>     
>     The other main issue here is that we can't assume that just because name
>     lookup didn't find a definition for a hidden class template, that it
>     doesn't exist at all: it could be a non-exported entity that we've
>     nevertheless streamed in from an imported module.  We need to ensure
>     that when instantiating template friend classes that we return the same
>     TEMPLATE_DECL that we got from our imports, otherwise we will get later
>     issues with 'duplicate_decls' (rightfully) complaining that they're
>     different when trying to merge.
>     
>     This doesn't appear necessary for function templates due to the existing
>     name lookup handling already finding these hidden declarations.
>     
>             PR c++/105320
>             PR c++/114275
>     
>     gcc/cp/ChangeLog:
>     
>             * cp-tree.h (propagate_defining_module): Declare.
>             (lookup_imported_hidden_friend): Declare.
>             * decl.cc (duplicate_decls): Also check if hidden decls can be
>             redeclared in this module.
>             * module.cc (imported_temploid_friends): New.
>             (init_modules): Initialize it.
>             (trees_out::decl_value): Write it; don't consider imported
>             temploid friends as attached to a module.
>             (trees_in::decl_value): Read it.
>             (get_originating_module_decl): Follow the owning decl for an
>             imported temploid friend.
>             (propagate_defining_module): New.
>             * name-lookup.cc (get_mergeable_namespace_binding): New.
>             (lookup_imported_hidden_friend): New.
>             * pt.cc (tsubst_friend_function): Propagate defining module for
>             new friend functions.
>             (tsubst_friend_class): Lookup imported hidden friends.  Check
>             for valid module attachment of existing names.  Propagate
>             defining module for new classes.
>     
>     gcc/testsuite/ChangeLog:
>     
>             * g++.dg/modules/tpl-friend-10_a.C: New test.
>             * g++.dg/modules/tpl-friend-10_b.C: New test.
>             * g++.dg/modules/tpl-friend-10_c.C: New test.
>             * g++.dg/modules/tpl-friend-10_d.C: New test.
>             * g++.dg/modules/tpl-friend-11_a.C: New test.
>             * g++.dg/modules/tpl-friend-11_b.C: New test.
>             * g++.dg/modules/tpl-friend-12_a.C: New test.
>             * g++.dg/modules/tpl-friend-12_b.C: New test.
>             * g++.dg/modules/tpl-friend-12_c.C: New test.
>             * g++.dg/modules/tpl-friend-12_d.C: New test.
>             * g++.dg/modules/tpl-friend-12_e.C: New test.
>             * g++.dg/modules/tpl-friend-12_f.C: New test.
>             * g++.dg/modules/tpl-friend-13_a.C: New test.
>             * g++.dg/modules/tpl-friend-13_b.C: New test.
>             * g++.dg/modules/tpl-friend-13_c.C: New test.
>             * g++.dg/modules/tpl-friend-13_d.C: New test.
>             * g++.dg/modules/tpl-friend-13_e.C: New test.
>             * g++.dg/modules/tpl-friend-13_f.C: New test.
>             * g++.dg/modules/tpl-friend-13_g.C: New test.
>             * g++.dg/modules/tpl-friend-14_a.C: New test.
>             * g++.dg/modules/tpl-friend-14_b.C: New test.
>             * g++.dg/modules/tpl-friend-14_c.C: New test.
>             * g++.dg/modules/tpl-friend-14_d.C: New test.
>             * g++.dg/modules/tpl-friend-9.C: New test.
>     
>     Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>
>     Reviewed-by: Jason Merrill <ja...@redhat.com>

This has triggered some regression on aarch64 [1]:

Running g++:g++.dg/modules/modules.exp ...
FAIL: g++.dg/modules/tpl-friend-4_b.C -std=c++17  (test for errors, line 16)
FAIL: g++.dg/modules/tpl-friend-4_b.C -std=c++17  (test for errors, line 19)
FAIL: g++.dg/modules/tpl-friend-4_b.C -std=c++17 (internal compiler error: in
set_originating_module, at cp/module.cc:19236)
FAIL: g++.dg/modules/tpl-friend-4_b.C -std=c++17 (test for excess errors)

https://ci.linaro.org/job/tcwg_gnu_native_check_gcc--master-aarch64-build/1092/artifact/artifacts/notify/mail-body.txt/*view*/

Reply via email to