xref: /llvm-project/clang/test/ParserOpenACC/parse-constructs.c (revision 553fa204ed5ab4c48bc6080451df24310c00e69c)
164b6ef02SErich Keane // RUN: %clang_cc1 %s -verify -fopenacc
264b6ef02SErich Keane 
364b6ef02SErich Keane void func() {
461683376Serichkeane 
5db4ea21dSerichkeane   // expected-error@+1{{expected OpenACC directive}}
661683376Serichkeane #pragma acc
761683376Serichkeane   for(;;){}
861683376Serichkeane 
9db4ea21dSerichkeane   // expected-error@+2{{expected OpenACC directive}}
10db4ea21dSerichkeane   // expected-error@+1{{invalid OpenACC clause 'whatever'}}
11731361cdSerichkeane #pragma acc(whatever) routine
12731361cdSerichkeane 
13db4ea21dSerichkeane   // expected-error@+2{{expected OpenACC directive}}
14db4ea21dSerichkeane   // expected-error@+1{{invalid OpenACC clause 'routine'}}
15731361cdSerichkeane #pragma acc) routine
16731361cdSerichkeane 
17db4ea21dSerichkeane   // expected-error@+1{{invalid OpenACC directive 'invalid'}}
1864b6ef02SErich Keane #pragma acc invalid
1964b6ef02SErich Keane   for(;;){}
2064b6ef02SErich Keane 
21cb891127SErich Keane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
2264b6ef02SErich Keane #pragma acc parallel clause list
2364b6ef02SErich Keane   for(;;){}
24cb891127SErich Keane   // expected-error@+2{{expected clause-list or newline in OpenACC directive}}
25cb891127SErich Keane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
2664b6ef02SErich Keane #pragma acc parallel() clause list
279bd5f808Serichkeane   for(;;){}
28cb891127SErich Keane   // expected-error@+3{{expected clause-list or newline in OpenACC directive}}
29cb891127SErich Keane   // expected-error@+2{{expected ')'}}
30cb891127SErich Keane   // expected-note@+1{{to match this '('}}
31cb891127SErich Keane #pragma acc parallel( clause list
32cb891127SErich Keane   for(;;){}
33cb891127SErich Keane   // expected-error@+2{{expected clause-list or newline in OpenACC directive}}
34cb891127SErich Keane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
35cb891127SErich Keane #pragma acc parallel() clause list
36cb891127SErich Keane   for(;;){}
37cb891127SErich Keane   // expected-error@+3{{expected clause-list or newline in OpenACC directive}}
38cb891127SErich Keane   // expected-error@+2{{expected ')'}}
39cb891127SErich Keane   // expected-note@+1{{to match this '('}}
40ba1c869fSErich Keane #pragma acc parallel( clause list
41ba1c869fSErich Keane   for(;;){}
42bb97c992Serichkeane   // expected-error@+2{{expected clause-list or newline in OpenACC directive}}
43bb97c992Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
44db4ea21dSerichkeane #pragma acc serial() clause list
45db4ea21dSerichkeane   for(;;){}
46bb97c992Serichkeane   // expected-error@+3{{expected clause-list or newline in OpenACC directive}}
47bb97c992Serichkeane   // expected-error@+2{{expected ')'}}
48bb97c992Serichkeane   // expected-note@+1{{to match this '('}}
49db4ea21dSerichkeane #pragma acc serial( clause list
50db4ea21dSerichkeane   for(;;){}
51bb97c992Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
529bd5f808Serichkeane #pragma acc serial clause list
539bd5f808Serichkeane   for(;;){}
54bb97c992Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
559bd5f808Serichkeane #pragma acc kernels clause list
569bd5f808Serichkeane   for(;;){}
57bfc2dbe0Serichkeane     // expected-error@+2{{OpenACC 'data' construct must have at least one 'copy', 'copyin', 'copyout', 'create', 'no_create', 'present', 'deviceptr', 'attach' or 'default' clause}}
58010d0115Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
599bd5f808Serichkeane #pragma acc data clause list
609bd5f808Serichkeane   for(;;){}
61bfc2dbe0Serichkeane   // expected-error@+2{{OpenACC 'enter data' construct must have at least one 'copyin', 'create' or 'attach' clause}}
62010d0115Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
63147b38b1SErich Keane #pragma acc enter data clause list
64147b38b1SErich Keane   for(;;){}
65bfc2dbe0Serichkeane   // expected-error@+2{{OpenACC 'exit data' construct must have at least one 'copyout', 'delete' or 'detach' clause}}
66010d0115Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
67147b38b1SErich Keane #pragma acc exit data clause list
68147b38b1SErich Keane   for(;;){}
69db4ea21dSerichkeane   // expected-error@+1{{invalid OpenACC directive 'enter invalid'}}
70147b38b1SErich Keane #pragma acc enter invalid
71147b38b1SErich Keane   for(;;){}
72db4ea21dSerichkeane   // expected-error@+1{{invalid OpenACC directive 'exit invalid'}}
73147b38b1SErich Keane #pragma acc exit invalid
74147b38b1SErich Keane   for(;;){}
75db4ea21dSerichkeane   // expected-error@+1{{invalid OpenACC directive 'enter'}}
76147b38b1SErich Keane #pragma acc enter
77147b38b1SErich Keane   for(;;){}
78db4ea21dSerichkeane   // expected-error@+1{{expected identifier}}
79147b38b1SErich Keane #pragma acc exit }
80147b38b1SErich Keane   for(;;){}
81bfc2dbe0Serichkeane   // expected-error@+2{{OpenACC 'host_data' construct must have at least one 'use_device' clause}}
82010d0115Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
839bd5f808Serichkeane #pragma acc host_data clause list
849bd5f808Serichkeane   for(;;){}
8542f4e505SErich Keane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
869bd5f808Serichkeane #pragma acc loop clause list
87b0cfbfd7SErich Keane   for(int i = 0; i < 6;++i){}
88cb891127SErich Keane   // expected-error@+1{{invalid OpenACC clause 'invalid'}}
899bd5f808Serichkeane #pragma acc parallel invalid clause list
9039351f8eSerichkeane   for(int i = 0; i < 6;++i){}
91bb97c992Serichkeane   // expected-error@+1{{invalid OpenACC clause 'invalid'}}
92db4ea21dSerichkeane #pragma acc serial invalid clause list
9339351f8eSerichkeane   for(int i = 0; i < 6;++i){}
9439351f8eSerichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
959bd5f808Serichkeane #pragma acc parallel loop clause list
9639351f8eSerichkeane   for(int i = 0; i < 6;++i){}
9770f41022SErich Keane 
9870f41022SErich Keane #pragma acc parallel loop
9939351f8eSerichkeane   for(int i = 0; i < 6;++i){}
10039351f8eSerichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
1019bd5f808Serichkeane #pragma acc serial loop clause list
10239351f8eSerichkeane   for(int i = 0; i < 6;++i){}
10370f41022SErich Keane #pragma acc serial loop
10439351f8eSerichkeane   for(int i = 0; i < 6;++i){}
10539351f8eSerichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
1069bd5f808Serichkeane #pragma acc kernels loop clause list
10739351f8eSerichkeane   for(int i = 0; i < 6;++i){}
10870f41022SErich Keane #pragma acc kernels loop
10939351f8eSerichkeane   for(int i = 0; i < 6;++i){}
1109bd5f808Serichkeane 
11104e9b61cSErich Keane   int i = 0, j = 0, k = 0;
112db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}}
11304e9b61cSErich Keane #pragma acc atomic
11404e9b61cSErich Keane   i = j;
115fdee0a35SErich Keane   // expected-error@+2{{invalid OpenACC clause 'garbage'}}
116db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}}
11704e9b61cSErich Keane #pragma acc atomic garbage
11804e9b61cSErich Keane   i = j;
119fdee0a35SErich Keane   // expected-error@+2{{invalid OpenACC clause 'garbage'}}
120db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}}
12104e9b61cSErich Keane #pragma acc atomic garbage clause list
12204e9b61cSErich Keane   i = j;
123db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}}
12404e9b61cSErich Keane #pragma acc atomic read
12504e9b61cSErich Keane   i = j;
126fdee0a35SErich Keane   // expected-error@+2{{invalid OpenACC clause 'clause'}}
127db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}}
12804e9b61cSErich Keane #pragma acc atomic write clause list
12904e9b61cSErich Keane   i = i + j;
130fdee0a35SErich Keane   // expected-error@+2{{invalid OpenACC clause 'clause'}}
131db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}}
13204e9b61cSErich Keane #pragma acc atomic update clause list
13304e9b61cSErich Keane   i++;
134fdee0a35SErich Keane   // expected-error@+2{{invalid OpenACC clause 'clause'}}
135db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'atomic' not yet implemented, pragma ignored}}
13604e9b61cSErich Keane #pragma acc atomic capture clause list
13704e9b61cSErich Keane   i = j++;
13804e9b61cSErich Keane 
13904e9b61cSErich Keane 
140fdee0a35SErich Keane   // expected-error@+2{{invalid OpenACC clause 'clause'}}
141db4ea21dSerichkeane   // expected-warning@+1{{OpenACC construct 'declare' not yet implemented, pragma ignored}}
1429bd5f808Serichkeane #pragma acc declare clause list
1439bd5f808Serichkeane   for(;;){}
1444bbdb018Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
1459bd5f808Serichkeane #pragma acc init clause list
1469bd5f808Serichkeane   for(;;){}
1474bbdb018Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
1489bd5f808Serichkeane #pragma acc shutdown clause list
1499bd5f808Serichkeane   for(;;){}
150fdee0a35SErich Keane   // expected-error@+2{{invalid OpenACC clause 'clause'}}
15121c785d7Serichkeane   // expected-error@+1{{OpenACC 'set' construct must have at least one 'default_async', 'device_num', 'device_type' or 'if' clause}}
1529bd5f808Serichkeane #pragma acc set clause list
1539bd5f808Serichkeane   for(;;){}
154*553fa204Serichkeane   // expected-error@+2{{OpenACC 'update' construct must have at least one 'self', 'host' or 'device' clause}}
155db81e8c4Serichkeane   // expected-error@+1{{invalid OpenACC clause 'clause'}}
1569bd5f808Serichkeane #pragma acc update clause list
1579bd5f808Serichkeane   for(;;){}
15864b6ef02SErich Keane }
159ba1c869fSErich Keane 
160db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
161ba1c869fSErich Keane #pragma acc routine
162ba1c869fSErich Keane void routine_func();
163fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}}
164db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
165ba1c869fSErich Keane #pragma acc routine clause list
166ba1c869fSErich Keane void routine_func();
167ba1c869fSErich Keane 
168ba1c869fSErich Keane // expected-error@+2{{use of undeclared identifier 'func_name'}}
169db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
170ba1c869fSErich Keane #pragma acc routine (func_name)
171ba1c869fSErich Keane // expected-error@+3{{use of undeclared identifier 'func_name'}}
172fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}}
173db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
174ba1c869fSErich Keane #pragma acc routine (func_name) clause list
175ba1c869fSErich Keane 
176db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
177ba1c869fSErich Keane #pragma acc routine (routine_func)
178fdee0a35SErich Keane // expected-error@+2{{invalid OpenACC clause 'clause'}}
179db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
180ba1c869fSErich Keane #pragma acc routine (routine_func) clause list
181ba1c869fSErich Keane 
182ba1c869fSErich Keane // expected-error@+3{{expected ')'}}
183ba1c869fSErich Keane // expected-note@+2{{to match this '('}}
184db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
185ba1c869fSErich Keane #pragma acc routine (routine_func())
186ba1c869fSErich Keane 
187ba1c869fSErich Keane // expected-error@+2{{expected identifier}}
188db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
189ba1c869fSErich Keane #pragma acc routine()
190ba1c869fSErich Keane 
191ba1c869fSErich Keane // expected-error@+2{{expected identifier}}
192db4ea21dSerichkeane // expected-warning@+1{{OpenACC construct 'routine' not yet implemented, pragma ignored}}
193ba1c869fSErich Keane #pragma acc routine(int)
194