! { dg-do run } ! { dg-options "-fcheck=pointer" } ! ! { dg-shouldfail "pointer check" } ! { dg-output ".*At line 104 of file .*Fortran runtime error: Pointer actual argument 'a' is not associated.*" } ! ! PR fortran/40604 ! ! The following cases are all valid, but were failing ! for one or the other reason. ! ! Contributed by Janus Weil and Tobias Burnus. ! subroutine test1() call test(uec=-1) contains subroutine test(str,uec) implicit none character*(*), intent(in), optional:: str integer, intent(in), optional :: uec end subroutine end subroutine test1 module m interface matrixMult Module procedure matrixMult_C2 End Interface contains subroutine test implicit none complex, dimension(0:3,0:3) :: m1,m2 print *,Trace(MatrixMult(m1,m2)) end subroutine complex function trace(a) implicit none complex, intent(in), dimension(0:3,0:3) :: a end function trace function matrixMult_C2(a,b) result(matrix) implicit none complex, dimension(0:3,0:3) :: matrix,a,b end function matrixMult_C2 end module m SUBROUTINE plotdop(amat) IMPLICIT NONE REAL, INTENT (IN) :: amat(3,3) integer :: i1 real :: pt(3) i1 = 1 pt = MATMUL(amat,(/i1,i1,i1/)) END SUBROUTINE plotdop FUNCTION evaluateFirst(s,n)result(number) IMPLICIT NONE CHARACTER(len =*), INTENT(inout) :: s INTEGER,OPTIONAL :: n REAL :: number number = 1.1 end function SUBROUTINE rw_inp(scpos) IMPLICIT NONE REAL scpos interface FUNCTION evaluateFirst(s,n)result(number) IMPLICIT NONE CHARACTER(len =*), INTENT(inout) :: s INTEGER,OPTIONAL :: n REAL :: number end function end interface CHARACTER(len=100) :: line scpos = evaluatefirst(line) END SUBROUTINE rw_inp program test integer, pointer :: a ! nullify(a) allocate(a) a = 1 call sub1a(a) call sub1b(a) call sub1c() contains subroutine sub1a(a) integer, pointer :: a call sub2(a) call sub3(a) call sub4(a) end subroutine sub1a subroutine sub1b(a) integer, pointer,optional :: a call sub2(a) call sub3(a) call sub4(a) end subroutine sub1b subroutine sub1c(a) integer, pointer,optional :: a call sub4(a) ! call sub2(a) ! << Invalid - working correctly, but not allowed in F2003 call sub3(a) ! << INVALID end subroutine sub1c subroutine sub4(b) integer, optional,pointer :: b end subroutine subroutine sub2(b) integer, optional :: b end subroutine subroutine sub3(b) integer :: b end subroutine end