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