comp.lang.ada
 help / color / mirror / Atom feed
From: sbelmont700@gmail.com
Subject: Default_Storage_Pool
Date: Tue, 20 Feb 2018 18:00:05 -0800 (PST)
Date: 2018-02-20T18:00:05-08:00	[thread overview]
Message-ID: <74cfbf22-7082-4a43-aef9-6a55a049fe61@googlegroups.com> (raw)

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


             reply	other threads:[~2018-02-21  2:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-21  2:00 sbelmont700 [this message]
2018-02-22  1:13 ` Default_Storage_Pool Randy Brukardt
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