[Bug c/123024] -Wstringop-overread: bogus diagnostic about strncat(3)
foss+gcc@alejandro-colomar.es
gcc-bugzilla@gcc.gnu.org
Fri Dec 5 18:48:55 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123024
--- Comment #3 from Alejandro Colomar <foss+gcc@alejandro-colomar.es> ---
(In reply to Andrew Pinski from comment #2)
> Can you provide a full compilable example?
I seem to be unable to trigger it with a call to strncat(3) in a small example,
but I can trigger it with a manual call to the builtin.
alx@devuan:~/tmp$ cat s-overread.c
#include <string.h>
#include <utmp.h>
void
f(struct utmp *ut, char buf[_Countof(ut->ut_line) + 1])
{
strcpy(buf, "");
strncat(buf, ut->ut_line, _Countof(ut->ut_line));
strcpy(buf, "");
__builtin___strncat_chk(buf, ut->ut_line, _Countof(ut->ut_line),
_Countof(ut->ut_line) + 1);
}
alx@devuan:~/tmp$ /opt/local/gnu/gcc/maxof8/bin/gcc -S -Wstringop-overread
s-overread.c
s-overread.c: In function ‘f’:
s-overread.c:11:9: warning: ‘__builtin___strncat_chk’ argument 2 declared
attribute ‘nonstring’ [-Wstringop-overread]
11 | __builtin___strncat_chk(buf, ut->ut_line,
_Countof(ut->ut_line),
|
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12 | _Countof(ut->ut_line) + 1);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/utmp.h:29,
from s-overread.c:2:
/usr/include/x86_64-linux-gnu/bits/utmp.h:62:8: note: argument ‘ut_line’
declared here
62 | char ut_line[UT_LINESIZE]
| ^~~~~~~
More information about the Gcc-bugs
mailing list