lkml.org 
[lkml]   [2002]   [Jan]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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/

\
 
 \ /
  Last update: 2005-03-22 13:15    [W:0.150 / U:0.044 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site