[lkml]   [2002]   [Jan]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH] C undefined behavior fix
On 09-Jan-2002, Peter Barada <> 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 [#3] in C99 -- is explicitly
defined to NOT allow optimizing away accesses to volatile objects.

| 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 <> | "I have always known that the pursuit
The University of Melbourne | of excellence is a lethal habit"
WWW: <> | -- 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
More majordomo info at
Please read the FAQ at

 \ /
  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