1 // RUN: %clang_cc1 %s -fopenacc -verify 2 3 #define MACRO +FOO 4 5 void uses() { 6 typedef struct S{} STy; 7 STy SImpl; 8 9 #pragma acc parallel loop device_type(I) 10 for(int i = 0; i < 5; ++i); 11 #pragma acc serial loop device_type(S) dtype(STy) 12 for(int i = 0; i < 5; ++i); 13 #pragma acc kernels loop dtype(SImpl) 14 for(int i = 0; i < 5; ++i); 15 #pragma acc kernels loop dtype(int) device_type(*) 16 for(int i = 0; i < 5; ++i); 17 #pragma acc kernels loop dtype(true) device_type(false) 18 for(int i = 0; i < 5; ++i); 19 20 // expected-error@+1{{expected identifier}} 21 #pragma acc kernels loop dtype(int, *) 22 for(int i = 0; i < 5; ++i); 23 24 #pragma acc parallel loop device_type(I, int) 25 for(int i = 0; i < 5; ++i); 26 // expected-error@+2{{expected ','}} 27 // expected-error@+1{{expected identifier}} 28 #pragma acc kernels loop dtype(int{}) 29 for(int i = 0; i < 5; ++i); 30 // expected-error@+1{{expected identifier}} 31 #pragma acc kernels loop dtype(5) 32 for(int i = 0; i < 5; ++i); 33 // expected-error@+1{{expected identifier}} 34 #pragma acc kernels loop dtype(MACRO) 35 for(int i = 0; i < 5; ++i); 36 37 // Compute constructs allow 'async', 'wait', num_gangs', 'num_workers', 38 // 'vector_length' after 'device_type', loop allows 'collapse', 'gang', 39 // 'worker', 'vector', 'seq', 'independent', 'auto', and 'tile' after 40 // 'device_type'. 41 42 #pragma acc parallel loop device_type(*) vector 43 for(int i = 0; i < 5; ++i); 44 45 // expected-error@+1{{OpenACC 'finalize' clause is not valid on 'serial loop' directive}} 46 #pragma acc serial loop device_type(*) finalize 47 for(int i = 0; i < 5; ++i); 48 // expected-error@+1{{OpenACC 'if_present' clause is not valid on 'kernels loop' directive}} 49 #pragma acc kernels loop device_type(*) if_present 50 for(int i = 0; i < 5; ++i); 51 #pragma acc parallel loop device_type(*) seq 52 for(int i = 0; i < 5; ++i); 53 #pragma acc serial loop device_type(*) independent 54 for(int i = 0; i < 5; ++i); 55 #pragma acc kernels loop device_type(*) auto 56 for(int i = 0; i < 5; ++i); 57 #pragma acc parallel loop device_type(*) worker 58 for(int i = 0; i < 5; ++i); 59 // expected-error@+2{{OpenACC clause 'nohost' may not follow a 'device_type' clause in a 'serial loop' construct}} 60 // expected-note@+1{{previous clause is here}} 61 #pragma acc serial loop device_type(*) nohost 62 for(int i = 0; i < 5; ++i); 63 // expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a 'kernels loop' construct}} 64 // expected-note@+1{{previous clause is here}} 65 #pragma acc kernels loop device_type(*) default(none) 66 for(int i = 0; i < 5; ++i); 67 // expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'parallel loop' construct}} 68 // expected-note@+1{{previous clause is here}} 69 #pragma acc parallel loop device_type(*) if(1) 70 for(int i = 0; i < 5; ++i); 71 // expected-error@+2{{OpenACC clause 'self' may not follow a 'device_type' clause in a 'serial loop' construct}} 72 // expected-note@+1{{previous clause is here}} 73 #pragma acc serial loop device_type(*) self 74 for(int i = 0; i < 5; ++i); 75 76 int Var; 77 int *VarPtr; 78 // expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a 'kernels loop' construct}} 79 // expected-note@+1{{previous clause is here}} 80 #pragma acc kernels loop device_type(*) copy(Var) 81 for(int i = 0; i < 5; ++i); 82 // expected-error@+2{{OpenACC clause 'pcopy' may not follow a 'device_type' clause in a 'parallel loop' construct}} 83 // expected-note@+1{{previous clause is here}} 84 #pragma acc parallel loop device_type(*) pcopy(Var) 85 for(int i = 0; i < 5; ++i); 86 // expected-error@+2{{OpenACC clause 'present_or_copy' may not follow a 'device_type' clause in a 'serial loop' construct}} 87 // expected-note@+1{{previous clause is here}} 88 #pragma acc serial loop device_type(*) present_or_copy(Var) 89 for(int i = 0; i < 5; ++i); 90 // expected-error@+1{{OpenACC 'use_device' clause is not valid on 'kernels loop' directive}} 91 #pragma acc kernels loop device_type(*) use_device(Var) 92 for(int i = 0; i < 5; ++i); 93 // expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a 'parallel loop' construct}} 94 // expected-note@+1{{previous clause is here}} 95 #pragma acc parallel loop device_type(*) attach(Var) 96 for(int i = 0; i < 5; ++i); 97 // expected-error@+1{{OpenACC 'delete' clause is not valid on 'serial loop' directive}} 98 #pragma acc serial loop device_type(*) delete(Var) 99 for(int i = 0; i < 5; ++i); 100 // expected-error@+1{{OpenACC 'detach' clause is not valid on 'kernels loop' directive}} 101 #pragma acc kernels loop device_type(*) detach(Var) 102 for(int i = 0; i < 5; ++i); 103 // expected-error@+1{{OpenACC 'device' clause is not valid on 'parallel loop' directive}} 104 #pragma acc parallel loop device_type(*) device(VarPtr) 105 for(int i = 0; i < 5; ++i); 106 // expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a 'serial loop' construct}} 107 // expected-note@+1{{previous clause is here}} 108 #pragma acc serial loop device_type(*) deviceptr(VarPtr) 109 for(int i = 0; i < 5; ++i); 110 // expected-error@+2{{OpenACC clause 'device_resident' may not follow a 'device_type' clause in a 'kernels loop' construct}} 111 // expected-note@+1{{previous clause is here}} 112 #pragma acc kernels loop device_type(*) device_resident(VarPtr) 113 for(int i = 0; i < 5; ++i); 114 // expected-error@+2{{OpenACC clause 'firstprivate' may not follow a 'device_type' clause in a 'parallel loop' construct}} 115 // expected-note@+1{{previous clause is here}} 116 #pragma acc parallel loop device_type(*) firstprivate(Var) 117 for(int i = 0; i < 5; ++i); 118 // expected-error@+1{{OpenACC 'host' clause is not valid on 'serial loop' directive}} 119 #pragma acc serial loop device_type(*) host(Var) 120 for(int i = 0; i < 5; ++i); 121 // expected-error@+2{{OpenACC clause 'link' may not follow a 'device_type' clause in a 'parallel loop' construct}} 122 // expected-note@+1{{previous clause is here}} 123 #pragma acc parallel loop device_type(*) link(Var) 124 for(int i = 0; i < 5; ++i); 125 // expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a 'serial loop' construct}} 126 // expected-note@+1{{previous clause is here}} 127 #pragma acc serial loop device_type(*) no_create(Var) 128 for(int i = 0; i < 5; ++i); 129 // expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a 'kernels loop' construct}} 130 // expected-note@+1{{previous clause is here}} 131 #pragma acc kernels loop device_type(*) present(Var) 132 for(int i = 0; i < 5; ++i); 133 // expected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a 'parallel loop' construct}} 134 // expected-note@+1{{previous clause is here}} 135 #pragma acc parallel loop device_type(*) private(Var) 136 for(int i = 0; i < 5; ++i); 137 // expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a 'serial loop' construct}} 138 // expected-note@+1{{previous clause is here}} 139 #pragma acc serial loop device_type(*) copyout(Var) 140 for(int i = 0; i < 5; ++i); 141 // expected-error@+2{{OpenACC clause 'pcopyout' may not follow a 'device_type' clause in a 'serial loop' construct}} 142 // expected-note@+1{{previous clause is here}} 143 #pragma acc serial loop device_type(*) pcopyout(Var) 144 for(int i = 0; i < 5; ++i); 145 // expected-error@+2{{OpenACC clause 'present_or_copyout' may not follow a 'device_type' clause in a 'parallel loop' construct}} 146 // expected-note@+1{{previous clause is here}} 147 #pragma acc parallel loop device_type(*) present_or_copyout(Var) 148 for(int i = 0; i < 5; ++i); 149 // expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a 'serial loop' construct}} 150 // expected-note@+1{{previous clause is here}} 151 #pragma acc serial loop device_type(*) copyin(Var) 152 for(int i = 0; i < 5; ++i); 153 // expected-error@+2{{OpenACC clause 'pcopyin' may not follow a 'device_type' clause in a 'serial loop' construct}} 154 // expected-note@+1{{previous clause is here}} 155 #pragma acc serial loop device_type(*) pcopyin(Var) 156 for(int i = 0; i < 5; ++i); 157 // expected-error@+2{{OpenACC clause 'present_or_copyin' may not follow a 'device_type' clause in a 'parallel loop' construct}} 158 // expected-note@+1{{previous clause is here}} 159 #pragma acc parallel loop device_type(*) present_or_copyin(Var) 160 for(int i = 0; i < 5; ++i); 161 // expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a 'serial loop' construct}} 162 // expected-note@+1{{previous clause is here}} 163 #pragma acc serial loop device_type(*) create(Var) 164 for(int i = 0; i < 5; ++i); 165 // expected-error@+2{{OpenACC clause 'pcreate' may not follow a 'device_type' clause in a 'serial loop' construct}} 166 // expected-note@+1{{previous clause is here}} 167 #pragma acc serial loop device_type(*) pcreate(Var) 168 for(int i = 0; i < 5; ++i); 169 // expected-error@+2{{OpenACC clause 'present_or_create' may not follow a 'device_type' clause in a 'parallel loop' construct}} 170 // expected-note@+1{{previous clause is here}} 171 #pragma acc parallel loop device_type(*) present_or_create(Var) 172 for(int i = 0; i < 5; ++i); 173 // expected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a 'serial loop' construct}} 174 // expected-note@+1{{previous clause is here}} 175 #pragma acc serial loop device_type(*) reduction(+:Var) 176 for(int i = 0; i < 5; ++i); 177 #pragma acc serial loop device_type(*) collapse(1) 178 for(int i = 0; i < 5; ++i); 179 // expected-error@+2{{OpenACC clause 'bind' may not follow a 'device_type' clause in a 'parallel loop' construct}} 180 // expected-note@+1{{previous clause is here}} 181 #pragma acc parallel loop device_type(*) bind(Var) 182 for(int i = 0; i < 5; ++i); 183 // expected-error@+1{{OpenACC 'vector_length' clause is not valid on 'serial loop' directive}} 184 #pragma acc serial loop device_type(*) vector_length(1) 185 for(int i = 0; i < 5; ++i); 186 // expected-error@+1{{OpenACC 'num_gangs' clause is not valid on 'serial loop' directive}} 187 #pragma acc serial loop device_type(*) num_gangs(1) 188 for(int i = 0; i < 5; ++i); 189 #pragma acc parallel loop device_type(*) num_workers(1) 190 for(int i = 0; i < 5; ++i); 191 // expected-error@+1{{OpenACC 'device_num' clause is not valid on 'serial loop' directive}} 192 #pragma acc serial loop device_type(*) device_num(1) 193 for(int i = 0; i < 5; ++i); 194 // expected-error@+1{{OpenACC 'default_async' clause is not valid on 'serial loop' directive}} 195 #pragma acc serial loop device_type(*) default_async(1) 196 for(int i = 0; i < 5; ++i); 197 #pragma acc parallel loop device_type(*) async 198 for(int i = 0; i < 5; ++i); 199 200 #pragma acc serial loop device_type(*) tile(*, 1) 201 for(int j = 0; j < 5; ++j) 202 for(int i = 0; i < 5; ++i); 203 204 #pragma acc serial loop dtype(*) gang 205 for(int i = 0; i < 5; ++i); 206 #pragma acc parallel loop device_type(*) wait 207 for(int i = 0; i < 5; ++i); 208 } 209