aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2011-06-12 18:39:38 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2011-06-12 16:39:38 +0000
commit903b0a8b6833a5b182461bc73d0f84423ae8c046 (patch)
tree0217c78b6609de642a00c0b20891254d588bb1c2 /gcc
parent8a752dfea6f512ecb19a7f2fd535b8862ef3dbe2 (diff)
downloadgcc-903b0a8b6833a5b182461bc73d0f84423ae8c046.zip
gcc-903b0a8b6833a5b182461bc73d0f84423ae8c046.tar.gz
gcc-903b0a8b6833a5b182461bc73d0f84423ae8c046.tar.bz2
re PR middle-end/49378 (C++ is broken)
PR middle-end/49378 * ipa.c (cgraph_non_local_node_p_1, cgraph_local_node_p): Rule out aliases and thunks. From-SVN: r174969
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa.c10
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a1dd32d..2bcc01b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-06-11 Jan Hubicka <jh@suse.cz>
+
+ PR middle-end/49378
+ * ipa.c (cgraph_non_local_node_p_1, cgraph_local_node_p): Rule out
+ aliases and thunks.
+
2011-06-12 Ira Rosen <ira.rosen@linaro.org>
* tree-vect-data-refs.c (vect_peeling_hash_get_most_frequent):
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 4fd3b7c..3f7dac3 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -119,7 +119,9 @@ process_references (struct ipa_ref_list *list,
static bool
cgraph_non_local_node_p_1 (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED)
{
+ /* FIXME: Aliases can be local, but i386 gets thunks wrong then. */
return !(cgraph_only_called_directly_or_aliased_p (node)
+ && !ipa_ref_has_aliases_p (&node->ref_list)
&& node->analyzed
&& !DECL_EXTERNAL (node->decl)
&& !node->local.externally_visible
@@ -132,7 +134,13 @@ cgraph_non_local_node_p_1 (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED
static bool
cgraph_local_node_p (struct cgraph_node *node)
{
- return !cgraph_for_node_and_aliases (cgraph_function_or_thunk_node (node, NULL),
+ struct cgraph_node *n = cgraph_function_or_thunk_node (node, NULL);
+
+ /* FIXME: thunks can be considered local, but we need prevent i386
+ from attempting to change calling convention of them. */
+ if (n->thunk.thunk_p)
+ return false;
+ return !cgraph_for_node_and_aliases (n,
cgraph_non_local_node_p_1, NULL, true);
}