Hello, For PR 63727, a check was introduced, rejecting procedure pointer components used as actual arguments: foo(obj%proc_comp) but it had the side effect of also rejecting foo(obj%proc_comp(arg))
Fixed by the attached patch. Tested on x86_64-linux. OK for 6/5 ? Mikael
2015-05-23 Mikael Morin <mik...@gcc.gnu.org> PR fortran/66257 * resolve.c (resolve_actual_arglist): Don't throw an error if the argument with procedure pointer component is not a variable. 2015-05-23 Mikael Morin <mik...@gcc.gnu.org> PR fortran/66257 * typebound_call_27.f90: New file. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index fbf260f..a46ab60 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -1981,7 +1981,8 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype, } comp = gfc_get_proc_ptr_comp(e); - if (comp && comp->attr.elemental) + if (e->expr_type == EXPR_VARIABLE + && comp && comp->attr.elemental) { gfc_error ("ELEMENTAL procedure pointer component %qs is not " "allowed as an actual argument at %L", comp->name,
! { dg-do compile } ! ! PR fortran/66257 ! Check that typebound function calls are accepted as actual argument. ! MODULE test_class IMPLICIT NONE PRIVATE PUBLIC:: test INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15) TYPE test PRIVATE CONTAINS PRIVATE PROCEDURE, PUBLIC:: E PROCEDURE, PUBLIC:: Om END TYPE test CONTAINS ELEMENTAL FUNCTION E (self, a) IMPLICIT NONE CLASS(test), INTENT(IN):: self REAL(kind=dp), INTENT(IN):: a REAL(kind=dp):: E E = a END FUNCTION E ELEMENTAL FUNCTION Om (self, z) IMPLICIT NONE CLASS(test), INTENT(IN):: self REAL(kind=dp), INTENT(IN):: z REAL(kind=dp):: Om Om = self%E(self%E(z)) Om = log10(self%E(z)) END FUNCTION Om END MODULE test_class