https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96798
--- Comment #8 from Iain Sandoe <iains at gcc dot gnu.org> --- (In reply to Iain Sandoe from comment #7) > (In reply to David Malcolm from comment #6) > > Thanks! The "memset" call has become a call to "__builtin___memset_chk" > > (perhaps due to _FORTIFY_SOURCE, or something similar in Darwin's libc?), > > (transitive include of strings.h, for macOS >= 10.5) > usr/include/_types.h:# define _FORTIFY_SOURCE 2 /* on by default */ > > usr/include/strings.h: > > #if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus) > /* Security checking functions. */ > #include <secure/_strings.h> > #endif > > > secure/_strings.h: > > #if _USE_FORTIFY_LEVEL > 0 > > .... > > #if __has_builtin(__builtin___memset_chk) || defined(__GNUC__) > #undef bzero > /* void bzero(void *s, size_t n) */ > #define bzero(dest, ...) \ > __builtin___memset_chk (dest, 0, __VA_ARGS__, __darwin_obsz0 > (dest)) > #endif > Oops hit send too soon. string.h is a transitive include of strings.h and has: #if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus) /* Security checking functions. */ #include <secure/_string.h> #endif _strings.h: #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 || \ defined(__DRIVERKIT_VERSION_MIN_REQUIRED) #if __has_builtin(__builtin___memccpy_chk) && __HAS_FIXED_CHK_PROTOTYPES #undef memccpy /* void *memccpy(void *dst, const void *src, int c, size_t n) */ #define memccpy(dest, ...) \ __builtin___memccpy_chk (dest, __VA_ARGS__, __darwin_obsz0 (dest)) #endif #endif So.. essentially, the checked builtins are going to be used everywhere by default on modern Darwin (and some are going to be used even on venerable Darwin).