From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Default_Storage_Pool
Date: Wed, 21 Feb 2018 19:13:58 -0600
Date: 2018-02-21T19:13:58-06:00 [thread overview]
Message-ID: <p6l5gp$lb2$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: 74cfbf22-7082-4a43-aef9-6a55a049fe61@googlegroups.com
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.
<sbelmont700@gmail.com> wrote in message
news:74cfbf22-7082-4a43-aef9-6a55a049fe61@googlegroups.com...
Can anyone offer insight into what exactly should happen when
Default_Storage_Pool is explicitly set within an extended return statement
to a pool within the return object? In particular, consider these
shenanigans:
package O is
pool_1 : My_Fancy_Pool
pragma Default_Storage_Pool(pool_1);
type T is limited
record
pool_2 : My_Fancy_Pool
p1 : access Integer;
end record;
function F return T;
end O;
package body O is
function F return T is
begin
return Result : T do
declare
pragma Default_Storage_Pool(Result.pool_2); -- legal?
p2 : access Integer;
begin
p2 := new integer'(42);
Result.p1 := new integer'(43);
end;
end return;
end F;
end O;
GNAT happily accepts this, but based on print lines, it allocates Result.p1
from pool_1 and p2 from some unspecified default pool (i.e. neither pool_1
or pool_2). I wasn't sure what I was expecting; I assumed an error message,
but failing that, both to go into result.pool_2, and was surprised to get
neither.
Any clarifications are appreciated.
-sb
next prev parent reply other threads:[~2018-02-22 1:13 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 ` Randy Brukardt [this message]
2018-02-22 13:02 ` Default_Storage_Pool sbelmont700
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