diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2017-03-25 17:38:17 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2017-03-25 17:38:17 +0000 |
commit | 410366864025c2aa6ce1928d1737bc9cc4f752e6 (patch) | |
tree | 38bf17a45d44082c070cf7f7752af91231314254 /gcc | |
parent | 59ba44930fb9d8c1e1c6c3b6de9be7ab77933284 (diff) | |
download | gcc-410366864025c2aa6ce1928d1737bc9cc4f752e6.zip gcc-410366864025c2aa6ce1928d1737bc9cc4f752e6.tar.gz gcc-410366864025c2aa6ce1928d1737bc9cc4f752e6.tar.bz2 |
re PR fortran/80156 (Generic DTIO interface reported missing if public statement preceeds the interface block)
2017-03-25 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80156
PR fortran/79382
* decl.c (access_attr_decl): Remove the error for an absent
generic DTIO interface and ensure that symbol has the flavor
FL_PROCEDURE.
2017-03-25 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80156
PR fortran/79382
* gfortran.dg/dtio_23.f90 : Remove the dg-error and add the
testcase for PR80156. Add a main programme that tests that
the typebound generic is accessible.
From-SVN: r246476
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/dtio_23.f90 | 43 |
4 files changed, 63 insertions, 16 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 344798d..20ad857 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2017-03-25 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/80156 + PR fortran/79382 + * decl.c (access_attr_decl): Remove the error for an absent + generic DTIO interface and ensure that symbol has the flavor + FL_PROCEDURE. + 2017-03-22 Dominique d'Humieres <dominiq@lps.ens.fr> PR fortran/79838 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index a04f5a6..5ca664e 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -7570,23 +7570,15 @@ access_attr_decl (gfc_statement st) case INTERFACE_GENERIC: case INTERFACE_DTIO: - if (type == INTERFACE_DTIO - && gfc_current_ns->proc_name - && gfc_current_ns->proc_name->attr.flavor == FL_MODULE) - { - gfc_find_symbol (name, gfc_current_ns, 0, &sym); - if (sym == NULL) - { - gfc_error ("The GENERIC DTIO INTERFACE at %C is not " - "present in the MODULE %qs", - gfc_current_ns->proc_name->name); - return MATCH_ERROR; - } - } - if (gfc_get_symbol (name, NULL, &sym)) goto done; + if (type == INTERFACE_DTIO + && gfc_current_ns->proc_name + && gfc_current_ns->proc_name->attr.flavor == FL_MODULE + && sym->attr.flavor == FL_UNKNOWN) + sym->attr.flavor = FL_PROCEDURE; + if (!gfc_add_access (&sym->attr, (st == ST_PUBLIC) ? ACCESS_PUBLIC : ACCESS_PRIVATE, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 36a082a..8306a1c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2017-03-25 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/80156 + PR fortran/79382 + * gfortran.dg/dtio_23.f90 : Remove the dg-error and add the + testcase for PR80156. Add a main programme that tests that + the typebound generic is accessible. + 2017-03-25 Bernd Schmidt <bschmidt@redhat.com> PR rtl-optimization/80160 diff --git a/gcc/testsuite/gfortran.dg/dtio_23.f90 b/gcc/testsuite/gfortran.dg/dtio_23.f90 index 4ebddbb..bee9acb 100644 --- a/gcc/testsuite/gfortran.dg/dtio_23.f90 +++ b/gcc/testsuite/gfortran.dg/dtio_23.f90 @@ -1,8 +1,9 @@ ! { dg-do compile } ! -! Test fix for the original in PR79832. +! Test fix for the original in PR793822 and for PR80156. ! ! Contributed by Walt Brainerd <walt.brainerd@gmail.com> +! and (PR80156) <pedsxing@gmx.net> ! module dollar_mod @@ -16,7 +17,7 @@ module dollar_mod generic :: write(formatted) => Write_dollar end type dollar_type - PRIVATE :: write (formatted) ! { dg-error "is not present" } + PRIVATE :: write (formatted) ! This used to ICE contains @@ -35,3 +36,41 @@ subroutine Write_dollar & end subroutine Write_dollar end module dollar_mod + +module pr80156 + + implicit none + private + + type, public :: String + character(len=:), allocatable :: raw + end type + + public :: write(unformatted) ! Gave an error due to the first fix for PR79382. + interface write(unformatted) + module procedure writeUnformatted + end interface + +contains + + subroutine writeUnformatted(self, unit, iostat, iomsg) + class(String) , intent(in) :: self + integer , intent(in) :: unit + integer , intent(out) :: iostat + character(len=*), intent(inout) :: iomsg + + if (allocated(self%raw)) then + write (unit, iostat=iostat, iomsg=iomsg) self%raw + else + write (unit, iostat=iostat, iomsg=iomsg) '' + endif + + end subroutine + +end module + + use dollar_mod + type(dollar_type) :: money + money = dollar_type(50.0) + print '(DT)', money ! Make sure that the typebound generic is accessible. +end |