]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
exp_ch5.adb (Expand_Assign_Array): For the case where the assignment involves a targe...
authorGary Dismukes <dismukes@adacore.com>
Mon, 20 Apr 2009 12:29:26 +0000 (14:29 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 20 Apr 2009 12:29:26 +0000 (14:29 +0200)
2009-04-20  Gary Dismukes  <dismukes@adacore.com>

* exp_ch5.adb (Expand_Assign_Array): For the case where the assignment
involves a target that has a specified address, don't set Forward_OK
and Backward_OK to False if the rhs is an aggregate, since overlap
can't occur.

From-SVN: r146403

gcc/ada/exp_ch5.adb

index 6afcc6fb1b47895cf86826a4835c97ea8bce0896..c77ff0595bf4e745ea6fd415ab8f4dab02095ed3 100644 (file)
@@ -309,9 +309,13 @@ package body Exp_Ch5 is
       end if;
 
       --  If either operand has an address clause clear Backwards_OK and
-      --  Forwards_OK, since we cannot tell if the operands overlap.
+      --  Forwards_OK, since we cannot tell if the operands overlap. We
+      --  exclude this treatment when Rhs is an aggregate, since we know
+      --  that overlap can't occur.
 
-      if Has_Address_Clause (Lhs) or else Has_Address_Clause (Rhs) then
+      if (Has_Address_Clause (Lhs) and then Nkind (Rhs) /= N_Aggregate)
+        or else Has_Address_Clause (Rhs)
+      then
          Set_Forwards_OK  (N, False);
          Set_Backwards_OK (N, False);
       end if;