1module main
2  implicit none
3contains
4  subroutine f0 ()
5  end subroutine
6  subroutine f1 ()
7  end subroutine
8  subroutine f2 ()
9    !$omp declare variant	! { dg-error "expected '\\(' at .1." }
10  end subroutine
11  subroutine f3 ()
12    !$omp declare variant (	! { dg-error "" }
13  end subroutine
14  subroutine f4 ()
15    !$omp declare variant ()	! { dg-error "" }
16  end subroutine
17  subroutine f5 ()
18    !$omp declare variant match(user={condition(0)})	! { dg-error "expected '\\(' at .1." }
19  end subroutine
20  subroutine f6 ()
21    !$omp declare variant (f1)	! { dg-error "expected 'match' at .1." }
22  end subroutine
23  subroutine f7 ()
24    !$omp declare variant (f1) simd	! { dg-error "expected 'match' at .1." }
25  end subroutine
26  subroutine f8 ()
27    !$omp declare variant (f1) match	! { dg-error "expected '\\(' at .1." }
28  end subroutine
29  subroutine f9 ()
30    !$omp declare variant (f1) match(	! { dg-error "expected 'construct', 'device', 'implementation' or 'user' at .1." }
31  end subroutine
32  subroutine f10 ()
33    !$omp declare variant (f1) match()	! { dg-error "expected 'construct', 'device', 'implementation' or 'user' at .1." }
34  end subroutine
35  subroutine f11 ()
36    !$omp declare variant (f1) match(foo)	! { dg-error "expected 'construct', 'device', 'implementation' or 'user' at .1." }
37  end subroutine
38  subroutine f12 ()
39    !$omp declare variant (f1) match(something={something})	! { dg-error "expected 'construct', 'device', 'implementation' or 'user' at .1." }
40  end subroutine
41  subroutine f13 ()
42    !$omp declare variant (f1) match(user)	! { dg-error "expected '=' at .1." }
43  end subroutine
44  subroutine f14 ()
45    !$omp declare variant (f1) match(user=)	! { dg-error "expected '\\\{' at .1." }
46  end subroutine
47  subroutine f15 ()
48    !$omp declare variant (f1) match(user=	! { dg-error "expected '\\\{' at .1." }
49  end subroutine
50  subroutine f16 ()
51    !$omp declare variant (f1) match(user={)	! { dg-error "expected trait selector name at .1." }
52  end subroutine
53  subroutine f17 ()
54    !$omp declare variant (f1) match(user={})	! { dg-error "expected trait selector name at .1." }
55  end subroutine
56  subroutine f18 ()
57    !$omp declare variant (f1) match(user={condition})	! { dg-error "expected '\\(' at .1." }
58  end subroutine
59  subroutine f19 ()
60    !$omp declare variant (f1) match(user={condition(})	! { dg-error "expected expression at .1." }
61  end subroutine
62  subroutine f20 ()
63    !$omp declare variant (f1) match(user={condition()})	! { dg-error "expected expression at .1." }
64  end subroutine
65  subroutine f21 ()
66    !$omp declare variant (f1) match(user={condition(f1)})	! { dg-error "expected expression at .1." }
67  end subroutine
68  subroutine f22 ()
69    !$omp declare variant (f1) match(user={condition(1, 2, 3)})	! { dg-error "expected '\\)' at .1." }
70  end subroutine
71  subroutine f23 ()
72    !$omp declare variant (f1) match(construct={master})	! { dg-error "selector 'master' not allowed for context selector set 'construct' at .1." }
73  end subroutine
74  subroutine f24 ()
75    !$omp declare variant (f1) match(construct={teams,parallel,master,do})	! { dg-error "selector 'master' not allowed for context selector set 'construct' at .1." }
76  end subroutine
77  subroutine f25 ()
78    !$omp declare variant (f1) match(construct={parallel(1	! { dg-error "selector 'parallel' does not accept any properties at .1." }
79  end subroutine
80  subroutine f26 ()
81    !$omp declare variant (f1) match(construct={parallel(1)})	! { dg-error "selector 'parallel' does not accept any properties at .1." }
82  end subroutine
83  subroutine f27 ()
84    !$omp declare variant (f0) match(construct={simd(12)})	! { dg-error "expected simd clause at .1." }
85  end subroutine
86  subroutine f32 ()
87    !$omp declare variant (f1) match(device={kind})	! { dg-error "expected '\\(' at .1." }
88  end subroutine
89  subroutine f33 ()
90    !$omp declare variant (f1) match(device={isa})	! { dg-error "expected '\\(' at .1." }
91  end subroutine
92  subroutine f34 ()
93    !$omp declare variant (f1) match(device={arch})	! { dg-error "expected '\\(' at .1." }
94  end subroutine
95  subroutine f35 ()
96    !$omp declare variant (f1) match(device={kind,isa,arch})	! { dg-error "expected '\\(' at .1." }
97  end subroutine
98  subroutine f36 ()
99    !$omp declare variant (f1) match(device={kind(})	! { dg-error "expected identifier or string literal at .1." }
100  end subroutine
101  subroutine f39 ()
102    !$omp declare variant (f1) match(device={isa(1)})	! { dg-error "expected identifier or string literal at .1." }
103  end subroutine
104  subroutine f40 ()
105    !$omp declare variant (f1) match(device={arch(17)})	! { dg-error "expected identifier or string literal at .1." }
106  end subroutine
107  subroutine f41 ()
108    !$omp declare variant (f1) match(device={foobar(3)})
109  end subroutine
110  subroutine f43 ()
111    !$omp declare variant (f1) match(implementation={foobar(3)})
112  end subroutine
113  subroutine f44 ()
114    !$omp declare variant (f1) match(implementation={vendor})	! { dg-error "expected '\\(' at .1." }
115  end subroutine
116  subroutine f45 ()
117    !$omp declare variant (f1) match(implementation={extension})	! { dg-error "expected '\\(' at .1." }
118  end subroutine
119  subroutine f45a ()
120    !$omp declare variant (f1) match(implementation={vendor()})	! { dg-error "expected identifier or string literal at .1." }
121  end subroutine
122  subroutine f46 ()
123    !$omp declare variant (f1) match(implementation={vendor(123-234)})	! { dg-error "expected identifier or string literal at .1." }
124  end subroutine
125  subroutine f48 ()
126    !$omp declare variant (f1) match(implementation={unified_address(yes)})	! { dg-error "selector 'unified_address' does not accept any properties at .1." }
127  end subroutine
128  subroutine f49 ()
129    !$omp declare variant (f1) match(implementation={unified_shared_memory(no)})	! { dg-error "selector 'unified_shared_memory' does not accept any properties at .1." }
130  end subroutine
131  subroutine f50 ()
132    !$omp declare variant (f1) match(implementation={dynamic_allocators(42)})	! { dg-error "selector 'dynamic_allocators' does not accept any properties at .1." }
133  end subroutine
134  subroutine f51 ()
135    !$omp declare variant (f1) match(implementation={reverse_offload()})	! { dg-error "selector 'reverse_offload' does not accept any properties at .1." }
136  end subroutine
137  subroutine f52 ()
138    !$omp declare variant (f1) match(implementation={atomic_default_mem_order})	! { dg-error "expected '\\('" }
139  end subroutine
140  subroutine f56 ()
141    !$omp declare variant (f1) match(implementation={atomic_default_mem_order(relaxed,seq_cst)})	! { dg-error "expected '\\)' at .1." }
142  end subroutine
143  subroutine f58 ()
144    !$omp declare variant (f1) match(user={foobar(3)})	! { dg-error "selector 'foobar' not allowed for context selector set 'user' at .1." }
145  end subroutine
146  subroutine f59 ()
147    !$omp declare variant (f1) match(construct={foobar(3)})	! { dg-error "selector 'foobar' not allowed for context selector set 'construct' at .1." }
148  end subroutine
149  subroutine f60 ()
150    !$omp declare variant (f1) match(construct={parallel},foobar={bar})	! { dg-error "expected 'construct', 'device', 'implementation' or 'user' at .1." }
151  end subroutine
152  subroutine f64 ()
153    !$omp declare variant (f1) match(construct={single})	! { dg-error "selector 'single' not allowed for context selector set 'construct' at .1." }
154  end subroutine
155  subroutine f65 ()
156    !$omp declare variant (f1) match(construct={taskgroup})	! { dg-error "selector 'taskgroup' not allowed for context selector set 'construct' at .1." }
157  end subroutine
158  subroutine f66 ()
159    !$omp declare variant (f1) match(construct={for})	! { dg-error "selector 'for' not allowed for context selector set 'construct' at .1." }
160  end subroutine
161  subroutine f67 ()
162    !$omp declare variant (f1) match(construct={threadprivate})	! { dg-error "selector 'threadprivate' not allowed for context selector set 'construct' at .1." }
163  end subroutine
164  subroutine f68 ()
165    !$omp declare variant (f1) match(construct={critical})	! { dg-error "selector 'critical' not allowed for context selector set 'construct' at .1." }
166  end subroutine
167  subroutine f69 ()
168    !$omp declare variant (f1) match(construct={task})	! { dg-error "selector 'task' not allowed for context selector set 'construct' at .1." }
169  end subroutine
170  subroutine f70 ()
171    !$omp declare variant (f1) match(construct={taskloop})	! { dg-error "selector 'taskloop' not allowed for context selector set 'construct' at .1." }
172  end subroutine
173  subroutine f71 ()
174    !$omp declare variant (f1) match(construct={sections})	! { dg-error "selector 'sections' not allowed for context selector set 'construct' at .1." }
175  end subroutine
176  subroutine f72 ()
177    !$omp declare variant (f1) match(construct={section})	! { dg-error "selector 'section' not allowed for context selector set 'construct' at .1." }
178  end subroutine
179  subroutine f73 ()
180    !$omp declare variant (f1) match(construct={workshare})	! { dg-error "selector 'workshare' not allowed for context selector set 'construct' at .1." }
181  end subroutine
182  subroutine f74 ()
183    !$omp declare variant (f1) match(construct={requires})	! { dg-error "selector 'requires' not allowed for context selector set 'construct' at .1." }
184  end subroutine
185  subroutine f75 ()
186    !$omp declare variant (f1),match(construct={parallel})	! { dg-error "expected 'match' at .1." }
187  end subroutine
188  subroutine f76 ()
189    !$omp declare variant (f1) match(implementation={atomic_default_mem_order("relaxed")})	! { dg-error "expected identifier at .1." }
190  end subroutine
191  subroutine f77 ()
192    !$omp declare variant (f1) match(user={condition(score(f76):1)})  ! { dg-error "score argument must be constant integer expression at .1." }
193  end subroutine
194  subroutine f78 ()
195    !$omp declare variant (f1) match(user={condition(score(-130):1)}) ! { dg-error "score argument must be non-negative" }
196  end subroutine
197end module
198