comp.lang.ada
 help / color / mirror / Atom feed
From: kst@thomsoft.com (Keith Thompson)
Subject: Re: Importing C Structures
Date: Sat, 25 Mar 1995 09:57:08 GMT
Date: 1995-03-25T09:57:08+00:00	[thread overview]
Message-ID: <D5zqB9.5F8@thomsoft.com> (raw)
In-Reply-To: VLADIMIR.95Mar24005132@speedy.intrepid.com

In <VLADIMIR.95Mar24005132@speedy.intrepid.com> vladimir@speedy.intrepid.com (Vladimir Vukicevic) writes:
> There is no such clause in the Ada 95 LRM... the "Erroneous Execution"
> section for using a X'Address representation clause (13.3 (13)) states:
> 
>        If an Address is specified, it is the programmer's responsibility
>        to ensure that the address is valid; otherwise, program execution
>        is erroneous. 
> 
> So, it is perfectly valid to use the same 'Address for two objects, as
> long as the Address you specify is valid :-)

Here's an example of an erroneous use of address clauses in Ada 83:

    X : Integer;
    ...
    Y : Integer;
    for Y use at X'Address;

The reason this is erroneous is that the compiler may not be aware that
X and Y are really the same object (X may be declared in a different
compilation unit, or the overlaid object might be something more
complex than a simple object, say a dynamically indexed array element).
The compiler is free to keep the value of X in a register, optimize out
dead assignments, etc., so the apparent values of X and Y won't track
each other as the user might naively expect.

The AARM, if I'm reading it correctly, still gives implementations
considerable freedom to treat such constructs as erroneous.
Paragraph 13.3(13) says

        If an Address is specified, it is the programmer's
        responsibility to ensure that the address is valid;
        otherwise, program execution is erroneous.

What does "valid" mean in this context?  See paragraph 12.b in the
same subsection:

        The validity of a given address depends on the run-time
        model; thus, in order to use Address clauses correctly,
        one needs intimate knowledge of the run-time model.

Caveat hacker.

A minor digression:

Initialization of objects with address clauses has caused a lot of
problems in Ada 83; the language doesn't give permission not to initialize
such objects, but if you're trying to map an access or System.Address
object to a hardware register you probably don't want it initialized
to null.  Paragraph 12.c of the AARM says:

        If the Address of an object is specified, any explicit
        or implicit initialization takes place as usual,
        unless a pragma Import is also specified for the
        object (in which case any necessary initialization
        is presumably done in the foreign language).

(The language specified in the pragma Import can be Ada.)

-- 
Keith Thompson (The_Other_Keith)  kst@thomsoft.com (kst@alsys.com still works)
TeleSoft^H^H^H^H^H^H^H^H Alsys^H^H^H^H^H Thomson Software Products
10251 Vista Sorrento Parkway, Suite 300, San Diego, CA, USA, 92121-2718
That's Keith Thompson *with* a 'p', Thomson Software Products *without* a 'p'.



  reply	other threads:[~1995-03-25  9:57 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1995-03-23  6:34 Importing C Structures Chris O'Regan
1995-03-23  7:55 ` Vladimir Vukicevic
1995-03-23 18:55   ` Robert S. White
1995-03-24  8:51     ` Vladimir Vukicevic
1995-03-25  9:57       ` Keith Thompson [this message]
1995-03-26 13:16         ` Larry Kilgallen, LJK Software
1995-03-27  0:00           ` Kevin F. Quinn
1995-04-07  0:00             ` Larry Kilgallen
1995-03-27 15:35           ` Theodore Dennison
1995-03-28  0:00             ` Robert Dewar
1995-03-28 11:44             ` Keith Thompson
1995-03-29  0:00               ` misattrubation (was: Re: Importing C Structures) Theodore Dennison
1995-03-31  0:00                 ` Theodore Dennison
1995-03-27 23:39           ` Importing C Structures Keith Thompson
1995-03-27 16:00       ` Norman H. Cohen
1995-03-24 16:08     ` Robert I. Eachus
1995-03-24 20:20     ` Bob Gilbert
1995-03-25 18:07     ` Robert Dewar
1995-03-24 17:30   ` Robert Dewar
1995-03-24 15:32 ` Robert Dewar
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox