[tz] gcc 8 demanded patch (from NetBSD)

Clive D.W. Feather clive at davros.org
Thu May 11 14:41:04 UTC 2017

Guy Harris said:
>> Robert Elz said:
>>> The following patch was recently added to NetBSD, to appease
>>> GCC 8 (apparently) ... "hit" is a bool, and it seems gcc 8 does
>>> not like ++ operators applied to one of those.
>> Hmm. It's legal, but it suggests dubious thinking on the part of whoever
>> wrote it. It's exactly equivalent to "q = true".
> As long as you do it fewer than 2^{number of bits in q} times.

No, q is a bool. When you assign to a bool any non-zero value is converted
to 1. So you only need to consider the cases of 0 and 1, both of which will
be changed to 1.

More precisely, the statement "q++;" is equivalent to:

    q = (q + 1) != 0 ? 1 : 0;
    q = (q + 1) != 0;

Whether q is 0 or 1 (the only two values it can have), this sets q to 1.

>> ("q--" is equivalent to "q = !q".)
> As long as q is 0 or 1, if it's being treated as a traditional C "Boolean".

No, again I'm talking about the "bool" type in C.

(Technically, the type is called "_Bool" and the header <stdbool.h>
contains "#define bool _Bool".)

> And "legal but suggests dubious thinking" is a lot of what GCC/clang/etc. warnings are all about

Indeed; I'm not objecting to the warning, quite the contrary.

Clive D.W. Feather          | If you lie to the compiler,
Email: clive at davros.org     | it will get its revenge.
Web: http://www.davros.org  |   - Henry Spencer
Mobile: +44 7973 377646

More information about the tz mailing list