https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82296
--- Comment #6 from Ingo <lundril at gmx dot de> --- > https://www.securecoding.cert.org/confluence/display/c/ARR30-C.+Do+not+form+or+use+out-of-bounds+pointers+or+array+subscripts Just out of curiosity: I am not able to find any of that in the ANSI/ISO C89 standard. That might be, because I am not familiar where to find that in the C89 standard (I am definitely not familiar with any of the formal C standard documents). I also noticed that if I compile the example with gcc -std=c89 -O2 -S gcc_check.c I also get assembler code which basically implements "return 1;". So does that mean gcc will always define "undefined behavior" according to the C-2011 standard, even if you use "-std=c89" ? What happens when the standard committee release a more recent version of the C standard ? Will the upcoming versions of GCC then use the updated definitions of "undefined behavior" from the upcoming C standards definition and thus produce non working code for any source code, which was not able to look into the future and guessing what the C standards committee might deem "undefined behavior" in the future ?