This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix wrong refactoring in cgraph_node::function_symbol


On 08/13/2014 02:25 PM, Ilya Enkovich wrote:
> 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?
Hello.
Thank you for the fix. Unfortunately, there's no test case that would show me the problem.

Martin
>
> Thanks,
> Ilya
> --
>
> 2014-08-13  Ilya Enkovich  <ilya.enkovich@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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]