https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105557
Bug ID: 105557
Summary: -Wtautological-compare doesn't warn about bitwise
expressions that always evaluate to true or false
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: garsilva at embeddedor dot com
Target Milestone: ---
Clang[1] emits warnings on the following code, which contains bitwise
expressions that always evaluate to true:
#include <stdlib.h>
enum Flags {
FLAG_A = 0b001,
FLAG_B = 0b010,
FLAG_C = 0b100,
};
void a();
void b();
void c();
void f(enum Flags f) {
if (!!(f | FLAG_A)) {
a();
} else if (!!(f | FLAG_B)) {
b();
} else if (!!(f | FLAG_C)) {
c();
} else {
abort();
}
}
and it seems that GCC is not able to detect the above tautological expressions.
[1] https://godbolt.org/z/ax6vhczP1