Re: [PATCH] C undefined behavior fix

From: Laurent Guerby (
Date: Sun Jan 06 2002 - 08:41:22 EST wrote:

> pragma Atomic in Ada (volatile gets close in C, but is not close enough) will
> ensure a byte store in practice, but may not ensure byte reads.

I see no distinction between read and write in the text of the Ada standard.

Also I think if you declare a byte array with Atomic_Component
and Volatile_Component and that the compiler accepts it for its
target architecture, then the compiler is required to generate
a byte read and store for each occurence in the text source.
 From C.6:

15 For an atomic object (including an atomic component) all reads and
updates of the object as a whole are indivisible.

16 For a volatile object all reads and updates of the object as a
whole are
performed directly to memory.

20 {external effect (volatile/atomic objects) [partial]} The external
effect of a program (see 1.1.3) is defined to include each read and
update of
a volatile or atomic object. The implementation shall not generate any
reads or updates of atomic or volatile objects other than those specified by
the program.

In my exemple byte array, if I say X := T (I) I don't see how a conformant
compiler accepting the declaration could generate anything other than
one and exactly one byte read. Per 20 it has no right to read T (I+1) or
since they are "other" objects (components to be pedantic).

Do you agree with interpretation? Now, I haven't checked what GNAT does
(what's accepted and what code is generated) which is of course the
part :).

Laurent Guerby <>

- 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

This archive was generated by hypermail 2b29 : Mon Jan 07 2002 - 21:00:31 EST