https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77532
Gerhard Steinmetz <gerhard.steinmetz.fort...@t-online.de> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|FIXED |--- --- Comment #5 from Gerhard Steinmetz <gerhard.steinmetz.fort...@t-online.de> --- Thank you very much for working on these issues. Additional tests with an improved version from 20160911 revealed a few other errors, as bespoken attached hereto : $ cat za1.f90 module m type t end type interface write(formatted) module procedure s end interface contains subroutine s(dtv,unit,iotype,vlist,extra,iostat,iomsg) class(t), intent(in) :: dtv integer, intent(in) :: unit character(len=*), intent(in) :: iotype integer, intent(in) :: vlist(:) integer, intent(out) :: iostat character(len=*), intent(inout) :: iomsg end end $ cat za2.f90 module m type t end type interface read(formatted) module procedure s end interface contains subroutine s(dtv,unit,iotype,vlist,iostat,iomsg,extra) class(t), intent(inout) :: dtv integer, intent(in) :: unit character(len=*), intent(in) :: iotype integer, intent(in) :: vlist(:) integer, intent(out) :: iostat character(len=*), intent(inout) :: iomsg end end $ cat za3.f90 module m type t end type interface read(formatted) module procedure s end interface contains subroutine s(dtv,extra,unit,iotype,vlist,iostat,iomsg) class(t), intent(inout) :: dtv integer, intent(in) :: unit character(len=*), intent(in) :: iotype integer, intent(in) :: vlist(:) integer, intent(out) :: iostat character(len=*), intent(inout) :: iomsg end end $ gfortran-7-20160911 za1.f90 za1.f90:8:43: subroutine s(dtv,unit,iotype,vlist,extra,iostat,iomsg) 1 Error: DTIO dummy argument at (1) must be of type INTEGER za1.f90:8:50: subroutine s(dtv,unit,iotype,vlist,extra,iostat,iomsg) 1 Error: DTIO dummy argument at (1) must be of type CHARACTER f951: internal compiler error: in check_dtio_interface1, at fortran/interface.c:4707 0x692c19 check_dtio_interface1 ../../gcc/fortran/interface.c:4707 0x69a348 gfc_check_dtio_interfaces(gfc_symbol*) ../../gcc/fortran/interface.c:4747 0x70c86b do_traverse_symtree ../../gcc/fortran/symbol.c:3939 0x6f65c0 resolve_types ../../gcc/fortran/resolve.c:15658 0x6f1d9c gfc_resolve(gfc_namespace*) ../../gcc/fortran/resolve.c:15730 0x6dd3a4 gfc_parse_file() ../../gcc/fortran/parse.c:6056 0x71f5f2 gfc_be_parse_file ../../gcc/fortran/f95-lang.c:198 --- $ cat zb1.f90 module m type t end type interface write(unformatted) module procedure s end interface contains subroutine s(*) end end $ gfortran-7-20160911 zb1.f90 f951: internal compiler error: Segmentation fault 0xc2154f crash_signal ../../gcc/toplev.c:336 0x692c73 check_dtio_interface1 ../../gcc/fortran/interface.c:4633 0x69a348 gfc_check_dtio_interfaces(gfc_symbol*) ../../gcc/fortran/interface.c:4747 0x70c86b do_traverse_symtree ../../gcc/fortran/symbol.c:3939 0x6f65c0 resolve_types ../../gcc/fortran/resolve.c:15658 0x6f1d9c gfc_resolve(gfc_namespace*) ../../gcc/fortran/resolve.c:15730 0x6dd3a4 gfc_parse_file() ../../gcc/fortran/parse.c:6056 0x71f5f2 gfc_be_parse_file ../../gcc/fortran/f95-lang.c:198 --- $ cat zc1.f90 module m type t contains procedure :: s generic :: write(unformatted) => s end type contains subroutine s(dtv, *) class(t), intent(out) :: dtv end end $ gfortran-7-20160911 zc1.f90 zc1.f90:8:19: subroutine s(dtv, *) 1 Error: DTIO dummy argument at (1) must have intent IN f951: internal compiler error: Segmentation fault 0xc2154f crash_signal ../../gcc/toplev.c:336 0x69290d check_dtio_arg_TKR_intent ../../gcc/fortran/interface.c:4561 0x692b4a check_dtio_interface1 ../../gcc/fortran/interface.c:4676 0x69a303 gfc_check_dtio_interfaces(gfc_symbol*) ../../gcc/fortran/interface.c:4735 0x70c86b do_traverse_symtree ../../gcc/fortran/symbol.c:3939 0x6f65c0 resolve_types ../../gcc/fortran/resolve.c:15658 0x6f1d9c gfc_resolve(gfc_namespace*) ../../gcc/fortran/resolve.c:15730 0x6dd3a4 gfc_parse_file() ../../gcc/fortran/parse.c:6056 0x71f5f2 gfc_be_parse_file ../../gcc/fortran/f95-lang.c:198 --- $ cat zd1.f90 module m type t character(len=20) :: name integer(4) :: age contains procedure :: pruf generic :: read(unformatted) => pruf end type contains subroutine pruf (dtv,unit,iostat,iomsg) class(t), intent(inout) :: dtv integer, intent(in) :: unit integer, intent(out) :: iostat character(len=*), intent(inout) :: iomsg write (unit=unit, iostat=iostat, iomsg=iomsg) dtv%name, dtv%age end end program test use m character(3) :: a, b class(t) :: chairman open (unit=71, file='myunformatted_data.dat', form='unformatted') read (71) a, chairman, b close (unit=71) end $ gfortran-7-20160911 zd1.f90 zd1.f90:21:23: class(t) :: chairman 1 Error: CLASS variable 'chairman' at (1) must be dummy, allocatable or pointer f951: internal compiler error: Segmentation fault 0xc2154f crash_signal ../../gcc/toplev.c:336 0x69a490 gfc_find_specific_dtio_proc(gfc_symbol*, bool, bool) ../../gcc/fortran/interface.c:4834 0x6f057c resolve_transfer ../../gcc/fortran/resolve.c:8716 0x6f057c gfc_resolve_code(gfc_code*, gfc_namespace*) ../../gcc/fortran/resolve.c:10850 0x6ef027 gfc_resolve_blocks(gfc_code*, gfc_namespace*) ../../gcc/fortran/resolve.c:9594 0x6ef46e gfc_resolve_code(gfc_code*, gfc_namespace*) ../../gcc/fortran/resolve.c:10533 0x6f1cb2 resolve_codes ../../gcc/fortran/resolve.c:15697 0x6f1dae gfc_resolve(gfc_namespace*) ../../gcc/fortran/resolve.c:15732 0x6dce7a resolve_all_program_units ../../gcc/fortran/parse.c:5850 0x6dce7a gfc_parse_file() ../../gcc/fortran/parse.c:6102 0x71f5f2 gfc_be_parse_file ../../gcc/fortran/f95-lang.c:198