volatile semantics

Geoff Keating geoffk@geoffk.org
Sat Jul 23 01:28:00 GMT 2005


On 22/07/2005, at 4:33 PM, Ian Lance Taylor wrote:

> Geoffrey Keating <geoffk@geoffk.org> writes:
>
>> Although I can see that this is how you might think about the
>> semantics of 'const' and 'volatile', I don't think they're an exact
>> match for the model in the standard.  In fact, I think you could
>> exchange the words 'const' and 'volatile' in the above and they would
>> be equally accurate.
>>
>
> Sure, and I think my ultimate point would still be accurate: gcc
> should handle the access using the qualification of the pointer, not
> of the underlying object.  The rest of the argument is just
> motivation.

By "equally accurate", I also meant "equally inaccurate".

You've successfully argued that 'const' and 'volatile' are the same  
in lots of ways; but 'const' and 'volatile' do differ.  In order to  
be successful in this argument, you need to argue that the  
differences don't matter.

And, unfortunately, the differences *do* matter.  The standard does  
not say "any expression referring to a volatile-qualified type must  
be evaluated strictly according to the rules of the abstract  
machine".  What it says is that "An object that has volatile  
qualified type may be modified in ways unknown to the implementation"  
and then lists some of the consequences of an object being modifiable  
in that way.  So there are no "semantics of the access"; the  
semantics attach to the object.

This is part of what I meant by saying that your model isn't a match  
for the model in the standard.  Your model had semantics attached to  
the access.

> In fact const and volatile are analogous here.  If you have a
> non-const object, and you attempt to access it with a const-qualified
> pointer, the compiler will apply the semantics of const (i.e., it will
> reject an attempt to modify the object through the pointer).

There are no general differences in semantics of a 'const' access.   
There are only special semantics of an assignment to a 'const' lvalue  
(it's not allowed).  Nor are there any special semantics of a 'const'  
object; in particular, it is not true that a 'const' object cannot  
change, only that it can't be changed from C.  So it's not true that  
const and volatile are analogous here, nor is it true that an access  
to a non-const object with a const-qualified pointer is different to  
accessing it with a non-const-qualified pointer.

I am discussing here only with what GCC *could* do, and still be  
standards-conforming.  What it *should* do is a different conversation.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2410 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc/attachments/20050723/560522ea/attachment.p7s>


More information about the Gcc mailing list