[LLVM] Fix Maintainers.md formatting (NFC)
[llvm-project.git] / flang / test / Semantics / ignore_tkr01.f90
blob2af4974b1c03822ffdd8141a1b5fd3c735bbca94
1 ! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
2 ! !DIR$ IGNORE_TKR tests
4 !ERROR: !DIR$ IGNORE_TKR directive must appear in a subroutine or function
5 !dir$ ignore_tkr
7 module m
9 !ERROR: !DIR$ IGNORE_TKR directive must appear in a subroutine or function
10 !dir$ ignore_tkr
12 interface
13 subroutine t1(x)
14 !dir$ ignore_tkr
15 real, intent(in) :: x
16 end
18 subroutine t2(x)
19 !dir$ ignore_tkr(t) x
20 real, intent(in) :: x
21 end
23 subroutine t3(x)
24 !dir$ ignore_tkr(k) x
25 real, intent(in) :: x
26 end
28 subroutine t4(a)
29 !dir$ ignore_tkr(r) a
30 real, intent(in) :: a(2)
31 end
33 subroutine t5(m)
34 !dir$ ignore_tkr(r) m
35 real, intent(in) :: m(2,2)
36 end
38 subroutine t6(x)
39 !dir$ ignore_tkr(a) x
40 real, intent(in) :: x
41 end
43 subroutine t7(x)
44 !ERROR: !DIR$ IGNORE_TKR directive may not have an empty parenthesized list of letters
45 !dir$ ignore_tkr() x
46 real, intent(in) :: x
47 end
49 subroutine t8(x)
50 !dir$ ignore_tkr x
51 real, intent(in) :: x
52 end
54 subroutine t9(x)
55 !dir$ ignore_tkr x
56 !WARNING: !DIR$ IGNORE_TKR should not apply to an allocatable or pointer
57 real, intent(in), allocatable :: x
58 end
60 subroutine t10(x)
61 !dir$ ignore_tkr x
62 !WARNING: !DIR$ IGNORE_TKR should not apply to an allocatable or pointer
63 real, intent(in), pointer :: x
64 end
66 subroutine t11
67 !dir$ ignore_tkr x
68 !ERROR: !DIR$ IGNORE_TKR directive may apply only to a dummy data argument
69 real :: x
70 end
72 subroutine t12(p,q,r)
73 !dir$ ignore_tkr p, q
74 !ERROR: 'p' is a data object and may not be EXTERNAL
75 real, external :: p
76 !ERROR: 'q' is already declared as an object
77 procedure(real) :: q
78 procedure(), pointer :: r
79 !ERROR: 'r' must be an object
80 !dir$ ignore_tkr r
81 end
83 elemental subroutine t13(x)
84 !dir$ ignore_tkr(r) x
85 !ERROR: !DIR$ IGNORE_TKR(R) may not apply in an ELEMENTAL procedure
86 real, intent(in) :: x
87 end
89 subroutine t14(x)
90 !dir$ ignore_tkr(r) x
91 !WARNING: !DIR$ IGNORE_TKR(R) should not apply to a dummy argument passed via descriptor
92 real x(:)
93 end
95 module subroutine t24(x)
96 !dir$ ignore_tkr(t) x
97 real x(:)
98 end
100 end interface
102 contains
103 subroutine t15(x)
104 !dir$ ignore_tkr x
105 !ERROR: !DIR$ IGNORE_TKR may not apply to an allocatable or pointer
106 real, intent(in), allocatable :: x
109 subroutine t16(x)
110 !dir$ ignore_tkr x
111 !ERROR: !DIR$ IGNORE_TKR may not apply to an allocatable or pointer
112 real, intent(in), pointer :: x
115 subroutine t17(x)
116 real x
117 x = x + 1.
118 !ERROR: !DIR$ IGNORE_TKR directive must appear in the specification part
119 !dir$ ignore_tkr x
122 subroutine t18(x)
123 !ERROR: 'q' is not a valid letter for !DIR$ IGNORE_TKR directive
124 !dir$ ignore_tkr(q) x
125 real x
126 x = x + 1.
129 subroutine t19(x)
130 real x
131 contains
132 subroutine inner
133 !ERROR: 'x' must be local to this subprogram
134 !dir$ ignore_tkr x
138 subroutine t20(x)
139 real x
140 block
141 !ERROR: 'x' must be local to this subprogram
142 !dir$ ignore_tkr x
143 end block
146 subroutine t22(x)
147 !dir$ ignore_tkr(r) x
148 !WARNING: !DIR$ IGNORE_TKR(R) is not meaningful for an assumed-rank array
149 real x(..)
152 subroutine t23(x)
153 !dir$ ignore_tkr(r) x
154 !ERROR: !DIR$ IGNORE_TKR(R) may not apply to a dummy argument passed via descriptor
155 real x(:)
160 subroutine bad1(x)
161 !dir$ ignore_tkr x
162 !ERROR: !DIR$ IGNORE_TKR may apply only in an interface or a module procedure
163 real, intent(in) :: x
166 submodule(m) subm
167 contains
168 module subroutine t24(x)
169 !dir$ ignore_tkr(t) x
170 real x(:)
174 program test
176 !ERROR: !DIR$ IGNORE_TKR directive must appear in a subroutine or function
177 !dir$ ignore_tkr
179 use m
180 real x
181 real a(2)
182 real m(2,2)
183 double precision dx
185 call t1(1)
186 call t1(dx)
187 call t1('a')
188 call t1((1.,2.))
189 call t1(.true.)
191 call t2(1)
192 !ERROR: Actual argument type 'REAL(8)' is not compatible with dummy argument type 'REAL(4)'
193 call t2(dx)
194 call t2('a')
195 call t2((1.,2.))
196 call t2(.true.)
198 !ERROR: Actual argument type 'INTEGER(4)' is not compatible with dummy argument type 'REAL(4)'
199 call t3(1)
200 call t3(dx)
201 !ERROR: passing Hollerith or character literal as if it were BOZ
202 call t3('a')
203 !ERROR: Actual argument type 'COMPLEX(4)' is not compatible with dummy argument type 'REAL(4)'
204 call t3((1.,2.))
205 !ERROR: Actual argument type 'LOGICAL(4)' is not compatible with dummy argument type 'REAL(4)'
206 call t3(.true.)
208 call t4(x)
209 call t4(m)
210 call t5(x)
211 !WARNING: Actual argument array has fewer elements (2) than dummy argument 'm=' array (4)
212 call t5(a)
214 call t6(1)
215 call t6(dx)
216 call t6('a')
217 call t6((1.,2.))
218 call t6(.true.)
219 call t6(a)
221 call t8(1)
222 call t8(dx)
223 call t8('a')
224 call t8((1.,2.))
225 call t8(.true.)
226 call t8(a)
228 contains
229 subroutine inner(x)
230 !dir$ ignore_tkr x
231 !ERROR: !DIR$ IGNORE_TKR may apply only in an interface or a module procedure
232 real, intent(in) :: x