On 12/14/18 4:09 AM, Reuben Thomas wrote:
As far as I can tell, the following warning is not dependent on my
code, as it's inside a function in count-leading-zeros.h. Warning
obtained with GCC 7.3.0:
bits_util.c: In function ‘smite_find_msbit’:
../lib/count-leading-zeros.h:39:26: warning: assuming signed overflow
does not occur when simplifying conditional to constant
[-Wstrict-overflow]
return x ? BUILTIN (x) : CHAR_BIT * sizeof x;
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
../lib/count-leading-zeros.h:100:3: note: in expansion of macro
‘COUNT_LEADING_ZEROS’
COUNT_LEADING_ZEROS (__builtin_clzl, _BitScanReverse, unsigned long
int);
^~~~~~~~~~~~~~~~~~~
The warning could stem from your code, if your code calls
count_leading_zeros (E) where E's value depends on a computation that
could involve signed integer overflow (which means behavior is undefined
so GCC can optimize the if-then-else away and pretend it yields 0 or
whatever else it likes). The warning almost surely does not stem from
the underlined expression (CHAR_BIT * sizeof x), as that expression
should evaluate to 32 or 64 on current platforms and this doesn't
involve integer overflow.