[PATCH][IRA] Avoid undefined behavior in ira_allocno_object_iter_cond

Vladimir Makarov vmakarov@redhat.com
Thu Apr 19 17:46:00 GMT 2012


On 04/19/2012 08:14 AM, Richard Guenther wrote:
> This gave me headaches debugging a VRP "miscompile" of ira-build.c.
> Number of iteration analysis concluded that the allocno object
> iterators do not iterate because it sees accesses to ->objects[n]
> for a loop i = 0; i<  n; ++i.  This is because
> ira_allocno_object_iter_cond was written in a very fancy way,
> optimizing the number of source lines (appearantly).
>
> Fixed as follows.
>
> A bootstrap&  regtest is currently running (together with the
> alleged VRP modification).  I will commit this if it succeeds.
>

Thanks, Richard.

> 2012-04-19  Richard Guenther<rguenther@suse.de>
>
> 	* ira-int.h (ira_allocno_object_iter_cond): Avoid out-of-bound
> 	array access.
>
> Index: gcc/ira-int.h
> ===================================================================
> --- gcc/ira-int.h	(revision 186584)
> +++ gcc/ira-int.h	(working copy)
> @@ -1138,8 +1138,13 @@ static inline bool
>   ira_allocno_object_iter_cond (ira_allocno_object_iterator *i, ira_allocno_t a,
>   			      ira_object_t *o)
>   {
> -  *o = ALLOCNO_OBJECT (a, i->n);
> -  return i->n++<  ALLOCNO_NUM_OBJECTS (a);
> +  int n = i->n++;
> +  if (n<  ALLOCNO_NUM_OBJECTS (a))
> +    {
> +      *o = ALLOCNO_OBJECT (a, n);
> +      return true;
> +    }
> +  return false;
>   }
>
>   /* Loop over all objects associated with allocno A.  In each



More information about the Gcc-patches mailing list