On 1/28/21 7:54 AM, Nathan Sidwell wrote:

Typedefs are streamed by streaming the underlying type, and then
recreating the typedef.  But this breaks checking a duplicate is the
same as the original when it is a template alias -- we end up checking
a template alias (eg __void_t) against the underlying type (void).
And those are not the same template alias.  This stops pretendig that
the underlying type is the typedef for that checking and tells
is_matching_decl 'you have a typedef', so it knows what to do.  (We do
not want to recreate the typedef of the duplicate, because that whole
set of nodes is going to go away.)

d'oh!
        PR c++/98770
        gcc/cp/
        * module.cc (trees_out::decl_value): Swap is_typedef & TYPE_NAME
        check order.
        (trees_in::decl_value): Do typedef frobbing only when installing
        a new typedef, adjust is_matching_decl call.  Swap is_typedef
        & TYPE_NAME check.
        (trees_in::is_matching_decl): Add is_typedef parm. Adjust variable
        names and deal with typedef checking.
        gcc/testsuite/
        * g++.dg/modules/pr98770_a.C: New.
        * g++.dg/modules/pr98770_b.C: New.


--
Nathan Sidwell

Reply via email to