[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
xstrtoimax compilation warning on Solaris 7
From: |
Eric Blake |
Subject: |
xstrtoimax compilation warning on Solaris 7 |
Date: |
Tue, 08 Nov 2005 16:12:04 +0000 |
The latest coreutils-5.93 evokes a compilation warning on Solaris
7 with gcc 3.3 in lib/xstrtoimax.c:
In file included from xstrtoimax.c:33:
xstrtol.c: In function `bkm_scale':
xstrtol.c:73: warning: integer constant is too large for "long" type
xstrtol.c:75: warning: integer constant is too large for "long" type
xstrtol.c:78: warning: integer constant is too large for "long" type
xstrtol.c:80: warning: integer constant is too large for "long" type
Looking at the pre-processed source, the culprit is that
STRTOL_T_MINIMUM and STRTOL_T_MAXIMUM are 64-bits, but
the LL suffix is missing:
static strtol_error
bkm_scale (intmax_t *x, int scale_factor)
{
if ((! ((intmax_t) 0 < (intmax_t) -1)) && *x < (-9223372036854775807-1) / scal
e_factor)
{
*x = (-9223372036854775807-1);
return LONGINT_OVERFLOW;
}
if ((9223372036854775807) / scale_factor < *x)
{
*x = (9223372036854775807);
return LONGINT_OVERFLOW;
}
*x *= scale_factor;
return LONGINT_OK;
}
This in turn looks to be a bug in Solaris' /usr/include/limits.h that
was since fixed in Solaris 8. It looks like gcc still compiled
everything correctly (tested with "expr 123456789012345 - 1",
which uses xstrtoimax), so I don't know if it is worth trying (or
even possible) to work around the old Solaris bug just to silence
the warning.
--
Eric Blake
- xstrtoimax compilation warning on Solaris 7,
Eric Blake <=