aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cgraph.c2
-rw-r--r--gcc/cgraphunit.c4
-rw-r--r--gcc/ipa.c4
4 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fdfe9c4..c1f7568 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2011-06-13 Jan Hubicka <jh@suse.cz>
+ * cgraph.c (cgraph_make_decl_local): Handle DECL_ONE_ONLY
+ similarly to DECL_COMDAT.
+ * cgraphunit.c (cgraph_analyze_function): Likewise.
+ * ipa.c (function_and_variable_visibility): Likewise.
+
+2011-06-13 Jan Hubicka <jh@suse.cz>
+
* lto-streamer-out.c (lto_output_ts_binfo_tree_pointers): Do not output
BINFO_VIRTUALS when streaming for ltrans unit.
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index dfa5439..86e7207 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -2487,7 +2487,7 @@ cgraph_make_decl_local (tree decl)
DECL_COMMON (decl) = 0;
else gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
- if (DECL_COMDAT (decl))
+ if (DECL_ONE_ONLY (decl) || DECL_COMDAT (decl))
{
/* It is possible that we are linking against library defining same COMDAT
function. To avoid conflict we need to rename our local name of the
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index b01f22b..0e7842c 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -830,9 +830,9 @@ cgraph_analyze_function (struct cgraph_node *node)
if (TREE_PUBLIC (node->decl) && node->same_body_alias)
{
DECL_EXTERNAL (node->decl) = DECL_EXTERNAL (node->thunk.alias);
- if (DECL_COMDAT (node->thunk.alias))
+ if (DECL_ONE_ONLY (node->thunk.alias))
{
- DECL_COMDAT (node->decl) = 1;
+ DECL_COMDAT (node->decl) = DECL_COMDAT (node->thunk.alias);
DECL_COMDAT_GROUP (node->decl) = DECL_COMDAT_GROUP (node->thunk.alias);
if (DECL_ONE_ONLY (node->thunk.alias) && !node->same_comdat_group)
{
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 07a90b5..0edb344 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -904,9 +904,9 @@ function_and_variable_visibility (bool whole_program)
We also need to arrange the thunk into the same comdat group as
the function it reffers to. */
- if (DECL_COMDAT (decl_node->decl))
+ if (DECL_ONE_ONLY (decl_node->decl))
{
- DECL_COMDAT (node->decl) = 1;
+ DECL_COMDAT (node->decl) = DECL_COMDAT (decl_node->decl);
DECL_COMDAT_GROUP (node->decl) = DECL_COMDAT_GROUP (decl_node->decl);
if (DECL_ONE_ONLY (decl_node->decl) && !node->same_comdat_group)
{