Hi there, the ARM compiler (we use 4.4.1 but could also verify this on different platforms) illegally ignores the volatile statement on globals when optimization >0 is used. Here is an example:
volatile unsigned char *glbDummyToTestVolatileBug; ... <somewhere in a function body>: for (glbDummyToTestVolatileBug=0;glbDummyToTestVolatileBug<(unsigned char *)100;) { *glbDummyToTestVolatileBug++ = 0; } The generated assembly code will store the iteration in a register, not the volatile global. Optimization level 0 will process this correctly. Relevant compiler options being used are as follows: -mthumb -mcpu=cortex-m3 -std=gnu99 -O3 -c -g -pedantic -Wall -Wextra -fshort-enums of course, the above code snippet is bogus, but is an abbreviated form of something we rely on in our embedded controller. Thanks! -- Summary: volatile globals illegally ignored on optimization levels >0 Product: gcc Version: 4.4.1 Status: UNCONFIRMED Severity: critical Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: asche at primion dot de GCC build triplet: unknown GCC host triplet: unknown (PC host not running cygwin) GCC target triplet: arm-none-eabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44928