With incomplete or invalid dummy argument lists : $ cat z1.f90 module m type t contains procedure :: s1 procedure :: s2 generic :: write(formatted) => s1 generic :: write(formatted) => s2 end type contains subroutine s1 (dtv) class(t), intent(in) :: dtv end subroutine s2 (dtv, unit) class(t), intent(in) :: dtv integer, intent(in) :: unit end end $ cat z2.f90 module m type t contains procedure :: s1 procedure :: s2 generic :: write(formatted) => s1 generic :: write(formatted) => s2 end type contains subroutine s1 (dtv, iomsg) class(t), intent(in) :: dtv character(*), intent(inout) :: iomsg end subroutine s2 (dtv, unit) class(t), intent(in) :: dtv integer, intent(in) :: unit end end $ gfortran-9-20180527 -c z1.f90 f951: internal compiler error: in check_dtio_interface1, at fortran/interface.c:4748 0x6b1478 check_dtio_interface1 ../../gcc/fortran/interface.c:4748 0x6b8f05 gfc_check_dtio_interfaces(gfc_symbol*) ../../gcc/fortran/interface.c:4900 0x73595b do_traverse_symtree ../../gcc/fortran/symbol.c:4153 0x71c570 resolve_types ../../gcc/fortran/resolve.c:16513 0x71794c gfc_resolve(gfc_namespace*) ../../gcc/fortran/resolve.c:16586 0x701394 gfc_parse_file() ../../gcc/fortran/parse.c:6262 0x7480ef gfc_be_parse_file ../../gcc/fortran/f95-lang.c:204
Confirmed from 7.3.0 up to trunk (9.0).
Removing the assert at interface.c:4748 seems to fix this, giving the following error: z2.f03:14:16: subroutine s2 (dtv, unit) 1 Error: Too few dummy arguments in DTIO procedure ‘s2’ at (1)
Author: jvdelisle Date: Sun Jun 24 04:09:20 2018 New Revision: 261994 URL: https://gcc.gnu.org/viewcvs?rev=261994&root=gcc&view=rev Log: 2018-06-23 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/85983 * interface.c (check_dtio_interface1): Delete assert. Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/interface.c
Fixed on trunk.