From: Eric Botcazou <[email protected]>
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.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/exp_ch5.adb | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index 39b26e0e9b6..096509b49d5 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -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
--
2.43.0