https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83463
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Another bug: if (dstref.offrange[0] == dstref.offrange[1] || dstref.offrange[1] > HOST_WIDE_INT_MAX) sprintf (offstr[0], "%lli", (long long) dstref.offrange[0].to_shwi ()); else sprintf (offstr[0], "[%lli, %lli]", (long long) dstref.offrange[0].to_shwi (), (long long) dstref.offrange[1].to_shwi ()); if (srcref.offrange[0] == srcref.offrange[1] || srcref.offrange[1] > HOST_WIDE_INT_MAX) sprintf (offstr[1], "%lli", (long long) srcref.offrange[0].to_shwi ()); else sprintf (offstr[1], "[%lli, %lli]", (long long) srcref.offrange[0].to_shwi (), (long long) srcref.offrange[1].to_shwi ()); if (ovloff[0] == ovloff[1] || !ovloff[1]) sprintf (offstr[2], "%lli", (long long) ovloff[0]); else sprintf (offstr[2], "[%lli, %lli]", (long long) ovloff[0], (long long) ovloff[1]); %lli isn't portable and casts to long long aren't needed. You should remove those, and use " HOST_WIDE_INT_PRINT_DEC " instead of %lli in the format strings. What happens if offrange[0] is > HOST_WIDE_INT_MAX or either offrange[0] or offrange[1] < HOST_WIDE_INT_MIN ? Is that something guaranteed not to happen by the callers?