blob: 81dbae847a86df82f98ac52491daf1f325253a58 [file] [log] [blame]
! { 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