From: firth@sei.cmu.edu (Robert Firth)
Subject: Re: Dynamic Address Clauses??
Date: 2 Jun 88 12:39:30 GMT [thread overview]
Message-ID: <5697@aw.sei.cmu.edu> (raw)
In-Reply-To: 8806011944.AA06549@ti.com
In article <8806011944.AA06549@ti.com> LINNIG@eg.csc.ti.COM (Mike Linnig) writes:
>Folks,
>
>The following package was compiled with two compilers (DEC Ada and
>Tartan 1750a Ada). Both allowed the declaration of X. DEC ada
>complained about the type conversion used for the rep clause
>in ANOTHER.
>Assuming one or both is legal, what do they mean???
Wow! Yes, both address clauses are legal according to the RM [13.5],
which requires a "simple expression" yielding a value of type ADDRESS.
Note particularly that the RM does NOT require a static expression!
However, the second simple expression - stupid(x) - is not portable.
It assumes that INTEGER and ADDRESS are interconvertible, which will
be so only if ADDRESS is a numeric type. Evidently it is on the one
machine and not on the other.
Finally, there is a problem here - there is a reference to the
value in X when X in fact has no value. The program is therefore
"erroneous", by RM [3.2.1 (17,18)]
And what does it "mean"? I've commented the code to show what I think
it means.
------------------------------------------------------------
with SYSTEM;
use SYSTEM;
package DYNAMIC_ADDR is
subtype STUPID is SYSTEM.ADDRESS;
function DYNAMIC return STUPID; -- just some function
X: INTEGER;
for X use at DYNAMIC; -- just what does this mean??
-- [RF] call the function DYNAMIC. The return value
-- is the address of X. The implementation will
-- probably declare a hidden pointer and then
-- reference X indirectly through it
ANOTHER: INTEGER;
for ANOTHER USE AT stupid(x);
-- [RF] similarly, fetch the value of X (NOT its address)
-- convert that value to an address, and put ANOTHER
-- there. Again, this probably means building a
-- hidden pointer
-- I guess we can use x as a pointer
-- but is it only evaluated at package elaboration?
-- [RF] the code I'd expect to see:
-- declare space for 2 pointers (REFX and REFANOTHER)
-- call DYNAMIC
-- store return value in REFX
-- fetch value of X (ie load indirect through REFX)
-- store that value in REFANOTHER
end DYNAMIC_ADDR;
next prev parent reply other threads:[~1988-06-02 12:39 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
1988-06-01 15:12 Dynamic Address Clauses?? Mike Linnig
1988-06-02 12:39 ` Robert Firth [this message]
1988-06-10 14:38 ` stt
1988-06-15 21:19 ` Ron Guilmette
1988-06-03 6:02 ` Ron Guilmette
1988-06-03 14:52 ` markb
1988-06-06 12:33 ` David Collier-Brown
1988-06-08 18:52 ` Ron Guilmette
1988-06-10 19:22 ` Steve Hyland
1988-06-15 12:26 ` David Collier-Brown
1988-06-15 14:10 ` Burch Seymour
-- strict thread matches above, loose matches on Subject: below --
1988-06-10 15:42 Jim Moody, DCA C342
1988-06-16 13:53 David E. Emery
1988-06-17 4:13 ` Richard A. O'Keefe
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox