xref: /llvm-project/clang/test/SemaOpenACC/data-construct-wait-clause.c (revision fbb14dd97702db242a31e1b36ca8a3554a73c212)
1 // RUN: %clang_cc1 %s -fopenacc -verify
2 
3 struct NotConvertible{} NC;
4 short getS();
5 int getI();
6 
7 void uses() {
8   int arr[5];
9 
10 #pragma acc data copyin(arr[0]) wait
11   ;
12 
13 #pragma acc enter data copyin(arr[0]) wait()
14 
15 #pragma acc exit data copyout(arr[0]) wait(getS(), getI())
16 
17   // expected-error@+1{{OpenACC 'wait' clause is not valid on 'host_data' directive}}
18 #pragma acc host_data use_device(arr) wait(getS(), getI())
19   ;
20 
21 #pragma acc data copyin(arr[0]) wait(devnum:getS(): getI())
22   ;
23 
24 #pragma acc enter data copyin(arr[0]) wait(devnum:getS(): queues: getI()) wait(devnum:getI(): queues: getS(), getI(), 5)
25 
26   // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}}
27 #pragma acc exit data copyout(arr[0]) wait(devnum:NC : 5)
28 
29   // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}}
30 #pragma acc data copyin(arr[0]) wait(devnum:5 : NC)
31   ;
32 
33   // expected-error@+3{{OpenACC clause 'wait' requires expression of integer type ('int[5]' invalid)}}
34   // expected-error@+2{{OpenACC clause 'wait' requires expression of integer type ('int[5]' invalid)}}
35   // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}}
36 #pragma acc enter data copyin(arr[0]) wait(devnum:arr : queues: arr, NC, 5)
37 
38   // expected-error@+1{{OpenACC 'wait' clause is not valid on 'loop' directive}}
39 #pragma acc loop wait
40   for(int i = 5; i < 10;++i);
41 }
42