https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85131
Bug ID: 85131 Summary: ICE in gfc_conv_descriptor_data_get Product: gcc Version: 8.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: juergen.reuter at desy dot de Target Milestone: --- The following code fails with gfortran 4.8.4, 5.4 and 8.0.1, so probably has never worked correctly in gfortran. It works on ifort v17 and v18: gfortran -c quantum_numbers.f90 quantum_numbers.f90:35:0: if (present (col)) call qns%qn(i)%set (col=col(i)) internal compiler error: in gfc_conv_descriptor_data_get, at fortran/trans-array.c:145 with gfortran --version GNU Fortran (GCC) 8.0.1 20180303 (experimental) I am using svn revision 258198, but the problem is present also in gfortran 4.8.4 and 5.4. I haven't checked 6.4 or 7.3 yet. Here is the source code, also attached: module m implicit none private type :: t1 end type t1 type :: t2 private class(t1), allocatable :: c contains procedure :: set => t2_set end type t2 type :: t3 private integer :: length = 0 type(t2), dimension(:), allocatable :: qn contains procedure :: set => t3_set end type t3 contains impure elemental subroutine t2_set (qn, col) class(t2), intent(inout) :: qn class(t1), intent(in), optional :: col end subroutine t2_set subroutine t3_set (qns, col) class(t3), intent(inout) :: qns class(t1), dimension(:), intent(in), optional :: col integer :: i do i = 1, qns%length if (present (col)) call qns%qn(i)%set (col=col(i)) end do end subroutine t3_set end module m