From: Janus Weil Date: Fri, 19 Jun 2009 08:11:21 +0000 (+0200) Subject: re PR fortran/40450 ([F03] procedure pointer as actual argument) X-Git-Tag: releases/gcc-4.5.0~5120 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7e9c61e83e48581f9808b3796f474094aa58e3ce;p=thirdparty%2Fgcc.git re PR fortran/40450 ([F03] procedure pointer as actual argument) 2009-06-19 Janus Weil PR fortran/40450 * trans-expr.c (gfc_conv_procedure_call): Only add an extra addr_expr to a procedure pointer actual argument, if it is not itself a dummy arg. 2009-06-19 Janus Weil PR fortran/40450 * gfortran.dg/proc_ptr_20.f90: New. From-SVN: r148690 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d6a608285b92..d3d140bd50bb 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2009-06-19 Janus Weil + + PR fortran/40450 + * trans-expr.c (gfc_conv_procedure_call): Only add an extra addr_expr + to a procedure pointer actual argument, if it is not itself a + dummy arg. + 2009-06-18 Janus Weil PR fortran/40451 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index a4d00df7fa71..765c04f57c53 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2646,7 +2646,9 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, if (fsym && e->expr_type != EXPR_NULL && ((fsym->attr.pointer && fsym->attr.flavor != FL_PROCEDURE) - || fsym->attr.proc_pointer)) + || (fsym->attr.proc_pointer + && !(e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.dummy)))) { /* Scalar pointer dummy args require an extra level of indirection. The null pointer already contains diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 540f408f78b4..7ddc7581ca5e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-06-19 Janus Weil + + PR fortran/40450 + * gfortran.dg/proc_ptr_20.f90: New. + 2009-06-18 H.J. Lu PR target/40470 diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_20.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_20.f90 new file mode 100644 index 000000000000..79c9ba8f1ecf --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_20.f90 @@ -0,0 +1,42 @@ +! { dg-do run } +! +! PR 40450: [F03] procedure pointer as actual argument +! +! Contributed by John McFarland + +MODULE m + ABSTRACT INTERFACE + SUBROUTINE sub() + END SUBROUTINE sub + END INTERFACE + +CONTAINS + + SUBROUTINE passf(f2) + PROCEDURE(sub), POINTER:: f2 + CALL callf(f2) + END SUBROUTINE passf + + SUBROUTINE callf(f3) + PROCEDURE(sub), POINTER :: f3 + PRINT*, 'calling f' + CALL f3() + END SUBROUTINE callf +END MODULE m + + +PROGRAM prog + USE m + PROCEDURE(sub), POINTER :: f1 + f1 => s + CALL passf(f1) + +CONTAINS + + SUBROUTINE s + PRINT*, 'sub' + END SUBROUTINE s +END PROGRAM prog + +! { dg-final { cleanup-modules "m" } } +