Re: [PATCH] RDMA/siw: Fix compiler warnings on 32-bit due to u64/pointer abuse
From: Al Viro
Date: Tue Aug 27 2019 - 13:46:52 EST
On Tue, Aug 27, 2019 at 07:29:52PM +0200, Geert Uytterhoeven wrote:
> Hi David,
>
> On Tue, Aug 27, 2019 at 4:17 PM David Laight <David.Laight@xxxxxxxxxx> wrote:
> > From: Geert Uytterhoeven
> > > Sent: 19 August 2019 18:15
> > ...
> > > > I think a cast to unsigned long is rather more common.
> > > >
> > > > uintptr_t is used ~1300 times in the kernel.
> > > > I believe a cast to unsigned long is much more common.
> > >
> > > That is true, as uintptr_t was introduced in C99.
> > > Similarly, unsigned long was used before size_t became common.
> > >
> > > However, nowadays size_t and uintptr_t are preferred.
> >
> > Isn't uintptr_t defined by the same standard as uint32_t?
>
> I believe so.
It sure as hell is not. C99 7.18.1.4:
The following type designates an unsigned integer type with the property that any valid
pointer to void can be converted to this type, then converted back to pointer to void,
and the result will compare equal to the original pointer:
uintptr_t
IOW, it's "large enough to represent pointers".