https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118846
--- Comment #1 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:9f1f4efc06f43b1ba8c1cf5a31d5b73d6a2bb12d commit r15-7560-g9f1f4efc06f43b1ba8c1cf5a31d5b73d6a2bb12d Author: Nathaniel Shead <nathanielosh...@gmail.com> Date: Wed Feb 12 19:15:22 2025 +1100 c++/modules: Don't treat template parameters as TU-local [PR118846] There are two separate issues making various template parameters behave as if they were TU-local. Firstly, the TU-local detection code uses WILDCARD_TYPE_P to check for types that are not yet concrete; for some reason UNBOUND_CLASS_TEMPLATE is not on that list. I don't see any particular reason why it shouldn't be, so this patch adds it; this may solve other latent issues as well. Secondly, the TEMPLATE_DECL for a type with expressions involving TEMPLATE_TEMPLATE_PARM_Ps is currently always constrained to internal linkage, because the result does not have TREE_PUBLIC set. Rather than messing with TREE_PUBLIC here, I think rather we just should ensure that we only attempt to constrain visiblity of templates of type, variable, or function decls. PR c++/118846 gcc/cp/ChangeLog: * cp-tree.h (WILDCARD_TYPE_P): Include UNBOUND_CLASS_TEMPLATE. * decl2.cc (min_vis_expr_r): Don't assume a TEMPLATE_DECL will be a function or variable. gcc/testsuite/ChangeLog: * g++.dg/modules/pr118846_a.C: New test. * g++.dg/modules/pr118846_b.C: New test. Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com> Reviewed-by: Jason Merrill <ja...@redhat.com>