You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
! RUN: %S/test_errors.sh %s %t %f18
|
|
! Tests valid and invalid usage of forward references to procedures
|
|
! in specification expressions.
|
|
module m
|
|
interface ifn2
|
|
module procedure if2
|
|
end interface
|
|
interface ifn3
|
|
module procedure if3
|
|
end interface
|
|
!ERROR: Automatic data object 'a' may not appear in the specification part of a module
|
|
real :: a(if1(1))
|
|
!ERROR: No specific procedure of generic 'ifn2' matches the actual arguments
|
|
real :: b(ifn2(1))
|
|
contains
|
|
subroutine t1(n)
|
|
integer :: iarr(if1(n))
|
|
end subroutine
|
|
pure integer function if1(n)
|
|
integer, intent(in) :: n
|
|
if1 = n
|
|
end function
|
|
subroutine t2(n)
|
|
integer :: iarr(ifn3(n)) ! should resolve to if3
|
|
end subroutine
|
|
pure integer function if2(n)
|
|
integer, intent(in) :: n
|
|
if2 = n
|
|
end function
|
|
pure integer function if3(n)
|
|
integer, intent(in) :: n
|
|
if3 = n
|
|
end function
|
|
end module
|
|
|
|
subroutine nester
|
|
!ERROR: The internal function 'if1' may not be referenced in a specification expression
|
|
real :: a(if1(1))
|
|
contains
|
|
subroutine t1(n)
|
|
!ERROR: The internal function 'if2' may not be referenced in a specification expression
|
|
integer :: iarr(if2(n))
|
|
end subroutine
|
|
pure integer function if1(n)
|
|
integer, intent(in) :: n
|
|
if1 = n
|
|
end function
|
|
pure integer function if2(n)
|
|
integer, intent(in) :: n
|
|
if2 = n
|
|
end function
|
|
end subroutine
|