From: Ronan Desplanques Date: Thu, 5 Jun 2025 10:03:46 +0000 (+0200) Subject: ada: Fix crash with Finalizable in corner case X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36b77268eec6e9791811b36b0d48c788ff696fb9;p=thirdparty%2Fgcc.git ada: Fix crash with Finalizable in corner case The Finalizable aspect introduced controlled types for which not all the finalization primitives exist. This patch makes Make_Deep_Record_Body handle this case correctly. gcc/ada/ChangeLog: * exp_ch7.adb (Make_Deep_Record_Body): Fix case of absent Initialize primitive. --- diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 381294b05d6..41438f40a88 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -7830,13 +7830,23 @@ package body Exp_Ch7 is when Initialize_Case => if Is_Controlled (Typ) then - return New_List ( - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of - (Find_Controlled_Prim_Op (Typ, Name_Initialize), Loc), - Parameter_Associations => New_List ( - Make_Identifier (Loc, Name_V)))); + declare + Intlz : constant Entity_Id := + Find_Controlled_Prim_Op (Typ, Name_Initialize); + begin + if Present (Intlz) then + return + New_List + (Make_Procedure_Call_Statement + (Loc, + Name => + New_Occurrence_Of (Intlz, Loc), + Parameter_Associations => + New_List (Make_Identifier (Loc, Name_V)))); + else + return Empty_List; + end if; + end; else return Empty_List; end if;