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
This commit is contained in:
Thomas Koenig 2019-03-16 11:50:03 +00:00
parent 0759ca4a92
commit fbf1cec7a4
4 changed files with 55 additions and 2 deletions

View 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>

View 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;
}

View 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

View File

@ -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