[Bug ipa/59469] [4.8/4.9 Regression] LLVM build failure with gcc LTO

hubicka at ucw dot cz gcc-bugzilla@gcc.gnu.org
Fri Jan 10 09:56:00 GMT 2014


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59469

--- Comment #29 from Jan Hubicka <hubicka at ucw dot cz> ---
> 
> That optimization seems invalid. There is a explicit template instantiation
> definition, so it is valid for other dsos to have an undefined reference.

Can I see the cgraph dump of the unreduced source file containing the explicit
instantiation?

In this case C++ FE should set forced_by_abi flag and that should
prevent us from bringing comdat local in:
/* A helper for comdat_can_be_unshared_p.  */

static bool
comdat_can_be_unshared_p_1 (symtab_node *node)
{ 
  /* When address is taken, we don't know if equality comparison won't
     break eventually. Exception are virutal functions, C++
     constructors/destructors and vtables, where this is not possible by
     language standard.  */
  if (!DECL_VIRTUAL_P (node->decl)
      && (TREE_CODE (node->decl) != FUNCTION_DECL
          || (!DECL_CXX_CONSTRUCTOR_P (node->decl)
              && !DECL_CXX_DESTRUCTOR_P (node->decl)))
      && address_taken_from_non_vtable_p (node))
    return false;

  /* If the symbol is used in some weird way, better to not touch it.  */
  if (node->force_output)
    return false;

  /* Explicit instantiations needs to be output when possibly
     used externally.  */
  if (node->forced_by_abi
      && TREE_PUBLIC (node->decl)
      && (node->resolution != LDPR_PREVAILING_DEF_IRONLY
          && !flag_whole_program))
    return false;

Perhaps we forget about the flag, or perhaps the symbol is hidden by the
default
visibility overrride?

Honza



More information about the Gcc-bugs mailing list