From: Eric Botcazou Date: Wed, 23 Aug 2023 16:35:59 +0000 (+0200) Subject: ada: Fix problematic secondary stack management in protected entry X-Git-Tag: basepoints/gcc-15~6445 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=adb3b4d11cb11a35b17bef2590bcdf6bffb06f21;p=thirdparty%2Fgcc.git ada: Fix problematic secondary stack management in protected entry The secondary stack mark goes formally out of scope before the finalizer reads it to reclaim the storage. gcc/ada/ * exp_ch9.adb (Build_Protected_Entry): Move the At_End procedure from the entry body to the inner block statement. --- diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index b0e3632b8c83..5dcd890c33cd 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -3457,6 +3457,7 @@ package body Exp_Ch9 is Set_Uses_Sec_Stack (Block_Id, Uses_Sec_Stack (Corresponding_Spec (N))); Reset_Scopes_To (First (Bod_Stmts), Block_Id); + Set_At_End_Proc (First (Bod_Stmts), At_End_Proc (N)); case Corresponding_Runtime_Package (Pid) is when System_Tasking_Protected_Objects_Entries => @@ -3553,7 +3554,6 @@ package body Exp_Ch9 is -- Establish link between subprogram body and source entry body Set_Corresponding_Entry_Body (Proc_Body, N); - Set_At_End_Proc (Proc_Body, At_End_Proc (N)); Reset_Scopes_To (Proc_Body, Protected_Body_Subprogram (Ent)); return Proc_Body;