diff options
author | Tobias Burnus <burnus@gcc.gnu.org> | 2011-02-18 22:35:44 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2011-02-18 22:35:44 +0100 |
commit | 56ee2f5a356d5e0067cb233c759315b1f6fa51ff (patch) | |
tree | a6d48e0ab40d9ca539dea5cc470f0c583f2f348d /gcc/fortran | |
parent | eddabc80ca0e2fcdcf45fc55a9604145a46b857a (diff) | |
download | gcc-56ee2f5a356d5e0067cb233c759315b1f6fa51ff.zip gcc-56ee2f5a356d5e0067cb233c759315b1f6fa51ff.tar.gz gcc-56ee2f5a356d5e0067cb233c759315b1f6fa51ff.tar.bz2 |
2011-02-18 Tobias Burnus
PR fortran/47775
* trans-expr.c (arrayfunc_assign_needs_temporary): Use
esym to check whether the specific procedure returns an
allocatable or pointer.
2011-02-18 Tobias Burnus
PR fortran/47775
* gfortran.dg/func_result_6.f90: New.
From-SVN: r170289
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 10 |
2 files changed, 14 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c0b8d5a..2e9fc8c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2011-02-18 Tobias Burnus + + PR fortran/47775 + * trans-expr.c (arrayfunc_assign_needs_temporary): Use + esym to check whether the specific procedure returns an + allocatable or pointer. + 2011-02-18 Michael Matz <matz@suse.de> PR fortran/45586 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 3cf8df5..d6c1f9f 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -5392,9 +5392,13 @@ arrayfunc_assign_needs_temporary (gfc_expr * expr1, gfc_expr * expr2) if (gfc_ref_needs_temporary_p (expr1->ref)) return true; - /* Functions returning pointers need temporaries. */ - if (expr2->symtree->n.sym->attr.pointer - || expr2->symtree->n.sym->attr.allocatable) + /* Functions returning pointers or allocatables need temporaries. */ + c = expr2->value.function.esym + ? (expr2->value.function.esym->attr.pointer + || expr2->value.function.esym->attr.allocatable) + : (expr2->symtree->n.sym->attr.pointer + || expr2->symtree->n.sym->attr.allocatable); + if (c) return true; /* Character array functions need temporaries unless the |