David Brown<david@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.