I have found severe defect inside ARM cor Cortex-M3 compiler. It occurs only in release build.
And this is compilation result. Only 8 bytes is cleared, by using STR.
0x00013F06 F88D5008 STRB r5,[sp,#0x08] 23: UINT8 data[9];
64: continue; 65: } 66: 0x00013F42 E00F B 0x00013F64
67: memset(data,0, sizeof(data)); 70: 0x00013F44 9504 STR r5,[sp,#0x10] 0x00013F46 9505 STR r5,[sp,#0x14]
71: if(ReadBlockFromSRAM(data, addr, sizeof(data))) 72: { 0x00013F48 2209 MOVS r2,#0x09
=============================================================
When I use: x2 = sizeof(data); memset(data,0,x2);
It works fine.
Is this still consistent? I am not sure this is a tool chain issue but it looks strange to me.
It's not a problem at all. As long as the program output is correct, there is nothing to worry about. You will discover more strange things when studying compiler output as compilers perform more advanced optimizations with time. It only becomes a problem when a program malfunctions at high optimization levels and you suspect a compiler bug: pinpointing the bug can be extremely hard.