aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2019-03-09 19:25:39 +0100
committerJanus Weil <janus@gcc.gnu.org>2019-03-09 19:25:39 +0100
commitb5c26787c4e5d7b13df865edb7439a875c844cfe (patch)
treebb7b738abf18de19e93ab1391d37290da0a09f1e /gcc
parent660de2bae3b7a301fc19ef877d94ce0a86eaf72b (diff)
downloadgcc-b5c26787c4e5d7b13df865edb7439a875c844cfe.zip
gcc-b5c26787c4e5d7b13df865edb7439a875c844cfe.tar.gz
gcc-b5c26787c4e5d7b13df865edb7439a875c844cfe.tar.bz2
re PR fortran/84504 ([F08] procedure pointer variables cannot be initialized with functions returning pointers)
fix PR 84504 2019-03-09 Janus Weil <janus@gcc.gnu.org> PR fortran/84504 * expr.c (gfc_check_assign_symbol): Deal with procedure pointers to pointer-valued functions. 2019-03-09 Janus Weil <janus@gcc.gnu.org> PR fortran/84504 * gfortran.dg/pointer_init_10.f90: New test case. From-SVN: r269529
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/expr.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pointer_init_10.f9024
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 48ab06b..40b3a32 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2019-03-09 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/84504
+ * expr.c (gfc_check_assign_symbol): Deal with procedure pointers to
+ pointer-valued functions.
+
2019-03-09 Thomas König <tkoenig@gcc.gnu.org>
PR fortran/71203
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 51552a7..4e95f24 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -4321,7 +4321,7 @@ gfc_check_assign_symbol (gfc_symbol *sym, gfc_component *comp, gfc_expr *rvalue)
if (!r)
return r;
- if (pointer && rvalue->expr_type != EXPR_NULL)
+ if (pointer && rvalue->expr_type != EXPR_NULL && !proc_pointer)
{
/* F08:C461. Additional checks for pointer initialization. */
symbol_attribute attr;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 003fe1c..a2eec5e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-03-09 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/84504
+ * gfortran.dg/pointer_init_10.f90: New test case.
+
2019-03-09 John David Anglin <dave.anglin@bell.net>
* gfortran.dg/ieee/ieee_9.f90: Fix typo.
diff --git a/gcc/testsuite/gfortran.dg/pointer_init_10.f90 b/gcc/testsuite/gfortran.dg/pointer_init_10.f90
new file mode 100644
index 0000000..81e7d73
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pointer_init_10.f90
@@ -0,0 +1,24 @@
+! { dg-do run }
+!
+! PR 84504: [F08] procedure pointer variables cannot be initialized with functions returning pointers
+!
+! Contributed by Sriram Swaminarayan <sriram@pobox.com>
+
+module test_mod
+ implicit none
+ private
+ integer, target :: i = 333
+ procedure(the_proc), pointer, public :: ptr => the_proc
+contains
+ function the_proc()
+ integer, pointer :: the_proc
+ the_proc => i
+ end function
+end module
+
+program test_prog
+ use test_mod
+ integer, pointer :: ip
+ ip => ptr()
+ if (ip /= 333) stop 1
+end