It appears that when you have an abstract type with a deferred type-bound function that returns a character variable that is of length determined by an input argument, and this deferred function is overridden in an extended type, the PGI compiler fails to compile it and gives a severe error. Here is a small code example:
module pgi_override_char_param
type, abstract :: parent
contains
procedure(iName), nopass, deferred :: name
end type parent
abstract interface
function iName(n) result(myName)
integer, intent(in) :: n
character(len=n) :: myName
end function iName
end interface
type, extends(parent) :: child
contains
procedure, nopass :: name
end type child
contains
function name(n) result(myName)
integer, intent(in) :: n
character(len=n) :: myName
myName = ' '
end function name
end module
When I try to compile this with pgf90 version 14.3, I get the following error:
PGF90-S-0155-Result is not compatible with parent's result for type bound procedure name (pgi_override_char_param.f90: 28)
PGF90/x86-64 Linux 14.3-0: compilation completed with severe errors
This code successfully compiles using Intel Fortran as well as gfortran 4.8.2.