https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84649
Bug ID: 84649 Summary: -Wstringop-truncation shouldn't warn on strncat() when 2nd argument is a char array Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: sirl at gcc dot gnu.org Target Milestone: --- With gcc-8 trunk@258093 for this example char *append_leading_digits(char *cp, int i) { char buf[16]; __builtin_sprintf(buf, "%2i ", i); __builtin_strncat(cp, buf, 4); return cp; } gcc warns like that: gcc-trunk -O2 -c test-strncat.c -Wstringop-truncation test-strncat.c: In function 'append_leading_digits': test-strncat.c:8:2: warning: '__builtin_strncat' output may be truncated copying 3 bytes from a string of length 15 [-Wstringop-truncation] __builtin_strncat(cp, buf, 4); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I believe this warning is unjustified as buf[] may contain strings of varying lengths and the whole purpose of strncat() is to truncate the source string after all. Actually maybe the warning should only trigger for strncat() when BOTH the 2nd and 3rd argument are constant (like in the example in the manual)?