Compiling the valid Fortran source code below, the nvfortran compiler (version 21.3) crashes with internal compiler error. Also the warning printed before the crash is somewhat dubious.
nvfortran ~/dftb_devel/dftbplus/bug2.f90
NVFORTRAN-W-0310-Unsafe fixed-length string temporary*500 being used (/home/aradi/dftb_devel/dftbplus/bug2.f90: 54)
NVFORTRAN-F-0000-Internal compiler error. Deferred-length character symbol must have descriptor 689 (/home/aradi/dftb_devel/dftbplus/bug2.f90: 54)
NVFORTRAN/x86-64 Linux 21.3-0: compilation aborted
module testmod1
implicit none
private
public :: tolower
contains
!> Returns a lowercase string
elemental function tolower(str) result(lower)
!> String to convert to lowercase
character(len=*), intent(in) :: str
!> Lowercase string
character(len=len(str)) :: lower
integer :: ii, iTmp
do ii = 1, len(str)
iTmp = iachar(str(ii:ii))
if (65 <= iTmp .and. iTmp <= 90) then
lower(ii:ii) = achar(iTmp + 32)
else
lower(ii:ii) = str(ii:ii)
end if
end do
end function tolower
end module testmod1
module testmod2
use testmod1, only : tolower
implicit none
private
public :: TSelector, setItems, showItems
type :: TSelector
character(:), allocatable :: selection(:)
end type TSelector
contains
subroutine setItems(selector, items)
class(TSelector), intent(inout) :: selector
character(*), intent(in) :: items(:)
selector%selection = tolower(items)
end subroutine setItems
subroutine showItems(selector)
class(TSelector), intent(inout) :: selector
integer :: ii
do ii = 1, size(selector%selection)
print *, ii, trim(selector%selection(ii))
end do
end subroutine showItems
end module testmod2
program testprog
use testmod2, only : TSelector, setItems, showItems
implicit none
type(TSelector) :: selector
call setItems(selector, [character(2) :: "Si", "C"])
call showItems(selector)
end program testprog