https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93926
--- Comment #4 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- Some level of permissiveness for built-in functions may be historical, arising from support for pre-C90 headers without prototypes or with nonstandard types; that level of permissiveness is probably no longer needed, headers should use the standard types now (modulo e.g. missing restrict, but qualifiers on the type of an argument, as opposed to qualifiers on the type pointed to by a pointer argument, don't affect type compatibility for the function type). However, a certain amount of permissiveness is still needed for cases where the built-in function uses a typedef such as FILE for which the compiler does not know the underlying type.