===================================================================
@@ -574,9 +574,13 @@ 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 and vtables,
- where this is not possible by language standard. */
+ break eventually. Exception are virutal functions, C++
+ constructors/destructors and vtables, where this is not possible by
+ language standard. */
if (!DECL_VIRTUAL_P (node->symbol.decl)
+ && (TREE_CODE (node->symbol.decl) != FUNCTION_DECL
+ || (!DECL_CXX_CONSTRUCTOR_P (node->symbol.decl)
+ && !DECL_CXX_DESTRUCTOR_P (node->symbol.decl)))
&& address_taken_from_non_vtable_p (node))
return false;