re PR fortran/84394 (compiler error when using modules with derived types in block...
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 16 Mar 2019 11:50:03 +0000 (11:50 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 16 Mar 2019 11:50:03 +0000 (11:50 +0000)
2019-03-16  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/84394
* symbol.c (gfc_add_subroutine): If we are encountering a
subrtoutine within a BLOCK DATA and the name starts with an
underscore, do not check.

2019-03-16  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/84394
* gfortran.dg/blockdata_11.f90: New test.

From-SVN: r269721

gcc/fortran/ChangeLog
gcc/fortran/symbol.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/blockdata_11.f90 [new file with mode: 0644]

index 754bfebb81864c135630acb166c6648376c3a28b..614694a241f21be80e2c4cb405072716c44722d4 100644 (file)
@@ -1,3 +1,10 @@
+2019-03-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/84394
+       * symbol.c (gfc_add_subroutine): If we are encountering a
+       subrtoutine within a BLOCK DATA and the name starts with an
+       underscore, do not check.
+
 2019-03-15  Harald Anlauf  <anlauf@gmx.de>
 
        PR fortran/60091
@@ -7,7 +14,7 @@
 2019-03-14  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        * gfortran.texi: Document Q edit descriptor under
-       " Extensions not implemented in GNU Fortran".
+       "Extensions not implemented in GNU Fortran".
 
 2019-03-13  Harald Anlauf  <anlauf@gmx.de>
 
index 882a4f323f814e4040cc9dc611ac8e72027675fc..c342d62ead1b0ef59762c1b8cf8d1f51867078f1 100644 (file)
@@ -1689,7 +1689,15 @@ gfc_add_subroutine (symbol_attribute *attr, const char *name, locus *where)
     return false;
 
   attr->subroutine = 1;
-  return check_conflict (attr, name, where);
+
+  /* If we are looking at a BLOCK DATA statement and we encounter a
+     name with a leading underscore (which must be
+     compiler-generated), do not check. See PR 84394.  */
+
+  if (name && *name != '_' && gfc_current_state () != COMP_BLOCK_DATA)
+    return check_conflict (attr, name, where);
+  else
+    return true;
 }
 
 
index cad9617fc6ffd5e1a961f6f207aabff088253586..2d391aab5e6c93a98346db189786edeb5fbf8d15 100644 (file)
@@ -1,3 +1,8 @@
+2019-03-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/84394
+       * gfortran.dg/blockdata_11.f90: New test.
+
 2019-03-15  Harald Anlauf  <anlauf@gmx.de>
 
        PR fortran/60091
diff --git a/gcc/testsuite/gfortran.dg/blockdata_11.f90 b/gcc/testsuite/gfortran.dg/blockdata_11.f90
new file mode 100644 (file)
index 0000000..4aee18b
--- /dev/null
@@ -0,0 +1,33 @@
+! { dg-do run }
+! PR 84394 - this used to complain about private procedures in
+! BLOCK data.
+module mod1
+   implicit none
+   type :: type1
+      integer :: i1
+   end type type1
+end module
+
+module mod2
+   implicit none
+   contains
+      subroutine sub1
+         integer vals
+         common /block1/ vals(5)
+         if (any(vals /= [1, 2, 3, 4, 5])) stop 1
+      end subroutine
+end module
+
+block data blkdat
+  use mod1
+  integer vals
+  common /block1/ vals(5)
+  data vals/1, 2, 3, 4, 5/
+end block data blkdat
+
+program main
+  use mod2, only: sub1
+  implicit none
+  call sub1
+end program
+