aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2017-03-25 17:38:17 +0000
committerPaul Thomas <pault@gcc.gnu.org>2017-03-25 17:38:17 +0000
commit410366864025c2aa6ce1928d1737bc9cc4f752e6 (patch)
tree38bf17a45d44082c070cf7f7752af91231314254 /gcc
parent59ba44930fb9d8c1e1c6c3b6de9be7ab77933284 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/fortran/decl.c20
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gfortran.dg/dtio_23.f9043
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