https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110645
Bug ID: 110645
Summary: False positive -Warray-bounds warning
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: andres at anarazel dot de
Target Milestone: ---
Created attachment 55531
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=55531&action=edit
reproducer
Hi,
The attached minimized reproducer (from postgres code) triggers a clearly bogus
-Warray-bounds warning, even with -Warray-bounds=1.
$ gcc -O1 -Wall -Warray-bounds=1 -c -o /dev/null -c repro.i
In function ‘formTextDatum’,
inlined from ‘spgist_name_compress’ at /tmp/cvise2/repro.i:44:9:
/tmp/cvise2/repro.i:35:17: warning: ‘memcpy’ forming offset [2, 254] is out of
the bounds [0, 2] [-Warray-bounds]
35 | memcpy(att->data, src, srclen);
| ^~~~~~~~~~~~
This is despite srclen being strlen(src), which gcc does know is <= 1.
It seems that the known range of srclen is "widened" due to the if (srclen <
0xff), causing the warning.
It is somewhat interesting that removing -Wall removes the spurious warning,
despite -Warray-bounds=1.
This triggers for gcc-11 - HEAD at 3b007164b3e, but not in gcc-10.
I looked through quite a few bugs about spurious -Warray-bounds warnings to see
if this is a duplicate - quite possible, but I didn't find a real match for
this.
Regards,
Andres