https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67014
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW --- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> --- So the macro definition comes from glibc: ctype/ctype.h # if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus # define tolower(c) __tobody (c, tolower, *__ctype_tolower_loc (), (c)) # define toupper(c) __tobody (c, toupper, *__ctype_toupper_loc (), (c)) # endif /* Optimizing gcc */ That's why the GCC compiler can't map it to a builtin. On the other hand, I don't see why would it be beneficial in this case?