From: Ronan Desplanques <desplanq...@adacore.com> 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. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/exp_ch7.adb | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 95a790e5cee..e4daf4bc7a3 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; -- 2.43.0