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

--- Comment #13 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Nathaniel Shead <nsh...@gcc.gnu.org>:

https://gcc.gnu.org/g:98fd493db6216cff11142c9dc477a3ff8e4269fa

commit r16-1759-g98fd493db6216cff11142c9dc477a3ff8e4269fa
Author: Nathaniel Shead <nathanielosh...@gmail.com>
Date:   Mon Jun 23 22:24:22 2025 +1000

    c++/modules: Ensure type of partial spec VAR_DECL is consistent with its
template [PR120644]

    We were erroring because the TEMPLATE_DECL of the existing partial
    specialisation has an undeduced return type, but the imported
    declaration did not.

    The root cause is similar to what was fixed in r13-2744-g4fac53d6522189,
    where modules streaming code assumes that a TEMPLATE_DECL and its
    DECL_TEMPLATE_RESULT will always have the same TREE_TYPE.  That commit
    fixed the issue by ensuring that when the type of a variable is deduced
    the TEMPLATE_DECL is updated as well, but missed handling partial
    specialisations.  This patch ensures that the same adjustment is made
    there as well.

            PR c++/120644

    gcc/cp/ChangeLog:

            * decl.cc (cp_finish_decl): Also propagate type to partial
            templates.
            * module.cc (trees_out::decl_value): Add assertion that the
            TREE_TYPE of a streamed template decl matches its inner.
            (trees_in::is_matching_decl): Clarify function return type
            deduction should only occur for non-TEMPLATE_DECL.
            * pt.cc (template_for_substitution): Handle partial specs.

    gcc/testsuite/ChangeLog:

            * g++.dg/modules/auto-7.h: New test.
            * g++.dg/modules/auto-7_a.H: New test.
            * g++.dg/modules/auto-7_b.C: New test.

    Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com>
    Reviewed-by: Jason Merrill <ja...@redhat.com>
    Reviewed-by: Patrick Palka <ppa...@redhat.com>

Reply via email to