https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89126
Bug ID: 89126 Summary: missing -Wtype-limits for int variables Product: gcc Version: 9.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 issues -Wtype-limits warnings for relational expressions that either cannot be true or cannot be false due to the limits of the type of one of their operands. This seems to work except for operands of type int where GCC fails to issue any warnings. $ cat u.c && gcc -S -Wall -Wextra -Wpedantic u.c int fchar (signed char x) { if (x <= __SCHAR_MAX__) // -Wtype-limits (good) return 1; if (x > __SCHAR_MAX__) // -Wtype-limits (good) return 1; return 0; } int fshrt (short x) { if (x <= __SHRT_MAX__) // -Wtype-limits (good) return 1; if (x > __SHRT_MAX__) // -Wtype-limits (good) return 1; return 0; } int fint (int x) { if (x <= __INT_MAX__) // missing -Wtype-limits return 1; if (x > __INT_MAX__) // missing -Wtype-limits return 1; return 0; } int flong (int x) { if (x <= __LONG_MAX__) // -Wtype-limits (good) return 1; if (x > __LONG_MAX__) // -Wtype-limits (good) return 1; return 0; } u.c: In function ‘fchar’: u.c:3:9: warning: comparison is always true due to limited range of data type [-Wtype-limits] 3 | if (x <= __SCHAR_MAX__) // -Wtype-limits (good) | ^~ u.c:6:9: warning: comparison is always false due to limited range of data type [-Wtype-limits] 6 | if (x > __SCHAR_MAX__) // -Wtype-limits (good) | ^ u.c: In function ‘fshrt’: u.c:14:9: warning: comparison is always true due to limited range of data type [-Wtype-limits] 14 | if (x <= __SHRT_MAX__) // -Wtype-limits (good) | ^~ u.c:17:9: warning: comparison is always false due to limited range of data type [-Wtype-limits] 17 | if (x > __SHRT_MAX__) // -Wtype-limits (good) | ^ u.c: In function ‘flong’: u.c:37:9: warning: comparison is always true due to limited range of data type [-Wtype-limits] 37 | if (x <= __LONG_MAX__) // -Wtype-limits (good) | ^~ u.c:40:9: warning: comparison is always false due to limited range of data type [-Wtype-limits] 40 | if (x > __LONG_MAX__) // -Wtype-limits (good) | ^