On Thu, Dec 1, 2016 at 1:49 PM, Markus Trippelsdorf <mar...@trippelsdorf.de> wrote: > Using bootstrap-ubsan gcc to build mplayer shows: > > tree-ssa-loop-prefetch.c:835:16: runtime error: signed integer overflow: > 288230376151711743 * 64 cannot be represented in type 'long int' > > Here signed und unsigned integers are mixed in a division resulting in > bogus results: (-83 + 64ULL -1) / 64ULL) == 288230376151711743 > > Fixed by casting the unsigned parameter to signed. > > Tested on ppc64le. > OK for trunk?
Ok. Richard. > Thanks. > > PR tree-optimization/78598 > * tree-ssa-loop-prefetch.c (ddown): Cast to signed to avoid > overflows. > > > diff --git a/gcc/tree-ssa-loop-prefetch.c b/gcc/tree-ssa-loop-prefetch.c > index 0a2ee5ea25fd..ead2543ada46 100644 > --- a/gcc/tree-ssa-loop-prefetch.c > +++ b/gcc/tree-ssa-loop-prefetch.c > @@ -700,9 +700,9 @@ ddown (HOST_WIDE_INT x, unsigned HOST_WIDE_INT by) > gcc_assert (by > 0); > > if (x >= 0) > - return x / by; > + return x / (HOST_WIDE_INT) by; > else > - return (x + by - 1) / by; > + return (x + (HOST_WIDE_INT) by - 1) / (HOST_WIDE_INT) by; > } > > /* Given a CACHE_LINE_SIZE and two inductive memory references > -- > Markus