[PATCH] Handle overflow in dependence analysis lambda ops gracefully

Jakub Jelinek jakub@redhat.com
Wed Jan 20 12:19:47 GMT 2021


On Wed, Jan 20, 2021 at 01:15:12PM +0100, Richard Biener wrote:
> OK, fixed.  Guess we could also use __builtin_mul_overflow directly
> if supported via a GCC_VERSION check.  Looks like it's present
> since GCC 5 at least.  So sth like (incremental)
> 
> diff --git a/gcc/hwint.h b/gcc/hwint.h
> index 53f4ed5dcad..6d2d491acfa 100644
> --- a/gcc/hwint.h
> +++ b/gcc/hwint.h
> @@ -354,12 +354,19 @@ add_hwi (HOST_WIDE_INT a, HOST_WIDE_INT b, bool 
> *overflow)
>  inline HOST_WIDE_INT
>  mul_hwi (HOST_WIDE_INT a, HOST_WIDE_INT b, bool *overflow)
>  {
> +#if GCC_VERSION < 5001
>    unsigned HOST_WIDE_INT result = a * (unsigned HOST_WIDE_INT)b;
> -  if (a != 0 && (HOST_WIDE_INT)result / a != b)
> +  if ((a == -1 && b == HOST_WIDE_INT_MIN)
> +      || (a != 0 && (HOST_WIDE_INT)result / a != b))
>      *overflow = true;
>    else
>      *overflow = false;
>    return result;
> +#else
> +  HOST_WIDE_INT result;
> +  *overflow = __builtin_mul_overflow (a, b, &result);
> +  return result;
> +#endif
>  }
> 
> for the add case we should match all of the function I guess.

Yeah, sure.
Maybe bump somewhat the GCC_VERSION number in there, we've had bugs in
__builtin_mul_overflow expansion too.

	Jakub



More information about the Gcc-patches mailing list