http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47409
--- Comment #12 from John Regehr <regehr at cs dot utah.edu> 2013-01-30 23:24:36 UTC --- (In reply to comment #10) > As said previously I think that volatile struct members are ill-defined. As far as the C standard goes, I believe the situation is clear: a volatile struct member is a volatile-qualified variable and the rules for volatile variables apply to it. Clang, for example, turns foo() into a load + store at all optimization levels. I believe the Intel compiler does as well but I don't have it available right now.