[google] Fix duplicate symbol error reported by assembler

Message ID CAAkRFZKG8JOekpfSqS1Sqfvr+Yru3=cs9L6BeGu1rhZKM-tCOg@mail.gmail.com
State New
Headers show

Commit Message

Xinliang David Li Sept. 13, 2012, 4:45 p.m.
The following patch fixes a problem exposed in LIPO random stress
testing with large module groups -- the error is that multiple copies
compiler generated static functions (ctor of class in anonymous
namespace) get emitted.



Index: cgraphunit.c
--- cgraphunit.c	(revision 191267)
+++ cgraphunit.c	(revision 191268)
@@ -1430,7 +1430,12 @@  cgraph_add_output_node (struct cgraph_no
   if (!L_IPO_COMP_MODE)
     return node;

-  if (!TREE_PUBLIC (node->decl))
+  /* Never common non public names except for compiler
+     generated static functions. (they are not promoted
+     to globals either.  */
+  if (!TREE_PUBLIC (node->decl)
+      && !(DECL_ARTIFICIAL (node->decl)
+	   && DECL_ASSEMBLER_NAME_SET_P (node->decl)))
     return node;

   if (!output_node_hash)