diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9ccd866fdfd..9bde936ebc8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-09-13 Erik Edelmann + + PR fortran/17740 + * trans-expr.c (gfc_trans_arrayfunc_assign): Check value + of attr.elemental for specific function instead of generic name. + 2005-09-13 Richard Sandiford PR fortran/18899 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index fce8e7b614e..913f7e65919 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2573,7 +2573,8 @@ gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2) return NULL; /* Elemental functions don't need a temporary anyway. */ - if (expr2->symtree->n.sym->attr.elemental) + if (expr2->value.function.esym != NULL + && expr2->value.function.esym->attr.elemental) return NULL; /* Fail if EXPR1 can't be expressed as a descriptor. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c192765cdd8..512fccbe4eb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-09-13 Erik Edelmann + + PR fortran/17740 + * gfortran.dg/generic_4.f90: New test. + 2005-09-13 Bastian Blank PR c++/16171 diff --git a/gcc/testsuite/gfortran.dg/generic_4.f90 b/gcc/testsuite/gfortran.dg/generic_4.f90 new file mode 100644 index 00000000000..62bc569a21c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/generic_4.f90 @@ -0,0 +1,28 @@ +! { dg-do run } +! reduced testcase from PR 17740 +module FOO + + interface BAR + module procedure BAR2 + end interface + +contains + + elemental integer function BAR2(X) + integer, intent(in) :: X + BAR2 = X + end function + + subroutine BAZ(y,z) + integer :: Y(3), Z(3) + Z = BAR(Y) + end subroutine + +end module + +use foo +integer :: y(3), z(3) +y = (/1,2,3/) +call baz(y,z) +if (any (y /= z)) call abort () +end