with Ada.Finalization; with Ada.Unchecked_Deallocation; procedure B003_Taskleak is package Inner is type Some_Task is task interface; type Some_Ptr is access all Some_Task'Class; type Wrapper (Ptr : Some_Ptr) is limited private; task type T is new Inner.Some_Task with end T; private type Wrapper (Ptr : Some_Ptr) is new Ada.Finalization.Limited_Controlled with null record; overriding procedure Initialize (W : in out Wrapper); end Inner; package body Inner is overriding procedure Initialize (W : in out Wrapper) is procedure Free is new Ada.Unchecked_Deallocation (Some_Task'Class, Some_Ptr); Ptr : Some_Ptr := W.Ptr; begin Free (Ptr); end Initialize; task body T is W : Inner.Wrapper (T'Unchecked_Access); begin delay 1.0; end T; end Inner; procedure Leak is Ptr : Inner.Some_Ptr := new Inner.T; begin null; end Leak; begin for I in 1 .. 99 loop Leak; end loop; end B003_Taskleak;