Dear Sirs, I use gcc 3.4.5 and received following incorrect result in the program. On the gcc site exist report about incorrect behavior of ++ operator but not this situation. I hope that it will be usefull.
I have developed some stupid code to show the problem: #include <stdio.h> void upcase(char* str) { size_t len; len = strlen(str); while(len-- > 0 ) *str++ = toupper(*str); } int main(int argc, char** argv) { char buf[1000]; scanf("%s",&buf); upcase(buf); printf("\n%s",buf); } Compile: gcc -o test.exe -O2 tcode.c Problem: Without optimization such chunk of code is working fine, but with O2 optimization, I have incorrect result due to gcc incremented esi earlier than read data and as the result - the first letter is lost. -------- DISASM ------------- mov ebx, esi inc esi movsx eax, byte ptr [esi] mov [esp+18h+var_18], eax call toupper mov [ebx], al -------- DISASM ------------- Best Regards, crow16384