https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64518
Bug ID: 64518 Summary: Warning about comparison between signed and unsigned can be useless in some cases Product: gcc Version: 4.9.1 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: patrick.pelissier at gmail dot com For the following function: int f(int x) { return ( x >= 0 && x < sizeof(int)); } I get the following warning with gcc -Wsign-compare -c f.c : f.c: In function 'f': f.c:1:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] int f(int x) { return ( x >= 0 && x < sizeof(int)); } ^ However, as x has been checked as positive due to the first comparison, I don't see how the comparison between x (signed) and sizeof(int) (unsigned) can be wrong. The proposed enhancement is to improve the warning to handle this case properly without adding a (useless) cast in the user code like this: int f(int x) { return ( x >= 0 && (unsigned int) x < sizeof(int)); }