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?

Reply via email to