From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: What is X'Address of an empty array?
Date: Wed, 1 Jun 2022 14:49:25 +0200 [thread overview]
Message-ID: <t77n8k$1jan$1@gioia.aioe.org> (raw)
In-Reply-To: t761nn$daf$1@dont-email.me
On 2022-05-31 23:35, Randy Brukardt wrote:
> Aliased objects should never have zero-size in Ada (or, at least, ever be
> allocated at the same address). I believe that is because of the required
> result of the equality operator. Specifically:
>
> type NUL is array (1..0) of Integer;
> A, B : aliased NUL;
> type PNul is access Nul;
> PA : PNul := A'Access; PB : PNul := B'Access;
>
> if PA = PB then
> Report.Failed ("Access to two distinct objects can not be equal");
> end if;
>
> If an object is not aliased, it is undefined whether 'Address will work
> reliably with it (it probably does in GNAT, it might not in Janus/Ada, etc.)
> If the objects ARE aliased, then 'Address works essentially the same as
> 'Access.
>
> I personally find this a bit of overspecification in Ada, but since
> zero-size objects are unusual, no one has thought it worth going through the
> effort to change. (And of course such a change would complicate static
> analysis.) We (the ARG) did discuss this topic at one point (I don't have
> the AI number at hand).
It is actually rather nice.
I recently stumbled upon code:
A (A'First)'Address
in C bindings, when the other side has something like:
const double * a, int len
It of course fails in the marginal case when the array is empty. But
A'Address seems never do.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
prev parent reply other threads:[~2022-06-01 12:49 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-31 12:19 What is X'Address of an empty array? Dmitry A. Kazakov
2022-05-31 21:35 ` Randy Brukardt
2022-06-01 12:49 ` Dmitry A. Kazakov [this message]
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox