From: Thomas Koenig Date: Sun, 17 Mar 2019 12:54:29 +0000 (+0000) Subject: re PR fortran/84394 (compiler error when using modules with derived types in block... X-Git-Tag: releases/gcc-7.5.0~533 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41557ae3d543f6f613201bdac7bb3f6dc8476e07;p=thirdparty%2Fgcc.git re PR fortran/84394 (compiler error when using modules with derived types in block data subprograms) 2019-03-17 Thomas Koenig PR fortran/84394 Backport from trunk * 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-17 Thomas Koenig PR fortran/84394 Backport from trunk * gfortran.dg/blockdata_11.f90: New test. From-SVN: r269741 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9c8df3a488ca..f2426344410c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2019-03-17 Thomas Koenig + + PR fortran/84394 + Backport from trunk + * 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 PR fortran/66089 diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index f3ab8af5ad3e..d42f2ed5bee9 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -1595,7 +1595,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 85a261b6d719..53aaf96cc17c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-03-17 Thomas Koenig + + PR fortran/84394 + Backport from trunk + * gfortran.dg/blockdata_11.f90: New test. + 2019-03-17 H.J. Lu Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/blockdata_11.f90 b/gcc/testsuite/gfortran.dg/blockdata_11.f90 new file mode 100644 index 000000000000..4aee18b7c7a6 --- /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 +