The 'Address
attribute may be applied to subprograms in Ada 95 and Ada 2005, but the
intended effect seems to be to provide
an address value which can be used to call the subprogram by means of
an address clause as in the following example:
procedure K is ... procedure L; for L'Address use K'Address; pragma Import (Ada, L);
A call to L
is then expected to result in a call to K
.
In Ada 83, where there were no access-to-subprogram values, this was
a common work-around for getting the effect of an indirect call.
GNAT implements the above use of Address
and the technique
illustrated by the example code works correctly.
However, for some purposes, it is useful to have the address of the start
of the generated code for the subprogram. On some architectures, this is
not necessarily the same as the Address
value described above.
For example, the Address
value may reference a subprogram
descriptor rather than the subprogram itself.
The 'Code_Address
attribute, which can only be applied to
subprogram entities, always returns the address of the start of the
generated code of the specified subprogram, which may or may not be
the same value as is returned by the corresponding 'Address
attribute.