On Wed, Jan 14, 2015 at 1:15 PM, Eric Botcazou <ebotca...@adacore.com> wrote: > Hi, > > this is a follow-up to > https://gcc.gnu.org/ml/gcc-patches/2012-03/msg01890.html > where Martin was fixing an Ada bootstrap failure on SPARC64. After some > discussion between Martin, Richard B. and me, the initial proposal evolved > into a tweak to be applied to the existing call to set_mem_attributes in the > normal_inner_ref case of expand_expr_real_1, first to avoid it and eventually > to call it on the type instead of the expression. > > That was an oversight on my side, since the type is that of the expression and > not that of the value spilled onto the stack, so it may not always be seen as > having an alias set conflicting with that of the expression in Ada, e.g. if > the expression is a an ARRAY_REF of a VCE to an array with a non-aliased > component, see the attached testcase. So the patch reverts the change and > instead clears MEM_EXPR in the problematic case, as first proposed by Martin. > > Bootstrapped/regtested on x86_64-suse-linux, OK for mainline and 4.9 branch?
Ok. Thanks, Richard. > > 2015-01-14 Eric Botcazou <ebotca...@adacore.com> > > * expr.c (expand_expr_real_1) <normal_inner_ref>: Use the expression > to > set the memory attributes in all cases but clear MEM_EXPR if need be. > > > 2015-01-14 Eric Botcazou <ebotca...@adacore.com> > > * testsuite/gnat.dg/opt47.adb: New test. > > > -- > Eric Botcazou