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

Reply via email to