large integer implicitly truncated to unsigned type
Geoff Keating
geoffk@cygnus.com
Mon Oct 23 01:15:00 GMT 2000
Keith Owens <kaos@ocs.com.au> writes:
> CVS gcc October 22, 2000 gives lots of
>
> warning: large integer implicitly truncated to unsigned type
>
> messages for constructs like this.
>
> #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
>
> Changing to
>
> #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & (unsigned)~(sizeof(long)-1) )
>
> removes the warning. Is this warning message correct and is it going
> to be a permanent feature of gcc? If so I will do a kernel patch to
> make (unsigned) explicit.
No, it's a bug. 'sizeof(long)' is already of type size_t, which is
either 'unsigned int' or 'unsigned long' on most systems,
and on those systems the type of (sizeof(long)-1) is therefore also
size_t by the arithmetic conversion rules.
--
- Geoffrey Keating <geoffk@cygnus.com>
More information about the Gcc-bugs
mailing list