| -- { dg-do compile } |
| |
| with System.Storage_Elements; |
| with System.Storage_Pools.Subpools; |
| |
| procedure Subpools1 is |
| |
| use System.Storage_Pools.Subpools; |
| |
| package Local_Pools is |
| |
| use System.Storage_Elements; |
| |
| type Local_Pool is new Root_Storage_Pool_With_Subpools with null record; |
| |
| overriding |
| function Create_Subpool (Pool: in out Local_Pool) |
| return not null Subpool_Handle; |
| |
| overriding |
| procedure Allocate_From_Subpool |
| (Pool : in out Local_Pool; |
| Storage_Address : out System.Address; |
| Size_In_Storage_Elements: in Storage_Count; |
| Alignment : in Storage_Count; |
| Subpool : in not null Subpool_Handle); |
| |
| overriding |
| procedure Deallocate_Subpool |
| (Pool : in out Local_Pool; |
| Subpool: in out Subpool_Handle) is null; |
| |
| end Local_Pools; |
| |
| package body Local_Pools is |
| |
| type Local_Subpool is new Root_Subpool with null record; |
| |
| Dummy_Subpool: aliased Local_Subpool; |
| |
| overriding |
| function Create_Subpool (Pool: in out Local_Pool) |
| return not null Subpool_Handle |
| is |
| begin |
| return Result: not null Subpool_Handle |
| := Dummy_Subpool'Unchecked_Access |
| do |
| Set_Pool_Of_Subpool (Result, Pool); |
| end return; |
| end; |
| |
| overriding |
| procedure Allocate_From_Subpool |
| (Pool : in out Local_Pool; |
| Storage_Address : out System.Address; |
| Size_In_Storage_Elements: in Storage_Count; |
| Alignment : in Storage_Count; |
| Subpool : in not null Subpool_Handle) |
| is |
| type Storage_Array_Access is access Storage_Array; |
| |
| New_Alloc: Storage_Array_Access |
| := new Storage_Array (1 .. Size_In_Storage_Elements + Alignment); |
| begin |
| for SE of New_Alloc.all loop |
| Storage_Address := SE'Address; |
| exit when Storage_Address mod Alignment = 0; |
| end loop; |
| end; |
| |
| end Local_Pools; |
| |
| A_Pool: Local_Pools.Local_Pool; |
| |
| type Integer_Access is access Integer with Storage_Pool => A_Pool; |
| |
| X: Integer_Access := new Integer; |
| |
| begin |
| null; |
| end; |