[Bug c/93848] New: missing -Warray-bounds warning for array subscript 1 is outside array bounds
vincent-gcc at vinc17 dot net
gcc-bugzilla@gcc.gnu.org
Thu Feb 20 16:35:00 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93848
Bug ID: 93848
Summary: missing -Warray-bounds warning for array subscript 1
is outside array bounds
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: vincent-gcc at vinc17 dot net
Target Milestone: ---
Consider the following C code:
void foo_aux (int);
void foo (void)
{
int i;
int *p = &i;
foo_aux (p[1]);
}
void bar_aux (int *);
void bar (void)
{
int i[4];
int (*p)[4] = &i;
bar_aux (p[1]);
}
As expected, I get a warning concerning foo:
tst.c: In function ‘foo’:
tst.c:7:3: warning: array subscript 1 is outside array bounds of ‘int[1]’
[-Warray-bounds]
7 | foo_aux (p[1]);
| ^~~~~~~~~~~~~~
tst.c:5:7: note: while referencing ‘i’
5 | int i;
| ^
but I don't get a warning concerning bar (probably because there's no memory
access in this particular case), even though this use is forbidden by the ISO C
standard. Indeed, the end of 6.5.6p8 (about the "pointer + integer" case) says:
If the result points one past the last element of the array object,
it shall not be used as the operand of a unary * operator that is
evaluated.
Tested with gcc-10 (Debian 10-20200211-1) 10.0.1 20200211 (experimental), using
gcc-10 -O3 -std=c11 -pedantic -Warray-bounds=2 -c tst.c
More information about the Gcc-bugs
mailing list