summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-20 12:29:26 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-20 12:29:26 +0000
commite10874de526c7af280dd5b2e8b7a6f113e35535a (patch)
tree7e5037ea5a1eefc8570a202cb87e17e5ac79c97a
parent15df5c86cfed17349c64de62ba1075f885f56e96 (diff)
downloadppe42-gcc-e10874de526c7af280dd5b2e8b7a6f113e35535a.tar.gz
ppe42-gcc-e10874de526c7af280dd5b2e8b7a6f113e35535a.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146403 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ada/exp_ch5.adb8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index 6afcc6fb1b4..c77ff0595bf 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -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;
OpenPOWER on IntegriCloud