From: Gary Dismukes Date: Mon, 20 Apr 2009 12:29:26 +0000 (+0200) Subject: exp_ch5.adb (Expand_Assign_Array): For the case where the assignment involves a targe... X-Git-Tag: releases/gcc-4.5.0~6363 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e9579b495d638798241fdc2e59de2b7b13d67e5;p=thirdparty%2Fgcc.git exp_ch5.adb (Expand_Assign_Array): For the case where the assignment involves a target that has a specified address... 2009-04-20 Gary Dismukes * 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 --- diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 6afcc6fb1b47..c77ff0595bf4 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;