https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78155
--- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> ---
I don't really see what existing warning this might fall under, except perhaps
-Wchar-subscripts because isalpha and friend use the argument as an index into
an array of 257 characters, but that seems like a stretch.
I think maybe adding a more general warning option, say something like
-Wargument-range, and using it to diagnose all such problems, might be the way
to go. To generalize the solution I would even consider adding a new function
attribute, let's call it range, to specify the range of valid values of a
function argument. Then isalpha (or any other such function) could be declared
like so:
__attribute__ ((range (/* position = */1, -1, UCHAR_MAX)))
int isalpha (int);
GCC would then check every call to the function to see if its argument is in
the expected range and, if not, issue a warning. The attribute could even be
applied multiple times to specify disjoint ranges. Position zero could denote
the return value so that toupper could be declared like so
__attribute__ ((range (/* returns = */ 0, -1, UCHAR_MAX),
range (/* position = */ 1, -1, UCHAR_MAX)))
int toupper (int);