Syntax:
pragma Volatile_Full_Access (LOCAL_NAME);
This is similar in effect to pragma Volatile, except that any reference to the object is guaranteed to be done only with instructions that read or write all the bits of the object. Furthermore, if the object is of a composite type, then any reference to a subcomponent of the object is guaranteed to read and/or write all the bits of the object.
The intention is that this be suitable for use with memory-mapped I/O devices
on some machines. Note that there are two important respects in which this is
different from pragma Atomic
. First a reference to a Volatile_Full_Access
object is not a sequential action in the RM 9.10 sense and, therefore, does
not create a synchronization point. Second, in the case of pragma Atomic
,
there is no guarantee that all the bits will be accessed if the reference
is not to the whole object; the compiler is allowed (and generally will)
access only part of the object in this case.