[prev in list] [next in list] [prev in thread] [next in thread]
List: coreutils
Subject: Re: [PATCH] maint: avoid clang -Wint-to-pointer-cast warning
From: Eric Blake <eblake () redhat ! com>
Date: 2014-07-14 15:20:57
Message-ID: 53C3F559.4080701 () redhat ! com
[Download RAW message or body]
On 07/13/2014 06:59 PM, Bob Proulx wrote:
> Pádraig Brady wrote:
>> Subject: Re: [PATCH] maint: avoid clang -Wint-to-pointer-cast warning
>
> What was the text of the original warning? I think that would be
> interesting to review. I think it would provide an additional clue.
>
>> * src/chroot.c: Explicitly cast int to pointer type.
>
>> - g = (struct group *)! NULL;
>> + g = (struct group *) (intptr_t) ! NULL;
>
> I would like to look at this cast to a cast again. It already had a
> cast before. I think adding an additional cast is one too many. I am
> surprised that it isn't still tripping over a warning. And I think
> later that the multiple cast might itself be the source of yet a
> future warning.
Why not just write:
g = (struct group *) 1;
>
> Note that in C the NULL macro is effectively 0. In C++ it is
> different but sticking to C only for now could say that is 0. So
> therefore the "g = ! 0" which is basically 0xFFFFFFFF the all ones
> value. And so we see the problem of the pointer casting to make that
> happy. But it does not feel good to me.
No, ! NULL is _always_ 1, in C and C++. Using the ! operator on any
pointer coerces the operation into boolean context, which can only give
0 or 1, not 0xffffffff.
>
> And sorry but that is all of the time I have at this moment. I hope
> to look at it more again later. And chown too to see how it handles it.
I agree with this worry about revisiting the code clarity in the first
place. I've seen uses of double casting through an intermediate
(intptr_t) when treating an int as a pointer (most often, when passing
an integer to a void* opaque parameter of a callback, rather than
passing an address to a pointer to integer). But it is always odd
looking, so if it can be avoided by a clearer code construction, I'm all
for that.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
["signature.asc" (application/pgp-signature)]
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic