aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2015-05-24 14:55:50 +0000
committerMikael Morin <mikael@gcc.gnu.org>2015-05-24 14:55:50 +0000
commitbc0c7f396b0c9648365aee462e25107db00227e8 (patch)
treec644ad2ddb4bd4d235ee54821e1e4f3eb62d84b9
parent70e7f2a2df3f167c71b1a84ffb865c9a8e2610e1 (diff)
downloadgcc-bc0c7f396b0c9648365aee462e25107db00227e8.zip
gcc-bc0c7f396b0c9648365aee462e25107db00227e8.tar.gz
gcc-bc0c7f396b0c9648365aee462e25107db00227e8.tar.bz2
re PR fortran/66257 (ELEMENTAL procedure pointer component XX is not allowed as an actual argument)
PR fortran/66257 gcc/fortran/ * resolve.c (resolve_actual_arglist): Don't throw an error if the argument with procedure pointer component is not a variable. gcc/testsuite/ * typebound_call_27.f90: New file. From-SVN: r223631
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_call_27.f9041
4 files changed, 54 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 420a99d..bc623c4 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2015-05-24 Mikael Morin <mikael@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-24 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR fortran/44054
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 492c016..e615cc6 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,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e302f01..41a478d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-05-24 Mikael Morin <mikael@gcc.gnu.org>
+
+ PR fortran/66257
+ * typebound_call_27.f90: New file.
+
2015-05-23 Nathan Sidwell <nathan@acm.org>
PR c++/65936
diff --git a/gcc/testsuite/gfortran.dg/typebound_call_27.f90 b/gcc/testsuite/gfortran.dg/typebound_call_27.f90
new file mode 100644
index 0000000..f183ebb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_call_27.f90
@@ -0,0 +1,41 @@
+! { 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