Hi,

This patch is to fix wrong refactoring for cgraph_node::function_symbol 
introduced by this patch: https://gcc.gnu.org/ml/gcc-cvs/2014-07/msg00805.html. 
 Here is how function was refactored:

-cgraph_function_node (struct cgraph_node *node, enum availability 
*availability)
+cgraph_node *
+cgraph_node::function_symbol (enum availability *availability)
 {
+  cgraph_node *node = NULL;
+
   do
     {
-      node = cgraph_function_or_thunk_node (node, availability);
+      node = ultimate_alias_target (availability);
       if (node->thunk.thunk_p)
        {
          node = node->callees->callee;
          if (availability)
            {
              enum availability a;
-             a = cgraph_function_body_availability (node);
+             a = node->get_availability ();
              if (a < *availability)
                *availability = a;
            }
-         node = cgraph_function_or_thunk_node (node, availability);
+         node = node->ultimate_alias_target (availability);
        }
     } while (node && node->thunk.thunk_p);
   return node;
 }

first ultimate_alias_target call always uses 'this' instead of 'node'.  This 
causes infinite loop.

Patch was bootstrapped and regtested on linux-x86_64.  OK for trunk?

Thanks,
Ilya
--

2014-08-13  Ilya Enkovich  <ilya.enkov...@intel.com>

        * cgraph.c (cgraph_node::function_symbol): Fix wrong
        cgraph_function_node to cgraph_node::function_symbol
        refactoring.

diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 5a0b903..370a96a 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -3000,11 +3000,11 @@ cgraph_node::verify_cgraph_nodes (void)
 cgraph_node *
 cgraph_node::function_symbol (enum availability *availability)
 {
-  cgraph_node *node = NULL;
+  cgraph_node *node = this;
 
   do
     {
-      node = ultimate_alias_target (availability);
+      node = node->ultimate_alias_target (availability);
       if (node->thunk.thunk_p)
        {
          node = node->callees->callee;

Reply via email to