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