https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65894
--- Comment #11 from Jürgen Reuter <juergen.reuter at desy dot de> --- Here is the small test case for the ICE with the patch provided Andre Vehreschild: gfortran -c evaluators.f90 evaluators.f90:40:0: .or. qn_mask_rest 1 internal compiler error: in gfc_trans_assignment_1, at fortran/trans-expr.c:9187 evaluators.f90:40:0: internal compiler error: Abort trap: 6 gfortran: internal compiler error: Abort trap: 6 (program f951) This is the code: module evaluators implicit none private type :: quantum_numbers_mask_t contains generic :: operator(.or.) => quantum_numbers_mask_or procedure, private :: quantum_numbers_mask_or end type quantum_numbers_mask_t type :: index_map_t integer, dimension(:), allocatable :: entry end type index_map_t type :: prt_mask_t logical, dimension(:), allocatable :: entry end type prt_mask_t type :: qn_mask_array_t type(quantum_numbers_mask_t), dimension(:), allocatable :: mask end type qn_mask_array_t contains elemental function quantum_numbers_mask_or (mask1, mask2) result (mask) type(quantum_numbers_mask_t) :: mask class(quantum_numbers_mask_t), intent(in) :: mask1, mask2 end function quantum_numbers_mask_or subroutine make_product_interaction & (prt_is_connected, qn_mask_in, qn_mask_rest) type(prt_mask_t), dimension(2), intent(in) :: prt_is_connected type(qn_mask_array_t), dimension(2), intent(in) :: qn_mask_in type(quantum_numbers_mask_t), intent(in) :: qn_mask_rest type(index_map_t), dimension(2) :: prt_index_in integer :: i type(quantum_numbers_mask_t), dimension(:), allocatable :: qn_mask allocate (qn_mask (2)) do i = 1, 2 qn_mask(prt_index_in(i)%entry) = & pack (qn_mask_in(i)%mask, prt_is_connected(i)%entry) & .or. qn_mask_rest end do end subroutine make_product_interaction end module evaluators