This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] C undefined behavior fix
- From: Florian Weimer <fw at deneb dot enyo dot de>
- To: ertr1013 at student dot uu dot se
- Cc: Dautrevaux at microprocess dot com, pkoning at equallogic dot com, gcc at gcc dot gnu dot org, linux-kernel at vger dot kernel dot org, mrs at windriver dot com, dewar at gnat dot com
- Date: Thu, 10 Jan 2002 16:27:29 +0100
- Subject: Re: [PATCH] C undefined behavior fix
- References: <20020110121845.91AD8F317E@nile.gnat.com><20020110123711.GA745@student.uu.se>
Erik Trulsson <ertr1013@student.uu.se> writes:
> The compiler is not free to do only one load there if v is declared
> volatile.
> The relevant part of the C standard would be the following paragraph:
>
> [6.7.3]
> [#6] An object that has volatile-qualified type may be
> modified in ways unknown to the implementation or have other
> unknown side effects. Therefore any expression referring to
> such an object shall be evaluated strictly according to the
> rules of the abstract machine, as described in 5.1.2.3.
> Furthermore, at every sequence point the value last stored
> in the object shall agree with that prescribed by the
> abstract machine, except as modified by the unknown factors
> mentioned previously.105) What constitutes an access to an
> object that has volatile-qualified type is implementation-
> defined.
And 5.1.2.3 states:
[#2] Accessing a volatile object, modifying an object,
modifying a file, or calling a function that does any of
those operations are all side effects,11) which are changes
in the state of the execution environment. Evaluation of an
expression may produce side effects. At certain specified
points in the execution sequence called sequence points, all
side effects of previous evaluations shall be complete and
no side effects of subsequent evaluations shall have taken
place. (A summary of the sequence points is given in annex
C.)
So it seems to be obvious ;-) that the compiler must not remove
seemingly unnecessary references to volatile objects.