aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2019-03-16 11:50:03 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2019-03-16 11:50:03 +0000
commitfbf1cec7a4f6457161c1bfb3ba982e3f8190888e (patch)
tree16851a192bf714fbd289e34b793d69d5efb8ef05 /gcc
parent0759ca4a92e9e269c8001fb8023f0539a1b315fa (diff)
downloadgcc-fbf1cec7a4f6457161c1bfb3ba982e3f8190888e.zip
gcc-fbf1cec7a4f6457161c1bfb3ba982e3f8190888e.tar.gz
gcc-fbf1cec7a4f6457161c1bfb3ba982e3f8190888e.tar.bz2
re PR fortran/84394 (compiler error when using modules with derived types in block data subprograms)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/symbol.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/blockdata_11.f9033
4 files changed, 55 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 754bfeb..614694a 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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>
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 882a4f3..c342d62 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -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;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cad9617..2d391aa 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..4aee18b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/blockdata_11.f90
@@ -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
+