summaryrefslogtreecommitdiffstats
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>2009-11-18 13:24:54 +0000
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>2009-11-18 13:24:54 +0000
commit19b7a51ee94ca58ab1f8c58ccc1cc6f390c3c377 (patch)
treee7481856097ba3bd34a1792c5acf2dbc4954abcf /gcc/fortran/trans-expr.c
parent63aab97df901f60f2e854e6ad3e7e47fd72e74ae (diff)
downloadppe42-gcc-19b7a51ee94ca58ab1f8c58ccc1cc6f390c3c377.tar.gz
ppe42-gcc-19b7a51ee94ca58ab1f8c58ccc1cc6f390c3c377.zip
2009-11-18 Janus Weil <janus@gcc.gnu.org>
PR fortran/42072 * trans-expr.c (gfc_conv_procedure_call): Handle procedure pointer dummies which are passed to C_F_PROCPOINTER. 2009-11-18 Janus Weil <janus@gcc.gnu.org> PR fortran/42072 * gfortran.dg/proc_ptr_8.f90: Extended. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154292 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 5a45f4f6368..b72d5401bae 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -2640,13 +2640,16 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
gfc_conv_expr (&fptrse, arg->next->expr);
gfc_add_block_to_block (&se->pre, &fptrse.pre);
gfc_add_block_to_block (&se->post, &fptrse.post);
-
- if (gfc_is_proc_ptr_comp (arg->next->expr, NULL))
- tmp = gfc_get_ppc_type (arg->next->expr->ref->u.c.component);
- else
- tmp = TREE_TYPE (arg->next->expr->symtree->n.sym->backend_decl);
- se->expr = fold_build2 (MODIFY_EXPR, tmp, fptrse.expr,
- fold_convert (tmp, cptrse.expr));
+
+ if (arg->next->expr->symtree->n.sym->attr.proc_pointer
+ && arg->next->expr->symtree->n.sym->attr.dummy)
+ fptrse.expr = build_fold_indirect_ref_loc (input_location,
+ fptrse.expr);
+
+ se->expr = fold_build2 (MODIFY_EXPR, TREE_TYPE (fptrse.expr),
+ fptrse.expr,
+ fold_convert (TREE_TYPE (fptrse.expr),
+ cptrse.expr));
return 0;
}
OpenPOWER on IntegriCloud