xref: /llvm-project/clang/test/ParserOpenACC/parse-cache-construct.c (revision fdee0a35d9da1febfab20ead8565cf6167103b51)
1 // RUN: %clang_cc1 %s -verify -fopenacc
2 
3 char *getArrayPtr();
4 void func() {
5   char Array[10];
6   char *ArrayPtr = getArrayPtr();
7   int *readonly;
8 
9   for (int i = 0; i < 10; ++i) {
10     // expected-error@+2{{expected '('}}
11     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
12     #pragma acc cache
13   }
14 
15   for (int i = 0; i < 10; ++i) {
16     // expected-error@+3{{expected '('}}
17     // expected-error@+2{{invalid OpenACC clause 'clause'}}
18     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
19     #pragma acc cache clause list
20   }
21 
22   for (int i = 0; i < 10; ++i) {
23     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
24     #pragma acc cache()
25   }
26 
27   for (int i = 0; i < 10; ++i) {
28     // expected-error@+2{{invalid OpenACC clause 'clause'}}
29     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
30     #pragma acc cache() clause-list
31   }
32 
33   for (int i = 0; i < 10; ++i) {
34     // expected-error@+3{{expected ')'}}
35     // expected-note@+2{{to match this '('}}
36     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
37     #pragma acc cache(
38   }
39 
40   for (int i = 0; i < 10; ++i) {
41     // expected-error@+4{{use of undeclared identifier 'invalid'}}
42     // expected-error@+3{{expected ')'}}
43     // expected-note@+2{{to match this '('}}
44     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
45     #pragma acc cache(invalid
46   }
47 
48   for (int i = 0; i < 10; ++i) {
49     // expected-error@+4{{expected '['}}
50     // expected-error@+3{{expected ')'}}
51     // expected-note@+2{{to match this '('}}
52     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
53     #pragma acc cache(ArrayPtr
54   }
55 
56   for (int i = 0; i < 10; ++i) {
57     // expected-error@+2{{use of undeclared identifier 'invalid'}}
58     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
59     #pragma acc cache(invalid)
60   }
61 
62   for (int i = 0; i < 10; ++i) {
63     // expected-error@+2{{expected '['}}
64     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
65     #pragma acc cache(ArrayPtr)
66   }
67 
68   for (int i = 0; i < 10; ++i) {
69     // expected-error@+4{{expected expression}}
70     // expected-error@+3{{expected ')'}}
71     // expected-note@+2{{to match this '('}}
72     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
73     #pragma acc cache(ArrayPtr[
74   }
75 
76   for (int i = 0; i < 10; ++i) {
77     // expected-error@+2{{expected expression}}
78     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
79     #pragma acc cache(ArrayPtr[, 5)
80   }
81 
82   for (int i = 0; i < 10; ++i) {
83     // expected-error@+2{{expected expression}}
84     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
85     #pragma acc cache(Array[)
86   }
87 
88   for (int i = 0; i < 10; ++i) {
89     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
90     #pragma acc cache(Array[*readonly])
91   }
92 
93   for (int i = 0; i < 10; ++i) {
94     // expected-error@+4{{expected expression}}
95     // expected-error@+3{{expected ')'}}
96     // expected-note@+2{{to match this '('}}
97     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
98     #pragma acc cache(Array[*readonly:
99   }
100 
101   for (int i = 0; i < 10; ++i) {
102     // expected-error@+2{{expected '['}}
103     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
104     #pragma acc cache(readonly)
105   }
106 
107   for (int i = 0; i < 10; ++i) {
108     // expected-error@+2{{expected '['}}
109     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
110     #pragma acc cache(readonly:ArrayPtr)
111   }
112 
113   for (int i = 0; i < 10; ++i) {
114     // expected-error@+2{{expected expression}}
115     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
116     #pragma acc cache(readonly:ArrayPtr[5:])
117   }
118 
119   for (int i = 0; i < 10; ++i) {
120     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
121     #pragma acc cache(readonly:ArrayPtr[5:*readonly])
122   }
123 
124   for (int i = 0; i < 10; ++i) {
125     // expected-error@+2{{expected '['}}
126     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
127     #pragma acc cache(readonly:ArrayPtr[5:*readonly], Array)
128   }
129 
130   for (int i = 0; i < 10; ++i) {
131     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
132     #pragma acc cache(readonly:ArrayPtr[5:*readonly], Array[*readonly:3])
133   }
134 
135   for (int i = 0; i < 10; ++i) {
136     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
137     #pragma acc cache(readonly:ArrayPtr[5 + i:*readonly], Array[*readonly + i:3])
138   }
139 
140   for (int i = 0; i < 10; ++i) {
141     // expected-error@+4{{expected identifier}}
142     // expected-error@+3{{expected ')'}}
143     // expected-note@+2{{to match this '('}}
144     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
145     #pragma acc cache(readonly:ArrayPtr[5:*readonly],
146   }
147 
148   for (int i = 0; i < 10; ++i) {
149     // expected-error@+2{{expected identifier}}
150     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
151     #pragma acc cache(readonly:ArrayPtr[5:*readonly],)
152   }
153 
154   for (int i = 0; i < 10; ++i) {
155     // expected-warning@+2{{left operand of comma operator has no effect}}
156     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
157     #pragma acc cache(readonly:ArrayPtr[5,6:*readonly])
158   }
159 
160   for (int i = 0; i < 10; ++i) {
161     // expected-warning@+2{{left operand of comma operator has no effect}}
162     // expected-warning@+1{{OpenACC directives not yet implemented, pragma ignored}}
163     #pragma acc cache(readonly:ArrayPtr[5:3, *readonly], ArrayPtr[0])
164   }
165 
166 }
167