I think the simple code below that makes use of a parameterized derived type extension with type-bound procedures is ok, but Intel(R) Visual Fortran Compiler XE 15.0.1.148 seems to hang up for me and the process never exits. I wonder if this problem is reproducible.
MODULE m USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY : I4 => INT32, SP => REAL32, DP => REAL64 IMPLICIT NONE !.. PRIVATE !.. PUBLIC :: I4, SP, DP TYPE :: b_t(k,n) PRIVATE INTEGER(I4), KIND :: k = SP INTEGER(I4), LEN :: n = 1 END TYPE b_t TYPE, EXTENDS(b_t), PUBLIC :: e_t PRIVATE REAL(k) :: m_X(n) CONTAINS PRIVATE PROCEDURE, PASS(This) :: SetX_SP PROCEDURE, PASS(This) :: SetX_DP GENERIC, PUBLIC :: SetX => SetX_SP, SetX_DP END TYPE e_t CONTAINS PURE SUBROUTINE SetX_SP(This, Arr) CLASS(e_t(SP,*)), INTENT(INOUT) :: This REAL(SP), INTENT(IN) :: Arr(:) IF (SIZE(Arr) == This%n) THEN This%m_X = Arr END IF RETURN END SUBROUTINE SetX_SP PURE SUBROUTINE SetX_DP(This, Arr) CLASS(e_t(DP,*)), INTENT(INOUT) :: This REAL(DP), INTENT(IN) :: Arr(:) IF (SIZE(Arr) == This%n) THEN This%m_X = Arr END IF RETURN END SUBROUTINE SetX_DP END MODULE m