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 <[email protected]>
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 <[email protected]>
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