-- { dg-do run } with Ada.Unchecked_Deallocation; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; procedure Tagged_Alloc_Free is type Test_Base is tagged null record; type Test_Class_Access is access all Test_Base'Class; type Test_Extension is new Test_Base with record Last_Name : Unbounded_String := Null_Unbounded_String; end record; procedure Free is new Ada.Unchecked_Deallocation (Object => Test_Base'Class, Name => Test_Class_Access); Handle : Test_Class_Access := new Test_Extension; begin Free (Handle); end;