[Bug fortran/77532] ICE in check_dtio_interface1, at fortran/interface.c:4622
gerhard.steinmetz.fortran@t-online.de
gcc-bugzilla@gcc.gnu.org
Tue Sep 13 18:53:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77532
Gerhard Steinmetz <gerhard.steinmetz.fortran@t-online.de> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
Resolution|FIXED |---
--- Comment #5 from Gerhard Steinmetz <gerhard.steinmetz.fortran@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
More information about the Gcc-bugs
mailing list