https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94626
Bug ID: 94626
Summary: -Wstringop-truncation warning should mention
attribute((nonstring))
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: allison.karlitskaya at redhat dot com
Target Milestone: ---
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94615
Consider this code:
{
struct lastlog entry;
strncpy (entry.ll_host, rhost, sizeof entry.ll_host);
/* fill other fields */
/* write record to the lastlog */
}
GCC 8 will warn like so:
/usr/include/bits/string_fortified.h:106:10: warning: '__builtin_strncpy'
specified bound 256 equals destination size [-Wstringop-truncation]
which is pretty frustrating, because I'm using strncpy() as intended: for a
field where nul-termination is optional. Of course the bound is equal to the
destination size. That's what I want!
A more helpful warning (and one that would have saved me considerable time
during the last weeks) would include a mention of the fact that the nonstring
attribute is missing on the destination.
This warning would have been much more helpful for helping me file the actual
bug in this case: the system header has this attribute for utmp, but they
missed adding it for lastlog.