Hi list.

I think I've found a bug in where gcc checks if array indices are in range.

Here's my test-code:

---8<-----8<-----8<-----
/*
 * file: elementTest.c
 * command-line:
 *   arm-none-eabi-gcc -O2 elementTest.c -o elementTest
 */

#include <stdint.h>

uint8_t eightMembers[8];

int main(int argc, const char *argv[])
{
        uint8_t i;

        for(i = 0; i < 8; i++)
        {
                eightMembers[i] = 0;
        }

        for(i = 0; i < 9; i++)
        {
                eightMembers[i] = 0;
        }

        for(i = 0; i < 10; i++)
        {
                eightMembers[i] = 0;
        }

        return(0);
}
--->8----->8----->8-----

Here's my result:

---8<-----8<-----8<-----
elementTest.c: In function 'main':
elementTest.c:27:19: warning: iteration 8u invokes undefined behavior 
[-Waggressive-loop-optimizations]
   eightMembers[i] = 0;
                   ^
elementTest.c:25:2: note: containing loop
  for(i = 0; i < 10; i++)
  ^
--->8----->8----->8-----

I would expect gcc to complain when it meets the second loop as well as the 
third loop, but it didn't detect that there is something wrong with the second 
loop.

...Is this a bug ?


Love
Jens

Reply via email to