Dear Paul, The patch works as advertised! I have two remarks:
(1) AFAIU there is no need for a temporary for PROGRAM Main INTEGER :: i, index(5) = (/ (i, i = 1,5) /) REAL :: tmp(5), array(5) = (/ (i+0.0, i = 1,5) /) tmp = Fred(index,array) array = tmp PRINT *, array CONTAINS ELEMENTAL FUNCTION Fred (n, x) REAL :: Fred INTEGER, INTENT(IN) :: n REAL, INTENT(IN) :: x ! In general, this would be in an external procedure Fred = x+SUM(array(:n-1))+SUM(array(n+1:)) END FUNCTION Fred END PROGRAM Main However I get [Book15] f90/bug% gfc elemental_weird_db_2.f90 -Warray-temporaries elemental_weird_db_2.f90:4:10: tmp = Fred(index,array) 1 Warning: Creating array temporary at (1) [-Warray-temporaries] (2) You wrote: « However, this works and has no perceivable effect on Polyhedron timings. ». This is hardly a surprise since the Polyhedron tests don’t use any elemental procedure. Thanks, Dominique > Le 10 févr. 2015 à 23:35, Paul Richard Thomas <paul.richard.tho...@gmail.com> > a écrit : > > Dear Mikael, dear all, > > Thank you for the previous review. I believe that the attached > responds to all of your comments and correctly compiles the three > testcases that you provided. Two of these have been included in the > original testcase and the third appears separately. > > Bootstrapped and reg > tested on FC21/x86_64 - OK for trunk? > > Cheers > > Paul > > 2015-02-10 Paul Thomas <pa...@gcc.gnu.org> > > PR fortran/64952 > * gfortran.h : Add 'array_outer_dependency' to symbol_attr. > * trans.h : Add 'array_outer_dependency' to gfc_ss_info. > * module.c : Add AB_ARRAY_OUTER_DEPENDENCY to ab_attribute. > Add same to attr_bits. > (mio_symbol_attribute): Handle 'array_outer_dependency' attr > in module read and write. > * resolve.c (resolve_function): If an elemental function is > referenced that is marked as having an external array reference > and the current namespace is that of an elemental function, > mark the containing function likewise. > (resolve_variable): Mark elemental function symbol > as 'array_outer_dependency' if it has an array reference from > outside its own namespace. > * trans-array.c (gfc_conv_resolve_dependencies): If any ss is > marked as 'array_outer_dependency' generate a temporary. > (gfc_walk_function_expr): If the function is marked as > 'array_outer_dependency', likewise mark the head gfc_ss. > > 2015-02-10 Paul Thomas <pa...@gcc.gnu.org> > > PR fortran/64952 > * gfortran.dg/elemental_dependency_4.f90: New test > * gfortran.dg/elemental_dependency_5.f90: New test