xref: /llvm-project/clang/test/ParserOpenACC/parse-constructs.c (revision fdee0a35d9da1febfab20ead8565cf6167103b51)
1 // RUN: %clang_cc1 %s -verify -fopenacc
2 
3 void func() {
4 
5   // expected-error@+2{{expected OpenACC directive}}
6   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
7 #pragma acc
8   for(;;){}
9 
10   // expected-error@+3{{expected OpenACC directive}}
11   // expected-error@+2{{invalid OpenACC clause 'whatever'}}
12   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
13 #pragma acc(whatever) routine
14 
15   // expected-error@+3{{expected OpenACC directive}}
16   // expected-error@+2{{invalid OpenACC clause 'routine'}}
17   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
18 #pragma acc) routine
19 
20   // expected-error@+2{{invalid OpenACC directive 'invalid'}}
21   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
22 #pragma acc invalid
23   for(;;){}
24 
25   // expected-error@+2{{invalid OpenACC clause 'clause'}}
26   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
27 #pragma acc parallel clause list
28   for(;;){}
29   // expected-error@+3{{expected clause-list or newline in OpenACC directive}}
30   // expected-error@+2{{invalid OpenACC clause 'clause'}}
31   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
32 #pragma acc parallel() clause list
33   for(;;){}
34   // expected-error@+4{{expected clause-list or newline in OpenACC directive}}
35   // expected-error@+3{{expected ')'}}
36   // expected-note@+2{{to match this '('}}
37   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
38 #pragma acc parallel( clause list
39   for(;;){}
40   // expected-error@+2{{invalid OpenACC clause 'clause'}}
41   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
42 #pragma acc serial clause list
43   for(;;){}
44   // expected-error@+2{{invalid OpenACC clause 'clause'}}
45   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
46 #pragma acc kernels clause list
47   for(;;){}
48   // expected-error@+2{{invalid OpenACC clause 'clause'}}
49   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
50 #pragma acc data clause list
51   for(;;){}
52   // expected-error@+2{{invalid OpenACC clause 'clause'}}
53   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
54 #pragma acc enter data clause list
55   for(;;){}
56   // expected-error@+2{{invalid OpenACC clause 'clause'}}
57   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
58 #pragma acc exit data clause list
59   for(;;){}
60   // expected-error@+2{{invalid OpenACC directive 'enter invalid'}}
61   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
62 #pragma acc enter invalid
63   for(;;){}
64   // expected-error@+2{{invalid OpenACC directive 'exit invalid'}}
65   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
66 #pragma acc exit invalid
67   for(;;){}
68   // expected-error@+2{{invalid OpenACC directive 'enter'}}
69   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
70 #pragma acc enter
71   for(;;){}
72   // expected-error@+2{{expected identifier}}
73   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
74 #pragma acc exit }
75   for(;;){}
76   // expected-error@+2{{invalid OpenACC clause 'clause'}}
77   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
78 #pragma acc host_data clause list
79   for(;;){}
80   // expected-error@+2{{invalid OpenACC clause 'clause'}}
81   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
82 #pragma acc loop clause list
83   for(;;){}
84   // expected-error@+2{{invalid OpenACC clause 'invalid'}}
85   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
86 #pragma acc parallel invalid clause list
87   for(;;){}
88   // expected-error@+2{{invalid OpenACC clause 'clause'}}
89   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
90 #pragma acc parallel loop clause list
91   for(;;){}
92 
93   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
94 #pragma acc parallel loop
95   for(;;){}
96   // expected-error@+2{{invalid OpenACC clause 'clause'}}
97   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
98 #pragma acc serial loop clause list
99   for(;;){}
100   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
101 #pragma acc serial loop
102   for(;;){}
103   // expected-error@+2{{invalid OpenACC clause 'clause'}}
104   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
105 #pragma acc kernels loop clause list
106   for(;;){}
107   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
108 #pragma acc kernels loop
109   for(;;){}
110 
111   int i = 0, j = 0, k = 0;
112   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
113 #pragma acc atomic
114   i = j;
115   // expected-error@+2{{invalid OpenACC clause 'garbage'}}
116   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
117 #pragma acc atomic garbage
118   i = j;
119   // expected-error@+2{{invalid OpenACC clause 'garbage'}}
120   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
121 #pragma acc atomic garbage clause list
122   i = j;
123   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
124 #pragma acc atomic read
125   i = j;
126   // expected-error@+2{{invalid OpenACC clause 'clause'}}
127   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
128 #pragma acc atomic write clause list
129   i = i + j;
130   // expected-error@+2{{invalid OpenACC clause 'clause'}}
131   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
132 #pragma acc atomic update clause list
133   i++;
134   // expected-error@+2{{invalid OpenACC clause 'clause'}}
135   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
136 #pragma acc atomic capture clause list
137   i = j++;
138 
139 
140   // expected-error@+2{{invalid OpenACC clause 'clause'}}
141   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
142 #pragma acc declare clause list
143   for(;;){}
144   // expected-error@+2{{invalid OpenACC clause 'clause'}}
145   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
146 #pragma acc init clause list
147   for(;;){}
148   // expected-error@+2{{invalid OpenACC clause 'clause'}}
149   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
150 #pragma acc shutdown clause list
151   for(;;){}
152   // expected-error@+2{{invalid OpenACC clause 'clause'}}
153   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
154 #pragma acc set clause list
155   for(;;){}
156   // expected-error@+2{{invalid OpenACC clause 'clause'}}
157   // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
158 #pragma acc update clause list
159   for(;;){}
160 }
161 
162 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
163 #pragma acc routine
164 void routine_func();
165 // expected-error@+2{{invalid OpenACC clause 'clause'}}
166 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
167 #pragma acc routine clause list
168 void routine_func();
169 
170 // expected-error@+2{{use of undeclared identifier 'func_name'}}
171 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
172 #pragma acc routine (func_name)
173 // expected-error@+3{{use of undeclared identifier 'func_name'}}
174 // expected-error@+2{{invalid OpenACC clause 'clause'}}
175 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
176 #pragma acc routine (func_name) clause list
177 
178 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
179 #pragma acc routine (routine_func)
180 // expected-error@+2{{invalid OpenACC clause 'clause'}}
181 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
182 #pragma acc routine (routine_func) clause list
183 
184 // expected-error@+3{{expected ')'}}
185 // expected-note@+2{{to match this '('}}
186 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
187 #pragma acc routine (routine_func())
188 
189 // expected-error@+2{{expected identifier}}
190 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
191 #pragma acc routine()
192 
193 // expected-error@+2{{expected identifier}}
194 // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
195 #pragma acc routine(int)
196