This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] C undefined behavior fix
- From: dewar at gnat dot com
- To: groudier at free dot fr, jamagallon at able dot es
- Cc: Dautrevaux at microprocess dot com, dewar at gnat dot com, gcc at gcc dot gnu dot org,jtv at xs4all dot nl, linux-kernel at vger dot kernel dot org, paulus at samba dot org,tim at hollebeek dot com, trini at kernel dot crashing dot org, velco at fadata dot bg
- Date: Wed, 9 Jan 2002 20:21:09 -0500 (EST)
- Subject: Re: [PATCH] C undefined behavior fix
<<Grrr. I really do not know why people is making so noise about volatile.
Don't look for esoteric meanings, it is just 'don't suppose ANYTHING
about this memory location, it CAN CNAHGE apart from anything you can
see or guess'.
>>
Nope, that's not enough, it's not that simple. Yes your
example of a-a is of course straightforward but what about
b = (a & 1) | (b & 1);
if a is volatile and b is known to be odd, can the read of a be eliminated?
The answer should be no (and I think the standard guarantees this), but the
reasoning is completely different from thinking about the fact that a may
change unexpectedly, since obviously no matter what value comes from
reading a, b will be set to 1 if b is known to be odd.
Of course you can provide a pragmatic justification, think of a as a hardware
counter that counts the number of times it is referenced, then this should
count as a reference, even though on an as-if basis b would have the same
value.
The Ada standard says it clearly: a read or write of a volatile variable
is an external effect. period.