Intel Fortran has no problem.
Gfortran has problem.
The cygwin64 gfortran on windows cannot show complete string, it shows things like ''a is bigge".
Gfortran 11.2.0 on ubuntu has the same issue OP mentioned.
I don’t know why, but if you define
character(:), allocatable :: str
inside a type as below,
type :: var_char
character(:), allocatable :: str
end type var_char
Then the code work with gfortran without problem.
see below code, the !!! are the small modifications.
program main
use iso_fortran_env, only: dp => real64
implicit none
type :: var_char !!!!!!!!!!!!!!!
character(:), allocatable :: str !!!!!!!!!!!!!!!!!!!1
end type var_char !!!!!!!!!!!!!!!
call test_fun1()
contains
function fun1(a, err) result(b)
real(dp), intent(in) :: a
type(var_char) :: err !!!!!!!!!!!!!!!!!
real(dp) :: b(2)
if (a > 2) then
err%str = 'a is bigger than 2' !!!!!!!!!!!!!!!!!!!!!
return
endif
b = 1
end function
subroutine test_fun1()
real(dp) :: a, b(2)
type(var_char) :: err !!!!!!!!!!!!!!!!!!!!!
a = 3
b = fun1(a, err)
if (allocated(err%str)) then !!!!!!!!!!!!!
print*,'err is allocated'
print*,'next line tries to print err'
write(6,'(a)') err%str !!!!!!!!!!!!!!!!!
else
print*,b
endif
end subroutine
end program
See a similar topic,
In short, I don’t know why, but if
character(:), allocatable :: str
needs to be used, it is best to define it inside a type.