On Thu, Dec 29, 2011 at 23:02, Ian Lance Taylor <iant@xxxxxxxxxx> wrote: > Lars Gullik Bjønnes <larsbj@xxxxxxxxxx> 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. I won't argue too hard against that :-) But I do not read the -Warray-bounds documentation that way: "It warns about subscripts to arrays that are always out of bounds." So according to that I assumed (right...) that it not warn if there exists a path that will not trigger out-of-bounds. Thanks, -- Lgb