[Bug c/104948] When '&&' present in a comparison, a warning should be generated
coenraad at wish dot org.za
gcc-bugzilla@gcc.gnu.org
Thu Mar 17 09:03:06 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104948
--- Comment #13 from dagelf <coenraad at wish dot org.za> ---
Yes, I seem to have had a hole in my head. Sorry. For reference, to summarise
then:
& returns only the bits that are the same (bitwise AND) (or the bits that are
left after AND) (which will evaluate to true unless its 0 eg. (2 & 1) is false
but (3 & 1) is true.
&& casts operands to bool, so anything nonzero becomes 1. (eg. (2 && 1) is
true)
&& and & nonequivalence: https://godbolt.org/z/Yf5cxcKch
So & and && are only interchangeable when operating on bool parameters, on
anything else they each do something completely different.
The fact that there's a warning is great. Perhaps its fine. But this is
something so fundamental, it feels like no room for confusion should be left.
In fact, the more I think about it, the more I am convinced that it should not
be a warning, but an error, so -Werror is my new default.
Although I would love to find counter examples, I would be willing to wager
that && mixed with non bools, will almost always be done in error.
More information about the Gcc-bugs
mailing list