@@ -4626,6 +4626,14 @@ package body Exp_Aggr is
Component_Loop : while Present (Elmt) loop
Expr := Expression (Elmt);
+ -- If the expression involves a construct that generates a
+ -- loop, we must generate individual assignments and no
+ -- flattening is possible.
+
+ if Nkind (Expr) = N_Quantified_Expression then
+ return False;
+ end if;
+
-- In the case of a multidimensional array, check that the
-- aggregate can be recursively flattened.
@@ -4642,14 +4650,6 @@ package body Exp_Aggr is
if Nkind (Choice) = N_Others_Choice then
Rep_Count := 0;
- -- If the expression involves a construct that generates
- -- a loop, we must generate individual assignments and
- -- no flattening is possible.
-
- if Nkind (Expr) = N_Quantified_Expression then
- return False;
- end if;
-
for J in Vals'Range loop
if No (Vals (J)) then
Vals (J) := New_Copy_Tree (Expr);
From: Ronan Desplanques <desplanques@adacore.com> This patch moves a statement outside of a loop because it didn't need to be inside that loop. The behavior of the program is not affected. gcc/ada/ * exp_aggr.adb (Flatten): Small cleanup. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/exp_aggr.adb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)