[flang][OpenMP] 'no_openmp_constructs' added to clang broke flang build (#126145)
[llvm-project.git] / clang / test / SemaOpenACC / combined-construct-vector-clause.cpp
blobf96a36c1e395beef46b8150d4255d3d0f61575d3
1 // RUN: %clang_cc1 %s -fopenacc -verify
3 template<typename T, unsigned I>
4 void TemplUses(T t) {
6 #pragma acc parallel loop vector
7 for(int j = 0; j < 5; ++j);
9 #pragma acc parallel loop vector(I)
10 for(int j = 0; j < 5; ++j);
12 #pragma acc parallel loop vector(length:I)
13 for(int j = 0; j < 5; ++j);
15 #pragma acc serial loop vector
16 for(int j = 0; j < 5; ++j);
18 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
19 #pragma acc serial loop vector(I)
20 for(int j = 0; j < 5; ++j);
22 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
23 #pragma acc serial loop vector(length:I)
24 for(int j = 0; j < 5; ++j);
26 #pragma acc kernels loop vector
27 for(int j = 0; j < 5; ++j);
29 #pragma acc kernels loop vector(I)
30 for(int j = 0; j < 5; ++j);
32 #pragma acc kernels loop vector(length:I)
33 for(int j = 0; j < 5; ++j);
35 #pragma acc kernels loop vector vector_length(t)
36 for(int j = 0; j < 5; ++j);
38 #pragma acc kernels loop vector_length(t) vector
39 for(int j = 0; j < 5; ++j);
41 // expected-error@+2{{'vector_length' clause not allowed on a 'kernels loop' construct that has a 'vector' clause with an argument}}
42 // expected-note@+1{{previous clause is here}}
43 #pragma acc kernels loop vector(I) vector_length(t)
44 for(int j = 0; j < 5; ++j);
46 // expected-error@+2{{'length' argument to 'vector' clause not allowed on a 'kernels loop' construct that has a 'vector_length' clause}}
47 // expected-note@+1{{previous clause is here}}
48 #pragma acc kernels loop vector_length(t) vector(I)
49 for(int j = 0; j < 5; ++j);
51 #pragma acc parallel loop vector
52 for(int j = 0; j < 5; ++j) {
53 // expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
54 // expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}
55 // expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}
56 // expected-note@-5 3{{previous clause is here}}
57 #pragma acc loop vector worker, gang
58 for(int j = 0; j < 5; ++j);
60 #pragma acc parallel loop vector
61 for(int j = 0; j < 5; ++j) {
62 #pragma acc serial loop vector worker, gang
63 for(int j = 0; j < 5; ++j);
66 #pragma acc loop vector
67 for(int j = 0; j < 5; ++j) {
68 #pragma acc serial loop vector worker, gang
69 for(int j = 0; j < 5; ++j);
72 #pragma acc kernels vector_length(t)
73 for(int j = 0; j < 5; ++j) {
74 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
75 #pragma acc serial loop vector(I)
76 for(int j = 0; j < 5; ++j);
79 #pragma acc kernels vector_length(t)
80 for(int j = 0; j < 5; ++j) {
81 #pragma acc parallel loop vector(I)
82 for(int j = 0; j < 5; ++j);
86 void uses() {
87 TemplUses<int, 5>(5);
89 unsigned I;
90 int t;
92 #pragma acc parallel loop vector
93 for(int j = 0; j < 5; ++j);
95 #pragma acc parallel loop vector(I)
96 for(int j = 0; j < 5; ++j);
98 #pragma acc parallel loop vector(length:I)
99 for(int j = 0; j < 5; ++j);
101 #pragma acc serial loop vector
102 for(int j = 0; j < 5; ++j);
104 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
105 #pragma acc serial loop vector(I)
106 for(int j = 0; j < 5; ++j);
108 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
109 #pragma acc serial loop vector(length:I)
110 for(int j = 0; j < 5; ++j);
112 #pragma acc kernels loop vector
113 for(int j = 0; j < 5; ++j);
115 #pragma acc kernels loop vector(I)
116 for(int j = 0; j < 5; ++j);
118 #pragma acc kernels loop vector(length:I)
119 for(int j = 0; j < 5; ++j);
121 #pragma acc kernels loop vector vector_length(t)
122 for(int j = 0; j < 5; ++j);
124 #pragma acc kernels loop vector_length(t) vector
125 for(int j = 0; j < 5; ++j);
127 // expected-error@+2{{'vector_length' clause not allowed on a 'kernels loop' construct that has a 'vector' clause with an argument}}
128 // expected-note@+1{{previous clause is here}}
129 #pragma acc kernels loop vector(I) vector_length(t)
130 for(int j = 0; j < 5; ++j);
132 // expected-error@+2{{'length' argument to 'vector' clause not allowed on a 'kernels loop' construct that has a 'vector_length' clause}}
133 // expected-note@+1{{previous clause is here}}
134 #pragma acc kernels loop vector_length(t) vector(I)
135 for(int j = 0; j < 5; ++j);
137 #pragma acc parallel loop vector
138 for(int j = 0; j < 5; ++j) {
139 // expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
140 // expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}
141 // expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}
142 // expected-note@-5 3{{previous clause is here}}
143 #pragma acc loop vector worker, gang
144 for(int j = 0; j < 5; ++j);
146 #pragma acc parallel loop vector
147 for(int j = 0; j < 5; ++j) {
148 #pragma acc serial loop vector worker, gang
149 for(int j = 0; j < 5; ++j);
152 #pragma acc loop vector
153 for(int j = 0; j < 5; ++j) {
154 #pragma acc serial loop vector worker, gang
155 for(int j = 0; j < 5; ++j);
158 #pragma acc kernels vector_length(t)
159 for(int j = 0; j < 5; ++j) {
160 #pragma acc parallel loop vector(I)
161 for(int j = 0; j < 5; ++j);
164 #pragma acc kernels vector_length(t)
165 for(int j = 0; j < 5; ++j) {
166 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
167 #pragma acc serial loop vector(I)
168 for(int j = 0; j < 5; ++j);