From: Erik Edelmann Date: Tue, 13 Sep 2005 21:46:04 +0000 (+0300) Subject: re PR fortran/17740 (ICE in gfc_trans_arrayfunc_assign, at fortran/trans-expr.c:2011) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c4abe01049ca7fc5d86d08f8c7a919db2b7f00b7;p=gcc.git re PR fortran/17740 (ICE in gfc_trans_arrayfunc_assign, at fortran/trans-expr.c:2011) 2005-09-13 Erik Edelmann fortran/ PR fortran/17740 * trans-expr.c (gfc_trans_arrayfunc_assign): Check value of attr.elemental for specific function instead of generic name. testsuite/ PR fortran/17740 * gfortran.dg/generic_4.f90: New test. From-SVN: r104240 --- 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