From adb3b4d11cb11a35b17bef2590bcdf6bffb06f21 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 23 Aug 2023 18:35:59 +0200 Subject: [PATCH] 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. --- gcc/ada/exp_ch9.adb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; -- 2.43.5