Commit 41036686 by Paul Thomas

re PR fortran/80156 (Generic DTIO interface reported missing if public statement…

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
parent 59ba4493
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> 2017-03-22 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/79838 PR fortran/79838
......
...@@ -7570,23 +7570,15 @@ access_attr_decl (gfc_statement st) ...@@ -7570,23 +7570,15 @@ access_attr_decl (gfc_statement st)
case INTERFACE_GENERIC: case INTERFACE_GENERIC:
case INTERFACE_DTIO: 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)) if (gfc_get_symbol (name, NULL, &sym))
goto done; 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, if (!gfc_add_access (&sym->attr,
(st == ST_PUBLIC) (st == ST_PUBLIC)
? ACCESS_PUBLIC : ACCESS_PRIVATE, ? ACCESS_PUBLIC : ACCESS_PRIVATE,
......
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> 2017-03-25 Bernd Schmidt <bschmidt@redhat.com>
PR rtl-optimization/80160 PR rtl-optimization/80160
......
! { dg-do compile } ! { 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> ! Contributed by Walt Brainerd <walt.brainerd@gmail.com>
! and (PR80156) <pedsxing@gmx.net>
! !
module dollar_mod module dollar_mod
...@@ -16,7 +17,7 @@ module dollar_mod ...@@ -16,7 +17,7 @@ module dollar_mod
generic :: write(formatted) => Write_dollar generic :: write(formatted) => Write_dollar
end type dollar_type end type dollar_type
PRIVATE :: write (formatted) ! { dg-error "is not present" } PRIVATE :: write (formatted) ! This used to ICE
contains contains
...@@ -35,3 +36,41 @@ subroutine Write_dollar & ...@@ -35,3 +36,41 @@ subroutine Write_dollar &
end subroutine Write_dollar end subroutine Write_dollar
end module dollar_mod 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment