diff options
author | Erik Edelmann <erik.edelmann@iki.fi> | 2005-09-14 00:46:04 +0300 |
---|---|---|
committer | Tobias Schlüter <tobi@gcc.gnu.org> | 2005-09-13 23:46:04 +0200 |
commit | c4abe01049ca7fc5d86d08f8c7a919db2b7f00b7 (patch) | |
tree | 4d89ead8b7896517c25621bfc25e00ec034886c5 /gcc | |
parent | 282c3fdc47dafe3bead2991d54e8a31d409e119d (diff) | |
download | gcc-c4abe01049ca7fc5d86d08f8c7a919db2b7f00b7.zip gcc-c4abe01049ca7fc5d86d08f8c7a919db2b7f00b7.tar.gz gcc-c4abe01049ca7fc5d86d08f8c7a919db2b7f00b7.tar.bz2 |
re PR fortran/17740 (ICE in gfc_trans_arrayfunc_assign, at fortran/trans-expr.c:2011)
2005-09-13 Erik Edelmann <erik.edelmann@iki.fi>
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/generic_4.f90 | 28 |
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9ccd866..9bde936 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-09-13 Erik Edelmann <erik.edelmann@iki.fi> + + 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 <richard@codesourcery.com> PR fortran/18899 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index fce8e7b..913f7e6 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 c192765..512fccb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-09-13 Erik Edelmann <erik.edelmann@iki.fi> + + PR fortran/17740 + * gfortran.dg/generic_4.f90: New test. + 2005-09-13 Bastian Blank <waldi@debian.org> 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 0000000..62bc569 --- /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 |