1! RUN: %S/test_errors.sh %s %t %flang_fc1 2! REQUIRES: shell 3! Confirm enforcement of constraints and restrictions in 15.6.2.1 4 5non_recursive function f01(n) result(res) 6 integer, value :: n 7 integer :: res 8 if (n <= 0) then 9 res = n 10 else 11 !ERROR: NON_RECURSIVE procedure 'f01' cannot call itself 12 res = n * f01(n-1) ! 15.6.2.1(3) 13 end if 14end function 15 16non_recursive function f02(n) result(res) 17 integer, value :: n 18 integer :: res 19 if (n <= 0) then 20 res = n 21 else 22 res = nested() 23 end if 24 contains 25 integer function nested 26 !ERROR: NON_RECURSIVE procedure 'f02' cannot call itself 27 nested = n * f02(n-1) ! 15.6.2.1(3) 28 end function nested 29end function 30 31!ERROR: An assumed-length CHARACTER(*) function cannot be RECURSIVE 32recursive character(*) function f03(n) ! C723 33 integer, value :: n 34 f03 = '' 35end function 36 37!ERROR: An assumed-length CHARACTER(*) function cannot be RECURSIVE 38recursive function f04(n) result(res) ! C723 39 integer, value :: n 40 character(*) :: res 41 res = '' 42end function 43 44!ERROR: An assumed-length CHARACTER(*) function cannot return an array 45character(*) function f05() 46 dimension :: f05(1) ! C723 47 f05(1) = '' 48end function 49 50!ERROR: An assumed-length CHARACTER(*) function cannot return an array 51function f06() 52 character(*) :: f06(1) ! C723 53 f06(1) = '' 54end function 55 56!ERROR: An assumed-length CHARACTER(*) function cannot return a POINTER 57character(*) function f07() 58 pointer :: f07 ! C723 59 character, target :: a = ' ' 60 f07 => a 61end function 62 63!ERROR: An assumed-length CHARACTER(*) function cannot return a POINTER 64function f08() 65 character(*), pointer :: f08 ! C723 66 character, target :: a = ' ' 67 f08 => a 68end function 69 70!ERROR: An assumed-length CHARACTER(*) function cannot be PURE 71pure character(*) function f09() ! C723 72 f09 = '' 73end function 74 75!ERROR: An assumed-length CHARACTER(*) function cannot be PURE 76pure function f10() 77 character(*) :: f10 ! C723 78 f10 = '' 79end function 80 81!ERROR: An assumed-length CHARACTER(*) function cannot be ELEMENTAL 82elemental character(*) function f11(n) ! C723 83 integer, value :: n 84 f11 = '' 85end function 86 87!ERROR: An assumed-length CHARACTER(*) function cannot be ELEMENTAL 88elemental function f12(n) 89 character(*) :: f12 ! C723 90 integer, value :: n 91 f12 = '' 92end function 93 94function f13(n) result(res) 95 integer, value :: n 96 character(*) :: res 97 if (n <= 0) then 98 res = '' 99 else 100 !ERROR: Assumed-length CHARACTER(*) function 'f13' cannot call itself 101 res = f13(n-1) ! 15.6.2.1(3) 102 end if 103end function 104 105function f14(n) result(res) 106 integer, value :: n 107 character(*) :: res 108 if (n <= 0) then 109 res = '' 110 else 111 res = nested() 112 end if 113 contains 114 character(1) function nested 115 !ERROR: Assumed-length CHARACTER(*) function 'f14' cannot call itself 116 nested = f14(n-1) ! 15.6.2.1(3) 117 end function nested 118end function 119