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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ppalka at gcc dot gnu.org

--- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> ---
What seems to be happening is determine_visibility correctly notices that
begin<R> should have internal linkage due to R having internal linkage, so it
proceeds to clear TREE_PUBLIC, DECL_COMDAT, DECL_EXTERN, etc for begin<R>.

Later in cgraph_node::finalize for begin<R>, we force its definition to be
outputted due to

  /* When not optimizing, also output the static functions. (see
     PR24561), but don't do so for always_inline functions, functions
     declared inline and nested functions.  These were optimized out
     in the original implementation and it is unclear whether we want
     to change the behavior here.  */
  if (((!opt_for_fn (decl, optimize) || flag_keep_static_functions
        || node->no_reorder)
       && !node->cpp_implicit_alias
       && !DECL_DISREGARD_INLINE_LIMITS (decl)
       && !DECL_DECLARED_INLINE_P (decl)
       && !(DECL_CONTEXT (decl)
            && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL))
      && !DECL_COMDAT (decl) && !DECL_EXTERNAL (decl))
    node->force_output = 1;

I guess we need to somehow refine the above test to exclude implicit
instantiations with internal linkage?

Reply via email to