https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102810
Bug ID: 102810
Summary: Bogus Wstringop-overread warning when special
(integer) pointer values passed to array parameter of
a function
Product: gcc
Version: 11.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: ian at abbott dot org
Target Milestone: ---
I don't know why this code produces a Wstringop-overread warning since it has
nothing to do with string operations. Also, why is there a warning for
argument 2, but not for argument 1?
extern int foo(const int *a, const int b[]);
#define SPECIAL ((int *)2)
int main(void)
{
foo(SPECIAL, SPECIAL);
}
int foo(const int a[], const int b[])
{
return 0;
}
<source>: In function 'main':
<source>:7:5: warning: 'foo' reading 4 bytes from a region of size 0
[-Wstringop-overread]
7 | foo(SPECIAL, SPECIAL);
| ^~~~~~~~~~~~~~~~~~~~~
<source>:7:5: note: referencing argument 2 of type 'const int *'
<source>:10:5: note: in a call to function 'foo'
10 | int foo(const int a[], const int b[])
| ^~~