https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118513
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- --- gcc/cp/decl2.cc.jj 2025-01-16 13:34:29.719360710 +0100 +++ gcc/cp/decl2.cc 2025-01-16 14:27:54.095464791 +0100 @@ -3656,6 +3656,8 @@ copy_linkage (tree guard, tree decl) comdat_linkage (guard); DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl); DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl); + if (expr_visibility (decl) == VISIBILITY_ANON) + constrain_visibility (guard, VISIBILITY_ANON, false); } } fixes it, but then if decl has VISIBILITY_ANON, it should already be !TREE_PUBLIC, so shouldn't that be if (!TREE_PUBLIC (decl)) constrain_visibility (guard, VISIBILITY_ANON, false); or even if (!TREE_PUBLIC (decl) && DECL_INTERFACE_KNOWN (decl)) { DECL_INTERFACE_KNOWN (guard) = 1; if (DECL_LANG_SPECIFIC (decl)) DECL_NOT_REALLY_EXTERN (decl) = 1; } ?