From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Issue with GNAT GPL 2009 and GtkAda
Date: Fri, 26 Jun 2009 11:07:11 +0200
Date: 2009-06-26T11:07:11+02:00 [thread overview]
Message-ID: <1pjr0mljv2ozo$.1ahm9u9i39pg6.dlg@40tude.net> (raw)
In-Reply-To: 7ajfrgF1vdsnlU1@mid.individual.net
On Fri, 26 Jun 2009 10:39:45 +0200, Alex R. Mosteo wrote:
> Dmitry A. Kazakov wrote:
>
>> On Thu, 25 Jun 2009 05:06:08 -0400, Stephen Leake wrote:
>>
>>> Another thought: whenever I have trouble with anonymous access types,
>>> I replace them with the corresponding named access type, and the
>>> problem goes away. That may indicate a conmpiler bug, but I've always
>>> had to much to do to find out.
>>
>> Yes, but that is not necessarily a compiler bug. It is quite simple to
>> create a serious problem to oneself:
>>
>> declare
>> Ptr : access T := new T;
>> begin
>> ...
>> External_Ptr := Ptr.all'Uchecked_Access; -- Copy the pointer
>> ...
>> end; -- Now External_Ptr is dangling, because the object is freed.
>
> If I understand correctly, this is because the type of Ptr goes out of
> scope?
Yes
> I strongly suspect that Gnat does not behave this way, but I should test it.
Here is a test:
with Ada.Finalization;
with Ada.Text_IO; use Ada.Text_IO;
procedure Test_Anonymous_Access is
package P is
type T is new Ada.Finalization.Controlled with null record;
overriding procedure Finalize (X : in out T);
end P;
package body P is
procedure Finalize (X : in out T) is
begin
Put_Line ("Finalized");
end Finalize;
end P;
use P;
begin
declare
X : access T := new T;
begin
Put_Line ("Created");
end;
Put_Line ("Left the scope");
end Test_Anonymous_Access;
It should print:
Created
Finalized
Left the scope
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2009-06-26 9:07 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-23 21:52 Issue with GNAT GPL 2009 and GtkAda Damien Carbonne
2009-06-24 7:40 ` Dmitry A. Kazakov
2009-06-24 10:15 ` Stephen Leake
2009-06-25 9:06 ` Stephen Leake
2009-06-25 9:39 ` Dmitry A. Kazakov
2009-06-25 19:02 ` Damien Carbonne
2009-06-26 9:31 ` Stephen Leake
2009-06-26 11:18 ` Niklas Holsti
2009-06-26 16:29 ` Damien Carbonne
2009-06-26 17:28 ` Dmitry A. Kazakov
2009-06-26 19:27 ` Damien Carbonne
2009-06-26 19:50 ` Dmitry A. Kazakov
2009-06-26 21:51 ` Randy Brukardt
2009-06-27 11:11 ` Stephen Leake
2009-06-27 17:04 ` Robert A Duff
2009-06-30 11:11 ` Stephen Leake
2009-06-30 18:10 ` Robert A Duff
2009-06-29 22:11 ` Randy Brukardt
2009-06-30 11:13 ` Stephen Leake
2009-06-30 15:26 ` Adam Beneschan
2009-06-30 15:59 ` Adam Beneschan
2009-06-30 23:11 ` Randy Brukardt
2009-06-27 9:56 ` Stephen Leake
2009-06-26 21:03 ` Damien Carbonne
2009-06-27 11:21 ` Stephen Leake
2009-06-27 12:25 ` Damien Carbonne
2009-06-27 12:35 ` Damien Carbonne
2009-06-29 22:15 ` Randy Brukardt
2009-07-01 19:22 ` Damien Carbonne
2009-06-30 0:48 ` Adam Beneschan
2009-06-30 11:18 ` Stephen Leake
2009-06-25 20:49 ` Randy Brukardt
2009-06-26 7:20 ` Dmitry A. Kazakov
2009-06-26 8:17 ` Georg Bauhaus
2009-06-26 8:52 ` Dmitry A. Kazakov
2009-06-26 21:38 ` Randy Brukardt
2009-06-27 7:47 ` Dmitry A. Kazakov
2009-06-29 21:59 ` Randy Brukardt
2009-06-30 8:31 ` Dmitry A. Kazakov
2009-06-26 21:31 ` Randy Brukardt
2009-06-27 7:53 ` Dmitry A. Kazakov
2009-06-26 8:39 ` Alex R. Mosteo
2009-06-26 9:07 ` Dmitry A. Kazakov [this message]
2009-06-27 9:53 ` Stephen Leake
2009-06-26 21:40 ` Randy Brukardt
2009-06-29 10:04 ` Alex R. Mosteo
2009-06-26 9:02 ` Stephen Leake
2009-06-26 9:14 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox