https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88813
--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- To be safe, even though %s requires that the argument be a nul-terminated string, the snprintf optimization would need to be predicated on knowing that it, in fact, is one (to avoid buffer overflow if snprintf was called with a non-string argument). The optimization opportunity is in the length of the source string not needing to be known. When the source array is not guaranteed to be a nul-terminated string then the memccpy optimization described in pr88814 could take place instead. So to clarify the example in comment #0, the array size optimization would only be applicable if s was previously used as a string, such as in an argument to some string function like in: char d[8]; char s[8]; char *p; void g (void) { p = __builtin_strchr (s, '/'); // s must be a nul-terminated string ... __builtin_snprintf (d, sizeof d, "%s", s); // can be folded to strcpy }