aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2018-02-13 22:00:37 +0100
committerJanus Weil <janus@gcc.gnu.org>2018-02-13 22:00:37 +0100
commit4155fafc7f43234fc0c819a6f9c6ebaffc59e8cc (patch)
tree221a1a3a1320044c8689784823a45472446ec0e4 /gcc
parent201d17c0d835112bdea5408e6eff4e250f3c238a (diff)
downloadgcc-4155fafc7f43234fc0c819a6f9c6ebaffc59e8cc.zip
gcc-4155fafc7f43234fc0c819a6f9c6ebaffc59e8cc.tar.gz
gcc-4155fafc7f43234fc0c819a6f9c6ebaffc59e8cc.tar.bz2
re PR fortran/84313 ([F08] reject procedure pointers in COMMON blocks)
2018-02-13 Janus Weil <janus@gcc.gnu.org> PR fortran/84313 * symbol.c (check_conflict): Reject procedure pointers in common blocks. 2018-02-13 Janus Weil <janus@gcc.gnu.org> PR fortran/84313 * gfortran.dg/proc_ptr_common_1.f90: Fix invalid test case, add necessary compiler options. * gfortran.dg/proc_ptr_common_2.f90: Add missing error message. From-SVN: r257636
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/symbol.c4
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_common_1.f906
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_common_2.f902
5 files changed, 20 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c3db796..01e2a90 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2018-02-13 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/84313
+ * symbol.c (check_conflict): Reject procedure pointers in common blocks.
+
2018-02-13 Alastair McKinstry <alastair.mckinstry@sceal.ie>
Janne Blomqvist <jb@gcc.gnu.org>
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 344c644..ce6b1e9 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -809,7 +809,9 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
conf2 (threadprivate);
}
- if (!attr->proc_pointer)
+ /* Procedure pointers in COMMON blocks are allowed in F03,
+ * but forbidden per F08:C5100. */
+ if (!attr->proc_pointer || (gfc_option.allow_std & GFC_STD_F2008))
conf2 (in_common);
conf2 (omp_declare_target_link);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 19c0832..e0edbe5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2018-02-13 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/84313
+ * gfortran.dg/proc_ptr_common_1.f90: Fix invalid test case,
+ add necessary compiler options.
+ * gfortran.dg/proc_ptr_common_2.f90: Add missing error message.
+
2018-02-13 Jakub Jelinek <jakub@redhat.com>
PR c/82210
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_common_1.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_common_1.f90
index df2ef0b..c6a4e6a 100644
--- a/gcc/testsuite/gfortran.dg/proc_ptr_common_1.f90
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_common_1.f90
@@ -1,16 +1,18 @@
! { dg-do run }
-
+! { dg-options "-std=f2003 -fall-intrinsics" }
+!
! PR fortran/36592
!
! Procedure Pointers inside COMMON blocks.
+! (Allowed in F03, but forbidden in F08.)
!
! Contributed by Janus Weil <janus@gcc.gnu.org>.
subroutine one()
implicit none
- common /com/ p1,p2,a,b
procedure(real), pointer :: p1,p2
integer :: a,b
+ common /com/ p1,p2,a,b
if (a/=5 .or. b/=-9 .or. p1(0.0)/=1.0 .or. p2(0.0)/=0.0) call abort()
end subroutine one
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_common_2.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_common_2.f90
index f401c3a..f49c0a3 100644
--- a/gcc/testsuite/gfortran.dg/proc_ptr_common_2.f90
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_common_2.f90
@@ -12,7 +12,7 @@ abstract interface
end interface
procedure(foo), pointer, bind(C) :: proc
-common /com/ proc,r
+common /com/ proc,r ! { dg-error "PROCEDURE attribute conflicts with COMMON attribute" }
common s
call s() ! { dg-error "PROCEDURE attribute conflicts with COMMON attribute" }