In the code below the read "(int)ptr->b;" gets optimized away. It appears to be optimized away before the RTL stages, so I guess it must be because of the tree optimalisation.
I think that the C standard says C that the "name" of variable becomes an rvalue (the actual value) thus requires that the variable is accessed. Code: struct test { volatile int a; volatile int b; }; int main(int argc, char *argv[]){ struct test *ptr = (struct test *)0x10000000; ptr->b = 10; (int)ptr->b; return 1; } -- Summary: Read from volatile member of struct is optimized away Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: critical Priority: P2 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rpedersen at atmel dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: arm-unknown-elf http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22000