https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118593
Bug ID: 118593 Summary: False-positive warning about applying bitwise operation to a boolean expression Product: gcc Version: 14.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: kristoimenov at gmail dot com Target Milestone: --- The following code produces three warnings about applying ‘~’ on a boolean expression. Clearly, the first bitwise NOT is applied to an unsigned integer; the second is also applied to an unsigned integer, as ~ and type cast are right-associative and with the same precedence; whereas the third bitwise NOT is actually applied to a boolean expression. However, all three initialisers produce the same warning. ``` int main() { unsigned s=42, r1=~((unsigned)(s==42)), r2=~(unsigned)(s==42), r3=~(s==42); } ``` ``` $ gcc -Wbool-operation a.c a.c: In function ‘main’: a.c:3:22: warning: ‘~’ on a boolean expression [-Wbool-operation] 3 | unsigned s=42, r=~(unsigned)(s==42); | ^ a.c:3:22: note: did you mean to use logical not? 3 | unsigned s=42, r=~(unsigned)(s==42); | ^ | ! ```