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? 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