rxada_0.1.1_dd9da799/src/bugs/holder_leak.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
with Ada.Containers.Indefinite_Holders;
with Ada.Text_IO; use Ada.Text_IO;

procedure Holder_Leak is
   use Ada.Containers;
   type Indef is array (Integer range <>) of Integer;
   package Holders is new Indefinite_Holders (Indef);
   type Def is new Holders.Holder with null record;

   -- This wrapper type is necessary for the leak to manifest
   type Outer is record
      Inner : Def;
   end record;

   procedure Eat (O : Outer) is
   begin
      for I of O.Inner.Constant_Reference loop
      -- Using .Element instead there is no leak
         Put_Line (I'Img);
      end loop;
   end Eat;

begin
   for I in 1 .. 666 loop
      Eat ((Inner => To_Holder ((1, 2, 3, 4, 5))));
   end loop;
end Holder_Leak;