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
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;