aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2010-03-27 15:43:19 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2010-03-27 15:43:19 +0000
commitb932b8b1bb530cefca9dc7ff5ad2afbe5a881231 (patch)
tree3f19475141947ad20e92258cbb87e0916a1a6fbf /gcc
parentfb6807b860ac9bdb2cb345a43b9c3bf398aca013 (diff)
downloadgcc-b932b8b1bb530cefca9dc7ff5ad2afbe5a881231.zip
gcc-b932b8b1bb530cefca9dc7ff5ad2afbe5a881231.tar.gz
gcc-b932b8b1bb530cefca9dc7ff5ad2afbe5a881231.tar.bz2
re PR middle-end/41674 (/usr/ccs/bin/ld: Unsatisfied symbols: _GLOBAL__I_65535_0_main)
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. From-SVN: r157779
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/cgraphunit.c6
-rw-r--r--gcc/ipa.c2
3 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 393e753..5c6d82c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index c41477b..185fc53 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -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);
diff --git a/gcc/ipa.c b/gcc/ipa.c
index c789a29..225f268 100644
--- 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. */