xref: /llvm-project/clang/test/ParserOpenACC/parse-constructs.c (revision 553fa204ed5ab4c48bc6080451df24310c00e69c)
1 // RUN: %clang_cc1 %s -verify -fopenacc
2 
3 void func() {
4 
5   // expected-error@+1{{expected OpenACC directive}}
6 #pragma acc
7   for(;;){}
8 
9   // expected-error@+2{{expected OpenACC directive}}
10   // expected-error@+1{{invalid OpenACC clause 'whatever'}}
11 #pragma acc(whatever) routine
12 
13   // expected-error@+2{{expected OpenACC directive}}
14   // expected-error@+1{{invalid OpenACC clause 'routine'}}
15 #pragma acc) routine
16 
17   // expected-error@+1{{invalid OpenACC directive 'invalid'}}
18 #pragma acc invalid
19   for(;;){}
20 
21   // expected-error@+1{{invalid OpenACC clause 'clause'}}
22 #pragma acc parallel clause list
23   for(;;){}
24   // expected-error@+2{{expected clause-list or newline in OpenACC directive}}
25   // expected-error@+1{{invalid OpenACC clause 'clause'}}
26 #pragma acc parallel() clause list
27   for(;;){}
28   // expected-error@+3{{expected clause-list or newline in OpenACC directive}}
29   // expected-error@+2{{expected ')'}}
30   // expected-note@+1{{to match this '('}}
31 #pragma acc parallel( clause list
32   for(;;){}
33   // expected-error@+2{{expected clause-list or newline in OpenACC directive}}
34   // expected-error@+1{{invalid OpenACC clause 'clause'}}
35 #pragma acc parallel() clause list
36   for(;;){}
37   // expected-error@+3{{expected clause-list or newline in OpenACC directive}}
38   // expected-error@+2{{expected ')'}}
39   // expected-note@+1{{to match this '('}}
40 #pragma acc parallel( clause list
41   for(;;){}
42   // expected-error@+2{{expected clause-list or newline in OpenACC directive}}
43   // expected-error@+1{{invalid OpenACC clause 'clause'}}
44 #pragma acc serial() clause list
45   for(;;){}
46   // expected-error@+3{{expected clause-list or newline in OpenACC directive}}
47   // expected-error@+2{{expected ')'}}
48   // expected-note@+1{{to match this '('}}
49 #pragma acc serial( clause list
50   for(;;){}
51   // expected-error@+1{{invalid OpenACC clause 'clause'}}
52 #pragma acc serial clause list
53   for(;;){}
54   // expected-error@+1{{invalid OpenACC clause 'clause'}}
55 #pragma acc kernels clause list
56   for(;;){}
57     // expected-error@+2{{OpenACC 'data' construct must have at least one 'copy', 'copyin', 'copyout', 'create', 'no_create', 'present', 'deviceptr', 'attach' or 'default' clause}}
58   // expected-error@+1{{invalid OpenACC clause 'clause'}}
59 #pragma acc data clause list
60   for(;;){}
61   // expected-error@+2{{OpenACC 'enter data' construct must have at least one 'copyin', 'create' or 'attach' clause}}
62   // expected-error@+1{{invalid OpenACC clause 'clause'}}
63 #pragma acc enter data clause list
64   for(;;){}
65   // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
66   // expected-error@+1{{invalid OpenACC clause 'clause'}}
67 #pragma acc exit data clause list
68   for(;;){}
69   // expected-error@+1{{invalid OpenACC directive 'enter invalid'}}
70 #pragma acc enter invalid
71   for(;;){}
72   // expected-error@+1{{invalid OpenACC directive 'exit invalid'}}
73 #pragma acc exit invalid
74   for(;;){}
75   // expected-error@+1{{invalid OpenACC directive 'enter'}}
76 #pragma acc enter
77   for(;;){}
78   // expected-error@+1{{expected identifier}}
79 #pragma acc exit }
80   for(;;){}
81   // expected-error@+2{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}
82   // expected-error@+1{{invalid OpenACC clause 'clause'}}
83 #pragma acc host_data clause list
84   for(;;){}
85   // expected-error@+1{{invalid OpenACC clause 'clause'}}
86 #pragma acc loop clause list
87   for(int i = 0; i < 6;++i){}
88   // expected-error@+1{{invalid OpenACC clause 'invalid'}}
89 #pragma acc parallel invalid clause list
90   for(int i = 0; i < 6;++i){}
91   // expected-error@+1{{invalid OpenACC clause 'invalid'}}
92 #pragma acc serial invalid clause list
93   for(int i = 0; i < 6;++i){}
94   // expected-error@+1{{invalid OpenACC clause 'clause'}}
95 #pragma acc parallel loop clause list
96   for(int i = 0; i < 6;++i){}
97 
98 #pragma acc parallel loop
99   for(int i = 0; i < 6;++i){}
100   // expected-error@+1{{invalid OpenACC clause 'clause'}}
101 #pragma acc serial loop clause list
102   for(int i = 0; i < 6;++i){}
103 #pragma acc serial loop
104   for(int i = 0; i < 6;++i){}
105   // expected-error@+1{{invalid OpenACC clause 'clause'}}
106 #pragma acc kernels loop clause list
107   for(int i = 0; i < 6;++i){}
108 #pragma acc kernels loop
109   for(int i = 0; i < 6;++i){}
110 
111   int i = 0, j = 0, k = 0;
112   // expected-warning@+1{{OpenACC construct 'atomic' 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 construct 'atomic' 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 construct 'atomic' not yet implemented, pragma ignored}}
121 #pragma acc atomic garbage clause list
122   i = j;
123   // expected-warning@+1{{OpenACC construct 'atomic' 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 construct 'atomic' 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 construct 'atomic' 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 construct 'atomic' 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 construct 'declare' not yet implemented, pragma ignored}}
142 #pragma acc declare clause list
143   for(;;){}
144   // expected-error@+1{{invalid OpenACC clause 'clause'}}
145 #pragma acc init clause list
146   for(;;){}
147   // expected-error@+1{{invalid OpenACC clause 'clause'}}
148 #pragma acc shutdown clause list
149   for(;;){}
150   // expected-error@+2{{invalid OpenACC clause 'clause'}}
151   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
152 #pragma acc set clause list
153   for(;;){}
154   // expected-error@+2{{OpenACC 'update' construct must have at least one 'self', 'host' or 'device' clause}}
155   // expected-error@+1{{invalid OpenACC clause 'clause'}}
156 #pragma acc update clause list
157   for(;;){}
158 }
159 
160 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
161 #pragma acc routine
162 void routine_func();
163 // expected-error@+2{{invalid OpenACC clause 'clause'}}
164 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
165 #pragma acc routine clause list
166 void routine_func();
167 
168 // expected-error@+2{{use of undeclared identifier 'func_name'}}
169 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
170 #pragma acc routine (func_name)
171 // expected-error@+3{{use of undeclared identifier 'func_name'}}
172 // expected-error@+2{{invalid OpenACC clause 'clause'}}
173 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
174 #pragma acc routine (func_name) clause list
175 
176 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
177 #pragma acc routine (routine_func)
178 // expected-error@+2{{invalid OpenACC clause 'clause'}}
179 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
180 #pragma acc routine (routine_func) clause list
181 
182 // expected-error@+3{{expected ')'}}
183 // expected-note@+2{{to match this '('}}
184 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
185 #pragma acc routine (routine_func())
186 
187 // expected-error@+2{{expected identifier}}
188 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
189 #pragma acc routine()
190 
191 // expected-error@+2{{expected identifier}}
192 // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
193 #pragma acc routine(int)
194