Hi, everyone,

I tried to compile the source code below where an IMPORT statement is ignored in the second abstract interface area on purpose.

The Intel Visual Fortran compiler 2013 issues a compiler error saying that error #8169: The specified interface is not declared @ the second abstract interface, while the same source code can be compiled using the Portland Visual Fortran 12.10.

Based on the outcome generated by PVF 12.10 above, I am wondering if PVF has accepted the convention of Fortran 2008 already. Can anyone help me out with this question?

Thanks,

Li

```
MODULE toolbox
IMPLICIT NONE
REAL, DIMENSION(:), POINTER :: fvec1p, fvec2p
ABSTRACT INTERFACE
FUNCTION functions_system(x) RESULT(y)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(SIZE(x)) :: y
END FUNCTION
END INTERFACE
ABSTRACT INTERFACE
FUNCTION middle_function_template(x,fvec_p,proc_p) RESULT(y)
! IMPORT !<---------------- COMMENT OUT ON PURPOSE
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(:), POINTER :: fvec_p
PROCEDURE(functions_system), POINTER :: proc_p ! <----- the error line caught by IVF
REAL :: y
END FUNCTION
END INTERFACE
PROCEDURE(functions_system), POINTER :: proc1p, proc2p
CONTAINS
FUNCTION func_system1(x) RESULT(y)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(size(x)) :: y
y(1)=x(1)
y(2)=x(2)
END FUNCTION func_system1
! the major program returns the normalization of
! a given vector
SUBROUTINE MajorSolver(ans,x,fvec_p,proc_p)
IMPLICIT NONE
REAL, DIMENSION(:), POINTER :: ans
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(:), POINTER :: fvec_p
PROCEDURE(functions_system), POINTER :: proc_p
PROCEDURE(middle_function_template), POINTER :: proc3p
REAL, DIMENSION(SIZE(x)), TARGET :: y ! kept for other use
REAL :: z
fvec_p=>y
proc3p=>MiddleFunction
z=AssistantSolver(x,proc3p,fvec_p,proc_p)
ans=fvec_p**2/z
END SUBROUTINE MajorSolver
FUNCTION AssistantSolver(x,func,fvec_p,proc_p)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
procedure(middle_function_template), pointer :: func
REAL, DIMENSION(:), POINTER :: fvec_p
PROCEDURE(functions_system), POINTER :: proc_p
REAL :: AssistantSolver
AssistantSolver=func(x,fvec_p,proc_p)
END FUNCTION AssistantSolver
! return the innder product of the vector proc_p evaluated at x
FUNCTION MiddleFunction(x,fvec_p,proc_p)
IMPLICIT NONE
REAL, DIMENSION(:), INTENT(IN) :: x
REAL, DIMENSION(:), POINTER :: fvec_p
PROCEDURE(functions_system), POINTER :: proc_p
REAL :: MiddleFunction
fvec_p=proc_p(x)
MiddleFunction=dot_product(fvec_p,fvec_p)
END FUNCTION
END MODULE toolbox
PROGRAM main
USE toolbox
IMPLICIT NONE
REAL, DIMENSION(:), POINTER :: ans
REAL :: data2(2)
data2=[1.,2.]
proc1p=>func_system1
allocate(ans(size(data2)))
call MajorSolver(ans,data2,fvec1p,proc1p)
write(*,'(a,2(f7.3))'),'Equations system 1: Ans= ',ans
nullify(ans,proc1p)
END PROGRAM main
```