From 589520b621afc3583a6bea2aeadae3825c82211e Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 13 Nov 2009 19:55:07 +0100 Subject: [PATCH] ipa.c (function_and_variable_visibility): Clear COMDAT on functions when to PUBLIC is set. * ipa.c (function_and_variable_visibility): Clear COMDAT on functions when to PUBLIC is set. From-SVN: r154167 --- gcc/ChangeLog | 5 +++++ gcc/ipa.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5dec6f98a3..f2a0da5078f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-11-13 Jan Hubicka + + * ipa.c (function_and_variable_visibility): Clear COMDAT on functions + when to PUBLIC is set. + 2009-11-13 Jakub Jelinek PR middle-end/42029 diff --git a/gcc/ipa.c b/gcc/ipa.c index dd0b76c4fbe..6234e662e5e 100644 --- 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) { + /* 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))