> Hi,
> 
> somehow I lost two hunks in the patch allowing IPA-CP to process
> functions with variable number of arguments and one of these omissions
> caused PR 50301 (416.gamess LTO miscompilation).  The two hunks check
> the number of actual arguments in two places of IPA-CP which are not
> executed so often and where we currently can get an out-of-bounds
> VECtor failure.
> 
> Bootstrapped and tested on x86_64-linux, I have verified gmaess
> LTO-builds with it.  OK for trunk?

OK,
thanks
Honza
> 
> Thanks,
> 
> Martin
> 
> 
> 2011-09-06  Martin Jambor  <mjam...@suse.cz>
> 
>       PR middle-end/50301
>       * ipa-cp.c (find_more_values_for_callers_subset): Check jump
>       function index bounds.
>       (perhaps_add_new_callers): Likewise.
> 
> Index: src/gcc/ipa-cp.c
> ===================================================================
> --- src.orig/gcc/ipa-cp.c
> +++ src/gcc/ipa-cp.c
> @@ -2052,8 +2052,12 @@ find_more_values_for_callers_subset (str
>         struct ipa_jump_func *jump_func;
>         tree t;
>  
> +          if (i >= ipa_get_cs_argument_count (IPA_EDGE_REF (cs)))
> +            {
> +              newval = NULL_TREE;
> +              break;
> +            }
>         jump_func = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i);
> -
>         t = ipa_value_from_jfunc (IPA_NODE_REF (cs->caller), jump_func);
>         if (!t
>             || (newval
> @@ -2123,6 +2127,11 @@ perhaps_add_new_callers (struct cgraph_n
>                 if (!val)
>                   continue;
>  
> +               if (i >= ipa_get_cs_argument_count (args))
> +                 {
> +                   insufficient = true;
> +                   break;
> +                 }
>                 jump_func = ipa_get_ith_jump_func (args, i);
>                 t = ipa_value_from_jfunc (caller_info, jump_func);
>                 if (!t || !values_equal_for_ipcp_p (val, t))

Reply via email to