https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102849
Bug ID: 102849 Summary: missing warning for unsigned bitfield tests for negativity Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- GCC warns for less than comparisons of unsigned integers to zero but it fails to do the same for unsigned bit-fields (likely because they promote to int; comparisons of unsigned bit-fields larger than int are diagnosed by -Wtype-limits). Diagnosing both kinds of expressions would be helpful. $ cat x.c && gcc -S -Wall -Wextra x.c struct A { unsigned i, j: 3; }; void f (struct A *p) { p->i = -1; // missing warning p->j = -1; // missing warning in C, -Woverflow in C++ } void g (struct A *p) { if (p->i < 0) // -Wtype-limits in both C and C++, folded to false __builtin_abort (); } void h (struct A *p) { if (p->j < 0) // missing warning in both C and C++, folded to false __builtin_abort (); } x.c: In function āgā: x.c:14:12: warning: comparison of unsigned expression in ā< 0ā is always false [-Wtype-limits] 14 | if (p->i < 0) // -Wtype-limits in both C and C++, folded to false | ^