From: sbelmont700@gmail.com
Subject: Re: Default_Storage_Pool
Date: Thu, 22 Feb 2018 05:02:42 -0800 (PST)
Date: 2018-02-22T05:02:42-08:00 [thread overview]
Message-ID: <86a8a87c-72ca-4718-a2a1-11ee07d66fa8@googlegroups.com> (raw)
In-Reply-To: <p6l5gp$lb2$1@franka.jacob-sparre.dk>
On Wednesday, February 21, 2018 at 8:14:03 PM UTC-5, Randy Brukardt wrote:
> Default_Storage_Pool only has an effect when an access type is declared (not
> when it is used). Thus the allocators for the component of type T should use
> Pool_1 regardless of what the Default_Storage_Pool is when the allocator is
> written.
>
> But I'd expect the local anonymous access allocator to use Pool_2. I don't
> see any reason to use some other pool in this case - 13.11.3(6-6.3/4) is
> pretty clear about this, and the rules specifically were designed so that it
> would apply to anonymous access types.
>
> Thus, this appears to be a bug, but I also fail to see any use for it (the
> anonymous access type having to disappear long before anyone can used the
> return value), so I would probably not give it much priority if it was
> reported to me. (Of course, a fuller example could cause me to change my
> mind on that.)
>
> Randy.
Thank you, that was what I thought it should do. I had no legitimate use case, I was just trying to tease out counter-examples to confirm my understanding.
I claim no in-depth comprehension, but because of either subsequent bugs or perhaps 2012 changes to AATs (or perhaps legitimately), GNAT also takes this:
package body O is
janky : access Integer;
function F return T is
begin
return Result : T do
declare
pragma Default_Storage_Pool(Result.pool_2);
p2 : access Integer;
begin
p2 := new integer'(42);
janky := p2; --legal?
end;
end return;
end F;
end;
When does janky become a dangling pointer? Surely if the default pool is local to F (because the entire pool goes away after F ends), never if the default pool is pool_1 (since it has the same lifetime as janky), and 'possibly' if it's contained within Result.pool_2 (since it depends on where the client has creates the result). GNAT accepts all three variations (well, subject to the aforementioned bug presumably making case 3 the same as 1) and raises no exceptions for any of them.
Thank you for the continued explanations
-sb
next prev parent reply other threads:[~2018-02-22 13:02 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-21 2:00 Default_Storage_Pool sbelmont700
2018-02-22 1:13 ` Default_Storage_Pool Randy Brukardt
2018-02-22 13:02 ` sbelmont700 [this message]
2018-02-23 0:06 ` Default_Storage_Pool Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox