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