* Andreas Schwab: > On Apr 27 2022, Andrea Monaco via Gcc wrote: > >> This program >> >> #include <ctype.h> >> >> int main () >> { >> char *s; >> isspace (s); >> } >> >> compiles with no warning in gcc 8.3.0, even though there's a type >> mistake; the correct call would be isspace (*s). > > Try -Wsystem-headers. > >> The ctype functions are implemented as macros in glibc, so you can't >> have type checking. But they are also provided as builtins by gcc, so I >> wonder why type checking is not performed in that case, either. > > You need to suppress the macro to get the builtin.
Shouldn't that happen automatically with -O2? I think it's a header bug, we don't use inline functions in C mode, only in C++ mode: #ifndef __cplusplus # define __isctype(c, type) \ ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type) #elif defined __USE_EXTERN_INLINES # define __isctype_f(type) \ __extern_inline int \ is##type (int __c) __THROW \ { \ return (*__ctype_b_loc ())[(int) (__c)] & (unsigned short int) _IS##type; \ } #endif Thanks, Florian