http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53085

--- Comment #4 from brag <unixoid2003 at mail dot ru> 2012-04-24 12:27:29 UTC 
---
Alexander Monakov, As for me it's ok to treat whole struct as non-volatile even
if it has a volatile members when doing smth like this:
struct ss0 a,b;
a=b;
a=b;

Simple example with class:
class aa{
    void f();
private:
    volatile int a;
};

void aa::f(){
    a=0xff;
    a=0xff;
}

arm-none-eabi-gcc -O2 -mcpu=cortex-m3 -mthumb -c test.cpp
gcc-4.6.1 compiled:
00000000 <_ZN2aa1fEv>:
   0:   23ff            movs    r3, #255        ; 0xff
   2:   6003            str     r3, [r0, #0]
   4:   6003            str     r3, [r0, #0]
   6:   4770            bx      lr
The code is right.

gcc-4.7.0 compiled:
00000000 <_ZN2aa1fEv>:
   0:   23ff            movs    r3, #255        ; 0xff
   2:   6003            str     r3, [r0, #0]
   4:   4770            bx      lr
   6:   bf00            nop

The code is wrong. It's not ok to write once 'volatile int a' member.

Reply via email to