Andrew Haley wrote: > eCos@ wrote: >> =============================================== >> int *p; >> >> int main(void) >> { >> p++; >> __asm__ __volatile__ (""::); >> p++; >> } >> ===============================================
>> assembly code is like: >> 'addl $4, %eax' >> 'addl $4, %eax' >> =============================================== >> int *p; >> >> int main(void) >> { >> p++; >> __asm__ __volatile__ (""::); >> p+=8; >> } >> =============================================== >> According to the assembly code, we found that gcc merge the 'p++' & 'p+=8' >> and generate 'addl $36, p' > If you really need a memory barrier, you have to use one: So, this is a real bug then - but it's a missed optimisation in the first case, not a bogus one in the second case? cheers, DaveK