OSDN Git Service

PR middle-end/41674
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 27 Mar 2010 15:43:19 +0000 (15:43 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 27 Mar 2010 15:43:19 +0000 (15:43 +0000)
* cgraphunit.c (cgraph_build_static_cdtor): If target doesn't have
cdtors, set DECL_PRESERVE_P.
* ipa.c (cgraph_externally_visible_p): Return true if declaration
should be preseved.

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

gcc/ChangeLog
gcc/cgraphunit.c
gcc/ipa.c

index 393e753..5c6d82c 100644 (file)
@@ -1,3 +1,11 @@
+2010-03-27  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR middle-end/41674
+       * cgraphunit.c (cgraph_build_static_cdtor): If target doesn't have
+       cdtors, set DECL_PRESERVE_P.
+       * ipa.c (cgraph_externally_visible_p): Return true if declaration
+       should be preseved.
+
 2010-03-27  Uros Bizjak  <ubizjak@gmail.com>
 
        PR tree-optimization/43528
index c41477b..185fc53 100644 (file)
@@ -1946,7 +1946,11 @@ cgraph_build_static_cdtor (char which, tree body, int priority)
   DECL_ARTIFICIAL (decl) = 1;
   DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
   DECL_SAVED_TREE (decl) = body;
-  TREE_PUBLIC (decl) = ! targetm.have_ctors_dtors;
+  if (!targetm.have_ctors_dtors)
+    {
+      TREE_PUBLIC (decl) = 1;
+      DECL_PRESERVE_P (decl) = 1;
+    }
   DECL_UNINLINABLE (decl) = 1;
 
   DECL_INITIAL (decl) = make_node (BLOCK);
index c789a29..225f268 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -317,6 +317,8 @@ cgraph_externally_visible_p (struct cgraph_node *node, bool whole_program)
     return false;
   if (!whole_program)
     return true;
+  if (DECL_PRESERVE_P (node->decl))
+    return true;
   /* COMDAT functions must be shared only if they have address taken,
      otherwise we can produce our own private implementation with
      -fwhole-program.  */