[Bug middle-end/79275] New: -Wformat-overflow false positive exceeding INT_MAX in glibc sysdeps/posix/tempname.c
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jan 30 02:07:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79275
Bug ID: 79275
Summary: -Wformat-overflow false positive exceeding INT_MAX in
glibc sysdeps/posix/tempname.c
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
As reported on libc-alpha
(https://sourceware.org/ml/libc-alpha/2017-01/msg00541.html) the following test
case triggers a false positive -Wformat-overflow warning:
$ cat a.c && gcc -O2 -S -Wall -m32 a.c
typedef __SIZE_TYPE__ size_t;
void f (char *dst, size_t n, const char *s)
{
if (n < 2 || __INT_MAX__ - 2 < n)
n = 2;
__builtin_sprintf (dst, "%.*s %.*s", (int)n, s, (int)n, s);
}
a.c: In function ‘f’:
a.c:8:33: warning: ‘%.*s’ directive output between 0 and 2147483645 bytes may
cause result to exceed ‘INT_MAX’ [-Wformat-overflow=]
__builtin_sprintf (dst, "%.*s %.*s", (int)n, s, (int)n, s);
^~~~
More information about the Gcc-bugs
mailing list