From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: How can one record component be local and another not?
Date: Tue, 5 May 2020 14:48:27 +0300
Date: 2020-05-05T14:48:27+03:00 [thread overview]
Message-ID: <hhd24bFemc4U1@mid.individual.net> (raw)
In-Reply-To: <hhcvilFe4qrU1@mid.individual.net>
On 2020-05-05 14:04, hreba wrote:
> I have reduced my problem to the following example:
>
> package Aux is
> type Integer_P is access all Integer;
> type Rec is record
> a: aliased Integer;
> p: Integer_P;
> end record;
>
> procedure Init (r: in out Rec);
> end Aux;
>
> package body Aux is
> procedure Init (r: in out Rec) is
> begin
> r.p:= r.a'Access; -- <-- error!
> end Init;
> end Aux;
>
> Compiling results in "non-local pointer cannot point to local object"
> indicating the marked line above.
>
> How can one record component be local and another not?
>
> Intention is to have a library subprogram Init() for initialization. How
> would I implement that instead?
>
> (The reason for the above construction is the need to pass a pointer to
> a C library function.)
>
The parameter "r" might be passed by copy, in which case the r.a'Access
would point to the local copy, and become a dangling pointer on return
(copy-out).
It works if you replace "r: in out" with "r : access", which ensures
pass by reference.
It did not work for me (same error message) if I just added "aliased",
making "r : aliased in out Rec", although I think that should also be
enough to ensure pass by reference.
This was on GNAT Community 2019 (20190517-83), Mac.
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
next prev parent reply other threads:[~2020-05-05 11:48 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-05 11:04 How can one record component be local and another not? hreba
2020-05-05 11:33 ` AdaMagica
2020-05-05 11:38 ` AdaMagica
2020-05-05 12:59 ` hreba
2020-05-05 13:19 ` J-P. Rosen
2020-05-05 13:37 ` Jere
2020-05-05 14:28 ` hreba
2020-05-05 15:18 ` AdaMagica
2020-05-05 14:32 ` hreba
2020-05-05 11:43 ` AdaMagica
2020-05-05 12:55 ` hreba
2020-05-05 11:46 ` Simon Wright
2020-05-05 13:07 ` hreba
2020-05-05 17:00 ` Dmitry A. Kazakov
2020-05-05 11:48 ` Niklas Holsti [this message]
2020-05-05 13:44 ` hreba
2020-05-05 15:45 ` Jeffrey R. Carter
2020-05-05 17:17 ` hreba
2020-05-05 19:08 ` Niklas Holsti
2020-05-06 19:31 ` hreba
2020-05-09 19:43 ` Niklas Holsti
2020-05-10 15:10 ` hreba
2020-05-05 19:19 ` Jere
2020-05-06 6:42 ` Mark Lorenzen
2020-05-06 8:26 ` Simon Wright
2020-05-06 8:33 ` Mark Lorenzen
2020-05-05 17:32 ` hreba
2020-05-05 19:04 ` Niklas Holsti
2020-05-05 20:11 ` Niklas Holsti
2020-05-06 13:13 ` hreba
2020-05-06 17:30 ` Niklas Holsti
2020-05-06 18:28 ` Jere
2020-05-06 19:09 ` Niklas Holsti
2020-05-07 9:07 ` J-P. Rosen
2020-05-07 10:15 ` Niklas Holsti
2020-05-07 13:00 ` Egil H H
2020-05-07 13:25 ` Simon Wright
2020-05-07 10:31 ` Stefan.Lucks
2020-05-07 11:58 ` J-P. Rosen
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox