xref: /llvm-project/clang/test/SemaOpenACC/compute-construct-async-clause.c (revision b0cfbfd74bfd9d077f7c1854a1b38dcbe9d402e4)
1 // RUN: %clang_cc1 %s -fopenacc -verify
2 
3 short getS();
4 
5 void Test() {
6 #pragma acc parallel async
7   while(1);
8 #pragma acc parallel async(1)
9   while(1);
10 #pragma acc kernels async(1)
11   while(1);
12 #pragma acc kernels async(-51)
13   while(1);
14 
15 #pragma acc serial async(1)
16   while(1);
17 
18   // expected-error@+2{{expected ')'}}
19   // expected-note@+1{{to match this '('}}
20 #pragma acc serial async(1, 2)
21   while(1);
22 
23   struct NotConvertible{} NC;
24   // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}}
25 #pragma acc parallel async(NC)
26   while(1);
27 
28 #pragma acc kernels async(getS())
29   while(1);
30 
31   struct Incomplete *SomeIncomplete;
32 
33   // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct Incomplete' invalid)}}
34 #pragma acc kernels async(*SomeIncomplete)
35   while(1);
36 
37   enum E{A} SomeE;
38 
39 #pragma acc kernels async(SomeE)
40   while(1);
41 
42   // expected-error@+1{{OpenACC 'async' clause is not valid on 'loop' directive}}
43 #pragma acc loop async(1)
44   for(int i = 5; i < 10;++i);
45 }
46