comp.lang.ada
 help / color / mirror / Atom feed
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;

  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