Messages in this thread | | | Date | Thu, 10 Jan 2002 12:47:02 +1100 | From | Fergus Henderson <> | Subject | Re: [PATCH] C undefined behavior fix |
| |
On 09-Jan-2002, Peter Barada <pbarada@mail.wm.sps.mot.com> wrote: > > If the code is: > > int b; > void stuff() > { > volatile const a=5; > > b = a - a; > } > > Then the code can be optimized to 'b = 0;'
No, you're wrong here. That would violate the following provisions of the C99 standard, because the two accesses to `a' would not have occurred. (It would also violate similar provisions of the C89 and C++ standards.) The "as if" rule -- which is stated in 5.1.2.3 [#3] in C99 -- is explicitly defined to NOT allow optimizing away accesses to volatile objects.
| 5.1.2.3 Program execution ... | [#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 ... | [#3] In the abstract machine, all expressions are evaluated | as specified by the semantics. An actual implementation | need not evaluate part of an expression if it can deduce | that its value is not used and that no needed side effects | are produced (including any caused by calling a function or | accessing a volatile object). ... | [#5] The least requirements on a conforming implementation | are: | | -- At sequence points, volatile objects are stable in the | sense that previous accesses are complete and | subsequent accesses have not yet occurred.
-- Fergus Henderson <fjh@cs.mu.oz.au> | "I have always known that the pursuit The University of Melbourne | of excellence is a lethal habit" WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |