]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Plug small loophole in previous change
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 10 Dec 2024 16:53:34 +0000 (17:53 +0100)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Mon, 6 Jan 2025 09:14:47 +0000 (10:14 +0100)
The initial change only deals with the controlled record case for assignment
statements, but the controlled array case needs the same treatment.

gcc/ada/ChangeLog:

* exp_ch5.adb (Expand_Assign_Array): Bail out for controlled
components if the RHS is a function call and the assignment has
the No_Ctrl_Actions flag set.

gcc/ada/exp_ch5.adb

index 39b26e0e9b64a1c80ea598cfb17e1831ca979f77..096509b49d560133d573ebb0590e6f365549f1b2 100644 (file)
@@ -534,9 +534,14 @@ package body Exp_Ch5 is
          Loop_Required := True;
 
       --  Arrays with controlled components are expanded into a loop to force
-      --  calls to Adjust at the component level.
+      --  calls to Adjust at the component level, except for a function call
+      --  that requires no controlling actions (see Expand_Ctrl_Function_Call).
 
       elsif Has_Controlled_Component (L_Type) then
+         if Nkind (Rhs) = N_Function_Call and then No_Ctrl_Actions (N) then
+            return;
+         end if;
+
          Loop_Required := True;
 
       --  If object is full access, we cannot tolerate a loop