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