aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2011-01-18 23:40:33 +0100
committerJanus Weil <janus@gcc.gnu.org>2011-01-18 23:40:33 +0100
commit2d300fac7d9aaaa9f5cb63a44b3cfc130895324d (patch)
treeebece8ac1cfec95a7fefd3af146ad3257b95f006 /gcc/fortran/resolve.c
parentd2cd871faaa370e18d71e26bc92e25034bcbc05c (diff)
downloadgcc-2d300fac7d9aaaa9f5cb63a44b3cfc130895324d.zip
gcc-2d300fac7d9aaaa9f5cb63a44b3cfc130895324d.tar.gz
gcc-2d300fac7d9aaaa9f5cb63a44b3cfc130895324d.tar.bz2
re PR fortran/47240 ([F03] segfault with procedure pointer component)
2011-01-18 Janus Weil <janus@gcc.gnu.org> PR fortran/47240 * resolve.c (expression_rank): Fix rank of procedure poiner components. * trans-expr.c (gfc_conv_procedure_call): Take care of procedure pointer components as actual arguments. 2011-01-18 Janus Weil <janus@gcc.gnu.org> PR fortran/47240 * gfortran.dg/proc_ptr_comp_29.f90: New. From-SVN: r168973
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index ed39e78..f2e7223 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -4863,6 +4863,10 @@ expression_rank (gfc_expr *e)
for (ref = e->ref; ref; ref = ref->next)
{
+ if (ref->type == REF_COMPONENT && ref->u.c.component->attr.proc_pointer
+ && ref->u.c.component->attr.function && !ref->next)
+ rank = ref->u.c.component->as ? ref->u.c.component->as->rank : 0;
+
if (ref->type != REF_ARRAY)
continue;