diff options
author | José Rui Faustino de Sousa <jrfsousa@gmail.com> | 2021-04-28 11:20:25 +0000 |
---|---|---|
committer | José Rui Faustino de Sousa <jrfsousa@gmail.com> | 2021-04-28 11:20:25 +0000 |
commit | b020cee5af4cb40b9971bfb943d7bd2795b2a3eb (patch) | |
tree | 48d6bd53ac6db605935d1f01f665a7f3cccb1242 /gcc/fortran/trans-expr.c | |
parent | ea3d2e3c164cb4a32f5c82aa49693de260db3501 (diff) | |
download | gcc-b020cee5af4cb40b9971bfb943d7bd2795b2a3eb.zip gcc-b020cee5af4cb40b9971bfb943d7bd2795b2a3eb.tar.gz gcc-b020cee5af4cb40b9971bfb943d7bd2795b2a3eb.tar.bz2 |
Fortran: Fix double function call with -fcheck=pointer [PR]
gcc/fortran/ChangeLog:
PR fortran/82376
* trans-expr.c (gfc_conv_procedure_call): Evaluate function result
and then pass a pointer.
gcc/testsuite/ChangeLog:
PR fortran/82376
* gfortran.dg/PR82376.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r-- | gcc/fortran/trans-expr.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 213f32b..b83b021 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -6014,11 +6014,8 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, || (!e->value.function.esym && e->symtree->n.sym->attr.pointer)) && fsym && fsym->attr.target) - { - gfc_conv_expr (&parmse, e); - parmse.expr = gfc_build_addr_expr (NULL_TREE, parmse.expr); - } - + /* Make sure the function only gets called once. */ + gfc_conv_expr_reference (&parmse, e, false); else if (e->expr_type == EXPR_FUNCTION && e->symtree->n.sym->result && e->symtree->n.sym->result != e->symtree->n.sym |