volatile semantics

Dale Johannesen dalej@apple.com
Tue May 3 18:35:00 GMT 2005


On May 3, 2005, at 11:03 AM, Nathan Sidwell wrote:
> Dale Johannesen wrote:
>> However, as a QOI issue, I believe the compiler should treat the 
>> reference as
>> volatile if either the object or the lvalue is volatile.  That is 
>> obviously the
>> user's intent.
>
> I'm not disagreeing with you, but I wonder at gcc's ability to make
> good on such a promise.  A cast introducing a volatile qualifier
> will be a NOP_EXPR, and gcc tends to strip those at every opportunity.

You may well be right, I haven't tried to implement it (and am not 
planning to).

> Also, I wonder about the following example
>
> int const avail = <something>
>
> int main() {
>   while (*(int *)&avail == Foo ())
>     do_something();
>   return 0;
> }
>
> Seeing through the const-stripping cast is a useful optimization.

It is?  Why would somebody write that?

> A further pathelogical case would be,
>
> int main() {
>   while (*(int *)(volatile int *)&avail)
>     do_something ();
>   return 0;
> }
>
> What should this do, treat the volatile qualifier as sticky?

IMO, no, but surely we don't have to worry about this one.  Either way
is standard conformant and the user's intent is far from clear, so 
whatever
we do should be OK.



More information about the Gcc mailing list