https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100842
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED --- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- In the call to strncpy the warning is suppressed because it's a common use case to then add the nul byte (the suppression also only looks forward but not backward). Calling strncat like in the test program isn't a common use case so the warning just points out that the copy truncates the string. This isn't a bug but a design choice, analogous to -Wstringop-truncation warning about the same problem in: $ cat a.c && gcc -O2 -S -Wall a.c char a[4]; void f (void) { char s[] = "test"; __builtin_snprintf (a, 3, "%s", s); } a.c: In function ‘f’: a.c:6:30: warning: ‘%s’ directive output truncated writing 4 bytes into a region of size 3 [-Wformat-truncation=] 6 | __builtin_snprintf (a, 3, "%s", s); | ^~ ~ a.c:6:3: note: ‘__builtin_snprintf’ output 5 bytes into a destination of size 3 6 | __builtin_snprintf (a, 3, "%s", s); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~