[Bug middle-end/101679] New: duplicate warning offset outside bounds of constant string
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jul 29 17:49:36 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101679
Bug ID: 101679
Summary: duplicate warning offset outside bounds of constant
string
Product: gcc
Version: 12.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: ---
Only one instance of -Warray-bounds should be reported the access below but GCC
issues two. The warning is issued from c_strlen() with the first instance
during lowering and the second during (or just before) expansion. The first
instance calls suppress_warning(arg, OPT_Warray_bounds) which is checked again
before issuing the second instance by calling warning_suppressed_p (arg,
OPT_Warray_bounds). The problem is that the first time arg is an ADDR_EXPR but
VAR_DECL the second. Stripping the ADDR_EXPR and disabling the warning for its
operand is not a solution because it would disable warnings for invalid uses of
the same operand in other statements, both in the same function or (for global
variables) in others.
$ cat a.c && gcc -S -Wall a.c
const char s0[0] = { };
char* f (char *d)
{
return __builtin_strcpy (d, s0);
}
a.c: In function ‘f’:
a.c:5:31: warning: offset ‘0’ outside bounds of constant string
[-Warray-bounds]
5 | return __builtin_strcpy (d, s0);
| ^~
a.c:1:12: note: ‘s0’ declared here
1 | const char s0[0] = { };
| ^~
a.c:5:10: warning: offset ‘0’ outside bounds of constant string
[-Warray-bounds]
5 | return __builtin_strcpy (d, s0);
| ^~~~~~~~~~~~~~~~~~~~~~~~
a.c:1:12: note: ‘s0’ declared here
1 | const char s0[0] = { };
| ^~
More information about the Gcc-bugs
mailing list