False positive from -Warray-bounds?

Ian Lance Taylor iant@google.com
Thu Dec 29 22:45:00 GMT 2011


Lars Gullik Bjønnes <larsbj@gullik.org> writes:

> I have this code:
>
> --------------
> unsigned int f(unsigned int value)
> {
>     unsigned int i = (value & 0xffff);
>     return (i == 0xffff ? 0xffffffff : i);
> }
>
>
> static int *arr1[10];
>
> void t(unsigned int s)
> {
>     arr1[f(s)] = 0;
>     arr1[f(s)] = 0;
> }
> ------------------
>
>
> When compiled with 'gcc -Wall -Wextra -c' I get a warning about
> "subscript is above array bounds".
> Shouldn't the -Warray-bounds only warn if will _always_ be out-of-bounds?
>
> Is this a false positive, or is there something that I am completely missing?
>
> I see this with gcc from trunk (some days ago), and with redhat gcc 4.6.2-1.

The warning triggers if there is some code path in which the index is
provably out of bounds.  That is true of this code.  I don't think I
would describe this as a false positive.  I think it is a case where, as
the -Wall documentation says, the code should be modified to avoid the
warning.

Ian



More information about the Gcc-help mailing list