David Brown <da...@westcontrol.com> writes: > On 21/09/2011 10:21, Paulo J. Matos wrote: >> On 21/09/11 08:03, David Brown wrote: >>> Asking to read it by a volatile read does not >>> change the nature of "foo" - the compiler can still implement it as a >>> compile-time constant. >> >> But since I am accessing the data through the pointer and the pointer >> qualifies the data as volatile, shouldn't the compiler avoid this kind >> of optimization for reads through the pointer? >> > > My thought is that the nature of "foo" is independent of how it is > accessed. On the other hand, some uses of a variable will affect its > implementation - if you take the address of "foo" and pass that on to > an external function or data, then the compiler would have to generate > "foo" in memory (but in read-only memory, and it can still assume its > value does not change). So I am not sure what the "correct" behaviour > is here - I merely ask the question. > > Fortunately, this situation is not going to occur in real code.
I think your description is supported by the standard. However, I also think that gcc should endeavor to fully honor the volatile qualifier in all cases, because that is least surprising to the programmer. This is not a case where we should let optimization override the programmer's desire; by using volatile, the programmer has explicitly told us that they do not want any optimization to occur. Ian