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.
118 lines
2.8 KiB
118 lines
2.8 KiB
4 months ago
|
! RUN: %S/test_errors.sh %s %t %f18
|
||
|
! Confirm enforcement of constraints and restrictions in 15.6.2.1
|
||
|
|
||
|
non_recursive function f01(n) result(res)
|
||
|
integer, value :: n
|
||
|
integer :: res
|
||
|
if (n <= 0) then
|
||
|
res = n
|
||
|
else
|
||
|
!ERROR: NON_RECURSIVE procedure 'f01' cannot call itself
|
||
|
res = n * f01(n-1) ! 15.6.2.1(3)
|
||
|
end if
|
||
|
end function
|
||
|
|
||
|
non_recursive function f02(n) result(res)
|
||
|
integer, value :: n
|
||
|
integer :: res
|
||
|
if (n <= 0) then
|
||
|
res = n
|
||
|
else
|
||
|
res = nested()
|
||
|
end if
|
||
|
contains
|
||
|
integer function nested
|
||
|
!ERROR: NON_RECURSIVE procedure 'f02' cannot call itself
|
||
|
nested = n * f02(n-1) ! 15.6.2.1(3)
|
||
|
end function nested
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot be RECURSIVE
|
||
|
recursive character(*) function f03(n) ! C723
|
||
|
integer, value :: n
|
||
|
f03 = ''
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot be RECURSIVE
|
||
|
recursive function f04(n) result(res) ! C723
|
||
|
integer, value :: n
|
||
|
character(*) :: res
|
||
|
res = ''
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot return an array
|
||
|
character(*) function f05()
|
||
|
dimension :: f05(1) ! C723
|
||
|
f05(1) = ''
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot return an array
|
||
|
function f06()
|
||
|
character(*) :: f06(1) ! C723
|
||
|
f06(1) = ''
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot return a POINTER
|
||
|
character(*) function f07()
|
||
|
pointer :: f07 ! C723
|
||
|
character, target :: a = ' '
|
||
|
f07 => a
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot return a POINTER
|
||
|
function f08()
|
||
|
character(*), pointer :: f08 ! C723
|
||
|
character, target :: a = ' '
|
||
|
f08 => a
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot be PURE
|
||
|
pure character(*) function f09() ! C723
|
||
|
f09 = ''
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot be PURE
|
||
|
pure function f10()
|
||
|
character(*) :: f10 ! C723
|
||
|
f10 = ''
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot be ELEMENTAL
|
||
|
elemental character(*) function f11(n) ! C723
|
||
|
integer, value :: n
|
||
|
f11 = ''
|
||
|
end function
|
||
|
|
||
|
!ERROR: An assumed-length CHARACTER(*) function cannot be ELEMENTAL
|
||
|
elemental function f12(n)
|
||
|
character(*) :: f12 ! C723
|
||
|
integer, value :: n
|
||
|
f12 = ''
|
||
|
end function
|
||
|
|
||
|
function f13(n) result(res)
|
||
|
integer, value :: n
|
||
|
character(*) :: res
|
||
|
if (n <= 0) then
|
||
|
res = ''
|
||
|
else
|
||
|
!ERROR: Assumed-length CHARACTER(*) function 'f13' cannot call itself
|
||
|
res = f13(n-1) ! 15.6.2.1(3)
|
||
|
end if
|
||
|
end function
|
||
|
|
||
|
function f14(n) result(res)
|
||
|
integer, value :: n
|
||
|
character(*) :: res
|
||
|
if (n <= 0) then
|
||
|
res = ''
|
||
|
else
|
||
|
res = nested()
|
||
|
end if
|
||
|
contains
|
||
|
character(1) function nested
|
||
|
!ERROR: Assumed-length CHARACTER(*) function 'f14' cannot call itself
|
||
|
nested = f14(n-1) ! 15.6.2.1(3)
|
||
|
end function nested
|
||
|
end function
|