re PR middle-end/49378 (C++ is broken)
authorJan Hubicka <jh@suse.cz>
Sun, 12 Jun 2011 16:39:38 +0000 (18:39 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sun, 12 Jun 2011 16:39:38 +0000 (16:39 +0000)
PR middle-end/49378
* ipa.c (cgraph_non_local_node_p_1, cgraph_local_node_p): Rule out
aliases and thunks.

From-SVN: r174969

gcc/ChangeLog
gcc/ipa.c

index a1dd32d885e00450807e54818ed02ed5ca2073fe..2bcc01b0e3c2bf2eeb449f3201afde14f8dccbd5 100644 (file)
@@ -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):
index 4fd3b7ce598e0bab442eb0fa5724928df4af9640..3f7dac33cf457eea5049b54adc3f0df260ab325a 100644 (file)
--- 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);
                                        
 }