OSDN Git Service

* ipa.c (function_and_variable_visibility): Clear COMDAT on functions
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 13 Nov 2009 18:55:07 +0000 (18:55 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 13 Nov 2009 18:55:07 +0000 (18:55 +0000)
when to PUBLIC is set.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154167 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ipa.c

index e5dec6f..f2a0da5 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-13  Jan Hubicka  <jh@suse.cz>
+
+       * ipa.c (function_and_variable_visibility): Clear COMDAT on functions
+       when to PUBLIC is set.
+
 2009-11-13  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/42029
 2009-11-13  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/42029
index dd0b76c..6234e66 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -292,6 +292,12 @@ function_and_variable_visibility (bool whole_program)
 
   for (node = cgraph_nodes; node; node = node->next)
     {
 
   for (node = cgraph_nodes; node; node = node->next)
     {
+      /* C++ FE on lack of COMDAT support create local COMDAT functions
+        (that ought to be shared but can not due to object format
+        limitations).  It is neccesary to keep the flag to make rest of C++ FE
+        happy.  Clear the flag here to avoid confusion in middle-end.  */
+      if (DECL_COMDAT (node->decl) && !TREE_PUBLIC (node->decl))
+        DECL_COMDAT (node->decl) = 0;
       gcc_assert ((!DECL_WEAK (node->decl) && !DECL_COMDAT (node->decl))
                  || TREE_PUBLIC (node->decl) || DECL_EXTERNAL (node->decl));
       if (cgraph_externally_visible_p (node, whole_program))
       gcc_assert ((!DECL_WEAK (node->decl) && !DECL_COMDAT (node->decl))
                  || TREE_PUBLIC (node->decl) || DECL_EXTERNAL (node->decl));
       if (cgraph_externally_visible_p (node, whole_program))