[COMMITTED] ada: Do not attempt to generate finalization actions with restricted profile

Message ID 20240506091837.1586374-1-poulhies@adacore.com
State Committed
Headers
Series [COMMITTED] ada: Do not attempt to generate finalization actions with restricted profile |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 warning Patch is already merged
linaro-tcwg-bot/tcwg_gcc_build--master-arm warning Patch is already merged

Commit Message

Marc Poulhiès May 6, 2024, 9:18 a.m. UTC
  From: Eric Botcazou <ebotcazou@adacore.com>

These actions are not supported with this profile, but we were nevertheless
attempting to generate them for protected objects.

gcc/ada/

	* exp_ch7.adb (Build_Finalizer.Process_Declarations): Do not call
	Processing_Actions for simple protected objects if the profile is
	restricted.
	* exp_util.adb (Requires_Cleanup_Actions): Do not return True for
	simple protected objects if the profile is restricted.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/exp_ch7.adb  | 6 +++++-
 gcc/ada/exp_util.adb | 8 ++++++--
 2 files changed, 11 insertions(+), 3 deletions(-)
  

Patch

diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb
index 7a8457683c5..99142a527fa 100644
--- a/gcc/ada/exp_ch7.adb
+++ b/gcc/ada/exp_ch7.adb
@@ -2526,9 +2526,12 @@  package body Exp_Ch7 is
                then
                   Processing_Actions (Decl);
 
-               --  Simple protected objects which use type System.Tasking.
+               --  Simple protected objects which use the type System.Tasking.
                --  Protected_Objects.Protection to manage their locks should
                --  be treated as controlled since they require manual cleanup.
+               --  but not for restricted run-time libraries (Ravenscar), see
+               --  also Cleanup_Protected_Object.
+
                --  The only exception is illustrated in the following example:
 
                --     package Pkg is
@@ -2561,6 +2564,7 @@  package body Exp_Ch7 is
                elsif Ekind (Obj_Id) = E_Variable
                  and then not In_Library_Level_Package_Body (Obj_Id)
                  and then Has_Simple_Protected_Object (Obj_Typ)
+                 and then not Restricted_Profile
                then
                   Processing_Actions (Decl, Is_Protected => True);
                end if;
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 732a02fc5d8..533127f26c2 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -12999,9 +12999,12 @@  package body Exp_Util is
             then
                return True;
 
-            --  Simple protected objects which use type System.Tasking.
+            --  Simple protected objects which use the type System.Tasking.
             --  Protected_Objects.Protection to manage their locks should be
-            --  treated as controlled since they require manual cleanup.
+            --  treated as controlled since they require manual cleanup, but
+            --  not for restricted run-time libraries (Ravenscar), see also
+            --  Cleanup_Protected_Object in Exp_Ch7.
+
             --  The only exception is illustrated in the following example:
 
             --     package Pkg is
@@ -13034,6 +13037,7 @@  package body Exp_Util is
             elsif Ekind (Obj_Id) = E_Variable
               and then not In_Library_Level_Package_Body (Obj_Id)
               and then Has_Simple_Protected_Object (Obj_Typ)
+              and then not Restricted_Profile
             then
                return True;
             end if;