[vbox-dev] [PATCH 2/8] Fix an implicit conversion from pointer to bool

Michal Necasek michal.necasek at oracle.com
Fri Mar 27 09:31:01 GMT 2015


  So far I haven't seen a single argument that there's anything wrong 
with 'if (ptr)'. As Michael pointed out, it is a very well established 
C/C++ idiom. No other compiler we use considers it suspicious.

  The same 'if (foo)' construct is widely used with integer types. Does 
clang warn on that too? If not, why not? There's the same 'conversion to 
bool' vs. 'comparison against zero' difference. Or perhaps 
non-difference, because the value is converted to bool by internally 
comparing it against zero.

  I've been involved in compiler development enough that I know there is 
a difficult balance to strike with warnings. On the one hand, warnings 
can be extremely useful at flagging suspicious and potentially or 
actually wrong code, on the other hand warnings which trigger on correct 
code are not useful. If good code triggers too many warnings, the 
inevitable result is that programmers turn off or ignore warnings.

  Right now it sounds like clang is too eager and warns on perfectly 
good code in this instance (however helpful its warnings are in other 
cases).

     Regards,
        Michal

On 3/26/2015 8:48 PM, Jung-uk Kim wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> On 03/26/2015 15:25, Michal Necasek wrote:
>> Sorry, I wasn't clear. By "what is the semantic difference" I meant
>> "under what circumstances will the conditional behave differently".
>> There must be some difference because otherwise what would be the
>> point of a warning?
>
> As I said, it does not behave differently under any circumstances.  It
> just shuts up compiler warnings.  I think the warning is to make sure
> its author is using a correct variable, i.e., "A variable of type foo
> is used where type bar should be used.  Do you really want me to
> convert it to type bar?" or something like that.
>
> Some people say it's too noisy but I didn't write the compiler. :-P
>
>> Remember that programmers can have a hard time reading compilers'
>> minds, too.
>
> Last time I checked compilers lacked mind. ;-)
>
> Jung-uk Kim
>
>> ----- Original Message ----- From: jkim at FreeBSD.org To:
>> michal.necasek at oracle.com, vbox-dev at virtualbox.org Sent: Thursday,
>> March 26, 2015 7:59:29 PM GMT +01:00 Amsterdam / Berlin / Bern /
>> Rome / Stockholm / Vienna Subject: Re: [vbox-dev] [PATCH 2/8] Fix
>> an implicit conversion from pointer to bool
>>
>> On 03/26/2015 14:03, Michal Necasek wrote:
>>
>>> The question isn't whether a compiler can warn. The question is,
>>> why should it?
>>
>> Although this specific code has absolutely no problem, compilers
>> are not smart enough to read authors' mind yet. ;-)
>>
>>> What you quoted doesn't contradict what Frank said. There is a
>>> very well defined pointer to bool conversion. So what's the
>>> problem? Or in other words, what is the semantic difference
>>> between
>>
>> The difference is
>>
>>> if (ptr)
>>
>> ptr is converted to bool type first
>>
>>> and
>>
>>> if (ptr != NULL)
>>
>> ptr is compared to nullptr (if NULL is correctly defined as
>> nullptr).
>>
>> Basically, the first is a conversion and the second is a
>> comparison.
>>
>> Jung-uk Kim
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2
>
> iQEcBAEBCAAGBQJVFGKJAAoJEHyflib82/FGBSUH/2B+WuYaX4Ov8AOYz4F4ogvK
> HGUb9QJ0cKntIlQZSk4FTa0B0Bu7p3wjoC/UE7CIySd1tfKbU7/wBvTvTeMgNYop
> JCNwkbjJVr2KV/DurdrC8lbt2jClZl6JpMrIpkmTbjMCggDEl10b/3+wvF1P+9Vv
> j58UWAA0u5eMRgDvY6TotIP/ZKlFB19OmGJpAtZQH0kJA8FB6CwaaoQ1v+EMw4Ek
> ZGrfinHY6+ujd5oxEdS03uE5vl+6oURGfTT9hdr1WeHxR9JftZDGraa0LQWMRV8K
> kBMR+b4h70shYEjqA264raavK6bcoiUl63l1LA3vkeyJUZmrCDHd5UwdoQZwrkE=
> =sgAo
> -----END PGP SIGNATURE-----
>





More information about the vbox-dev mailing list