lkml.org 
[lkml]   [2002]   [Jan]   [9]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateThu, 10 Jan 2002 12:47:02 +1100
FromFergus Henderson <>
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 12:15    [W:0.349 / U:0.270 seconds]
©2003-2008 Jasper Spaans