diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-03-16 11:50:03 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-03-16 11:50:03 +0000 |
commit | fbf1cec7a4f6457161c1bfb3ba982e3f8190888e (patch) | |
tree | 16851a192bf714fbd289e34b793d69d5efb8ef05 /gcc | |
parent | 0759ca4a92e9e269c8001fb8023f0539a1b315fa (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/blockdata_11.f90 | 33 |
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 + |