-- { dg-do compile } -- { dg-options "-O" } with Ada.Unchecked_Deallocation; with Opt46_Pkg; package body Opt46 is type Pattern is abstract tagged null record; type Pattern_Access is access Pattern'Class; procedure Free is new Ada.Unchecked_Deallocation (Pattern'Class, Pattern_Access); type Action is abstract tagged null record; type Action_Access is access Action'Class; procedure Free is new Ada.Unchecked_Deallocation (Action'Class, Action_Access); type Pattern_Action is record Pattern : Pattern_Access; Action : Action_Access; end record; package Pattern_Action_Table is new Opt46_Pkg (Pattern_Action, Natural, 1); type Session_Data is record Filters : Pattern_Action_Table.Instance; end record; procedure Close (Session : Session_Type) is Filters : Pattern_Action_Table.Instance renames Session.Data.Filters; begin for F in 1 .. Pattern_Action_Table.Last (Filters) loop Free (Filters.Table (F).Pattern); Free (Filters.Table (F).Action); end loop; end Close; end Opt46;