I’ve got into a problem when I use procedure pointer to point to a function returning a 64-bit integer. Here is a simple code that reproduces the problem:
module ma implicit none integer, parameter :: ki = selected_int_kind(10) procedure(ma_a), pointer :: ma_p => null() contains subroutine ma_init() implicit none ma_p => ma_a end subroutine ma_init integer(kind = ki) function ma_a() implicit none ma_a = 1_ki end function ma_a end module ma program test use ma implicit none call ma_init() write (*, *) ma_p() end program test
When I try to compile the above code with pgf90, I get such an error message:
PGF90-S-0155-Illegal POINTER assignment - type mismatch (test.F90: 10)
0 inform, 0 warnings, 1 severes, 0 fatal for ma_init
However, if on line 3 of the code I replace “selected_int_kind(10)” by “selected_int_kind(5)”, then it compiles well and runs well.
I’ve tried this on both pgf90 11.3-0 and 12.5-0, both of which have this problem. I’ve tried gfortran from GNU, which has no such problem.
I wonder if this is a bug of pgf90 or if I missed some restriction imposed by pgf90 but not by gfortran.