https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106731
Bug ID: 106731 Summary: ICE on automatic array of derived type with DTIO Product: gcc Version: 12.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: federico.perini at gmail dot com Target Milestone: --- A derived type that has user-defined I/O causes ICE on all gfortran versions 7 to 12.1.0, whenever it's being used as an automatic object. The error is at 63 | type(t) :: automatic(n) | 1 internal compiler error: in gfc_trans_auto_array_allocation, at fortran/trans-array.cc:6617 This does not happen if the derived type is allocated. Here's the simplest example: module causes_ice implicit none type :: t real(8) :: x contains procedure, private :: write_formatted generic :: write(formatted) => write_formatted end type t contains subroutine write_formatted(this, unit, iotype, v_list, iostat, iomsg) class(t), intent(in) :: this integer, intent(in) :: unit character(*), intent(in) :: iotype integer, intent(in) :: v_list(:) integer, intent(out) :: iostat character(*), intent(inout) :: iomsg write(unit, '(a)', iostat=iostat, iomsg=iomsg) 'dummy' end subroutine write_formatted end module causes_ice module use_t use causes_ice implicit none public :: automatic_alloc contains subroutine automatic_alloc(n) integer, intent(in) :: n ! Automatic array: ICE! type(t) :: automatic(n) ! Allocatable: works type(t), allocatable :: alloc(:) allocate(alloc(n)) ! Do anything print *, 'n=',n,automatic(n)%x end subroutine automatic_alloc end module use_t program test use use_t call automatic_alloc(1) end program test I could find other DTIO-related bugs, but none seemed related with the allocation type.