GCC does warn about this. But you need to do two things:
- Enable optimization. Without at least -O2, GCC is not doing enough analysis to know what
a
is, and that you ran off the edge. - Change your example so that a[] is actually used, otherwise GCC generates a no-op program and has completely discarded your assignment.
.
$ cat foo.c
int main(void)
{
int a[10];
a[13] = 3; // oops, overwrote the return address
return a[1];
}
$ gcc -Wall -Wextra -O2 -c foo.c
foo.c: In function ‘main’:
foo.c:4: warning: array subscript is above array bounds
BTW: If you returned a[13] in your test program, that wouldn’t work either, as GCC optimizes out the array again.