]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: Don't constrain template visibility using no-linkage variables [PR122253]
authorNathaniel Shead <nathanieloshead@gmail.com>
Thu, 16 Oct 2025 11:51:23 +0000 (22:51 +1100)
committerNathaniel Shead <nathanieloshead@gmail.com>
Tue, 4 Nov 2025 10:27:02 +0000 (21:27 +1100)
commitf062a6b7985fcee82e02b626aada4e0824850bd0
tree00963b53583f9a4386db38a3e1ec08a15e7110b3
parent95cabf531c5d65dfb7d0ccbf2dd0b4ec6825489e
c++: Don't constrain template visibility using no-linkage variables [PR122253]

When finding the minimal visibility of a template, any reference to a
dependent automatic variable will cause the instantiation to be marked
as internal linkage.  However, when processing the template decl we
don't yet know whether that should actually be the case, as a given
instantiation may not require referencing the local decl in its
mangling.

This patch fixes the issue by checking for no-linkage decls first, in
which case we just constrain using the type of the entity.  We can't use
a check for lk_external/lk_internal in the other cases, as
instantiations referring to internal types can still have external
linkage as determined by the language, but should still constrain the
visibility of any declarations that refer to them.

PR c++/122253

gcc/cp/ChangeLog:

* decl2.cc (min_vis_expr_r): Don't mark no-linkage declarations
as VISIBILITY_ANON.

gcc/testsuite/ChangeLog:

* g++.dg/modules/internal-16.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Patrick Palka <ppalka@redhat.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/decl2.cc
gcc/testsuite/g++.dg/modules/internal-16.C [new file with mode: 0644]