re PR fortran/84313 ([F08] reject procedure pointers in COMMON blocks)
authorJanus Weil <janus@gcc.gnu.org>
Tue, 13 Feb 2018 21:00:37 +0000 (22:00 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Tue, 13 Feb 2018 21:00:37 +0000 (22:00 +0100)
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

gcc/fortran/ChangeLog
gcc/fortran/symbol.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/proc_ptr_common_1.f90
gcc/testsuite/gfortran.dg/proc_ptr_common_2.f90

index c3db796b7e801ff42c0c010926afd9cb2c9944b3..01e2a906443f1568d8fb084987f685f439082f5c 100644 (file)
@@ -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>
 
index 344c644bac927766a5f7b9e31949bbf02f543bf0..ce6b1e93644192a388a2bca1d21bf371e68ee02f 100644 (file)
@@ -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);
index 19c0832f2cd65438483113f91b3046deafb03a38..e0edbe57b56655ab7491651bf1399aba5b3fa1c7 100644 (file)
@@ -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
index df2ef0b79cc2e7477f6610c23e133ae6e986d66f..c6a4e6a367387285ea235b1ac0e77b21a7eb9743 100644 (file)
@@ -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
 
index f401c3a15c379d000681035ae2fc93b4e5ff6257..f49c0a3f86a93cc9f9432ab09bfa3f4d61b0e462 100644 (file)
@@ -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" }