1 // RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -ast-dump | FileCheck %s 2 3 // Test this with PCH. 4 // RUN: %clang_cc1 %s -fopenacc -emit-pch -Wno-openacc-deprecated-clause-alias -o %t %s 5 // RUN: %clang_cc1 %s -fopenacc -include-pch %t -Wno-openacc-deprecated-clause-alias -ast-dump-all | FileCheck %s 6 7 #ifndef PCH_HELPER 8 #define PCH_HELPER 9 10 int Global; 11 short GlobalArray[5]; 12 13 void NormalUses(float *PointerParam) { 14 // CHECK: FunctionDecl{{.*}}NormalUses 15 // CHECK: ParmVarDecl 16 // CHECK-NEXT: CompoundStmt 17 18 #pragma acc parallel private(Global, GlobalArray[2]) 19 while(true); 20 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 21 // CHECK-NEXT: private clause 22 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 23 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'short' lvalue 24 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'short *' <ArrayToPointerDecay> 25 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 26 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 2 27 // CHECK-NEXT: WhileStmt 28 // CHECK-NEXT: CXXBoolLiteralExpr 29 // CHECK-NEXT: NullStmt 30 31 #pragma acc parallel private(GlobalArray, PointerParam[Global]) 32 while(true); 33 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 34 // CHECK-NEXT: private clause 35 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 36 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 37 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 38 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 39 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 40 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 41 // CHECK-NEXT: WhileStmt 42 // CHECK-NEXT: CXXBoolLiteralExpr 43 // CHECK-NEXT: NullStmt 44 45 #pragma acc parallel firstprivate(GlobalArray, PointerParam[Global]) 46 while(true); 47 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 48 // CHECK-NEXT: firstprivate clause 49 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 50 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 51 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 52 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 53 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 54 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 55 // CHECK-NEXT: WhileStmt 56 // CHECK-NEXT: CXXBoolLiteralExpr 57 // CHECK-NEXT: NullStmt 58 59 #pragma acc parallel present(GlobalArray, PointerParam[Global]) 60 while(true); 61 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 62 // CHECK-NEXT: present clause 63 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 64 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 65 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 66 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 67 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 68 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 69 // CHECK-NEXT: WhileStmt 70 // CHECK-NEXT: CXXBoolLiteralExpr 71 // CHECK-NEXT: NullStmt 72 73 #pragma acc parallel no_create(GlobalArray, PointerParam[Global]) 74 while(true); 75 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 76 // CHECK-NEXT: no_create clause 77 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 78 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 79 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 80 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 81 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 82 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 83 // CHECK-NEXT: WhileStmt 84 // CHECK-NEXT: CXXBoolLiteralExpr 85 // CHECK-NEXT: NullStmt 86 87 #pragma acc parallel private(GlobalArray) private(PointerParam[Global]) 88 while(true); 89 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 90 // CHECK-NEXT: private clause 91 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 92 // CHECK-NEXT: private clause 93 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 94 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 95 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 96 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 97 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 98 // CHECK-NEXT: WhileStmt 99 // CHECK-NEXT: CXXBoolLiteralExpr 100 // CHECK-NEXT: NullStmt 101 102 #pragma acc parallel copy(GlobalArray) pcopy(PointerParam[Global]) present_or_copy(Global) 103 while(true); 104 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 105 // CHECK-NEXT: copy clause 106 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 107 // CHECK-NEXT: pcopy clause 108 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 109 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 110 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 111 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 112 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 113 // CHECK-NEXT: present_or_copy clause 114 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 115 // CHECK-NEXT: WhileStmt 116 // CHECK-NEXT: CXXBoolLiteralExpr 117 // CHECK-NEXT: NullStmt 118 119 #pragma acc parallel copyin(GlobalArray) pcopyin(readonly: PointerParam[Global]) present_or_copyin(Global) 120 while(true); 121 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 122 // CHECK-NEXT: copyin clause 123 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 124 // CHECK-NEXT: pcopyin clause : readonly 125 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 126 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 127 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 128 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 129 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 130 // CHECK-NEXT: present_or_copyin clause 131 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 132 // CHECK-NEXT: WhileStmt 133 // CHECK-NEXT: CXXBoolLiteralExpr 134 // CHECK-NEXT: NullStmt 135 136 #pragma acc parallel copyout(GlobalArray) pcopyout(zero:PointerParam[Global]) present_or_copyout(Global) 137 while(true); 138 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 139 // CHECK-NEXT: copyout clause 140 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 141 // CHECK-NEXT: pcopyout clause : zero 142 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 143 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 144 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 145 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 146 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 147 // CHECK-NEXT: present_or_copyout clause 148 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 149 // CHECK-NEXT: WhileStmt 150 // CHECK-NEXT: CXXBoolLiteralExpr 151 // CHECK-NEXT: NullStmt 152 153 #pragma acc parallel create(GlobalArray) pcreate(zero:PointerParam[Global]) present_or_create(Global) 154 while(true); 155 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 156 // CHECK-NEXT: create clause 157 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 158 // CHECK-NEXT: pcreate clause : zero 159 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 160 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 161 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 162 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 163 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 164 // CHECK-NEXT: present_or_create clause 165 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 166 // CHECK-NEXT: WhileStmt 167 // CHECK-NEXT: CXXBoolLiteralExpr 168 // CHECK-NEXT: NullStmt 169 170 #pragma acc parallel private(GlobalArray, PointerParam[Global : Global]) 171 while(true); 172 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 173 // CHECK-NEXT: private clause 174 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 175 // CHECK-NEXT: ArraySectionExpr 176 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 177 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' 178 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 179 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 180 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 181 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 182 // CHECK-NEXT: WhileStmt 183 // CHECK-NEXT: CXXBoolLiteralExpr 184 // CHECK-NEXT: NullStmt 185 186 #pragma acc parallel firstprivate(GlobalArray, PointerParam[Global : Global]) 187 while(true); 188 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 189 // CHECK-NEXT: firstprivate clause 190 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 191 // CHECK-NEXT: ArraySectionExpr 192 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 193 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' 194 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 195 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 196 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 197 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 198 // CHECK-NEXT: WhileStmt 199 // CHECK-NEXT: CXXBoolLiteralExpr 200 // CHECK-NEXT: NullStmt 201 202 #pragma acc parallel attach(PointerParam) deviceptr(PointerParam) 203 while (true); 204 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 205 // CHECK-NEXT: attach clause 206 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' 207 // CHECK-NEXT: deviceptr clause 208 // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' 209 // CHECK-NEXT: WhileStmt 210 // CHECK-NEXT: CXXBoolLiteralExpr 211 // CHECK-NEXT: NullStmt 212 } 213 214 // This example is an error typically, but we want to make sure we're properly 215 // capturing NTTPs until instantiation time. 216 template<unsigned I> 217 void UnInstTempl() { 218 // CHECK-NEXT: FunctionTemplateDecl{{.*}} UnInstTempl 219 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}}referenced 'unsigned int' depth 0 index 0 I 220 // CHECK-NEXT: FunctionDecl{{.*}} UnInstTempl 'void ()' 221 // CHECK-NEXT: CompoundStmt 222 #pragma acc parallel private(I) 223 while(true); 224 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 225 // CHECK-NEXT: private clause 226 // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'I' 'unsigned int' 227 // CHECK-NEXT: WhileStmt 228 // CHECK-NEXT: CXXBoolLiteralExpr 229 // CHECK-NEXT: NullStmt 230 #pragma acc parallel firstprivate(I) 231 while(true); 232 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 233 // CHECK-NEXT: firstprivate clause 234 // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'I' 'unsigned int' 235 // CHECK-NEXT: WhileStmt 236 // CHECK-NEXT: CXXBoolLiteralExpr 237 // CHECK-NEXT: NullStmt 238 } 239 240 template<auto &NTTP, typename T, typename U> 241 void TemplUses(T t, U u, T*PointerParam) { 242 // CHECK-NEXT: FunctionTemplateDecl 243 // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP 244 // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T 245 // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U 246 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U, T *)' 247 // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' 248 // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' 249 // CHECK-NEXT: ParmVarDecl{{.*}} referenced PointerParam 'T *' 250 // CHECK-NEXT: CompoundStmt 251 252 253 #pragma acc parallel private(GlobalArray, PointerParam[Global]) 254 while(true); 255 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 256 // CHECK-NEXT: private clause 257 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 258 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'T' lvalue 259 // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}}'PointerParam' 'T *' 260 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 261 // CHECK-NEXT: WhileStmt 262 // CHECK-NEXT: CXXBoolLiteralExpr 263 // CHECK-NEXT: NullStmt 264 265 #pragma acc parallel private(t, u) 266 while(true); 267 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 268 // CHECK-NEXT: private clause 269 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 270 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 271 // CHECK-NEXT: WhileStmt 272 // CHECK-NEXT: CXXBoolLiteralExpr 273 // CHECK-NEXT: NullStmt 274 275 #pragma acc parallel firstprivate(t, u) 276 while(true); 277 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 278 // CHECK-NEXT: firstprivate clause 279 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 280 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 281 // CHECK-NEXT: WhileStmt 282 // CHECK-NEXT: CXXBoolLiteralExpr 283 // CHECK-NEXT: NullStmt 284 285 #pragma acc parallel private(t) private(u) 286 while(true); 287 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 288 // CHECK-NEXT: private clause 289 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 290 // CHECK-NEXT: private clause 291 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 292 // CHECK-NEXT: WhileStmt 293 // CHECK-NEXT: CXXBoolLiteralExpr 294 // CHECK-NEXT: NullStmt 295 296 #pragma acc parallel private(t) private(NTTP, u) 297 while(true); 298 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 299 // CHECK-NEXT: private clause 300 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 301 // CHECK-NEXT: private clause 302 // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 303 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 304 // CHECK-NEXT: WhileStmt 305 // CHECK-NEXT: CXXBoolLiteralExpr 306 // CHECK-NEXT: NullStmt 307 308 #pragma acc parallel private(t) firstprivate(NTTP, u) 309 while(true); 310 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 311 // CHECK-NEXT: private clause 312 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 313 // CHECK-NEXT: firstprivate clause 314 // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 315 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 316 // CHECK-NEXT: WhileStmt 317 // CHECK-NEXT: CXXBoolLiteralExpr 318 // CHECK-NEXT: NullStmt 319 320 #pragma acc parallel no_create(t) present(NTTP, u) 321 while(true); 322 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 323 // CHECK-NEXT: no_create clause 324 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 325 // CHECK-NEXT: present clause 326 // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 327 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 328 // CHECK-NEXT: WhileStmt 329 // CHECK-NEXT: CXXBoolLiteralExpr 330 // CHECK-NEXT: NullStmt 331 332 #pragma acc parallel copy(t) pcopy(NTTP, u) present_or_copy(u[0:t]) 333 while(true); 334 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 335 // CHECK-NEXT: copy clause 336 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 337 // CHECK-NEXT: pcopy clause 338 // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 339 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 340 // CHECK-NEXT: present_or_copy clause 341 // CHECK-NEXT: ArraySectionExpr 342 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 343 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 344 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 345 // CHECK-NEXT: WhileStmt 346 // CHECK-NEXT: CXXBoolLiteralExpr 347 // CHECK-NEXT: NullStmt 348 349 #pragma acc parallel copyin(t) pcopyin(readonly:NTTP, u) present_or_copyin(u[0:t]) 350 while(true); 351 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 352 // CHECK-NEXT: copyin clause 353 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 354 // CHECK-NEXT: pcopyin clause : readonly 355 // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 356 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 357 // CHECK-NEXT: present_or_copyin clause 358 // CHECK-NEXT: ArraySectionExpr 359 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 360 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 361 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 362 // CHECK-NEXT: WhileStmt 363 // CHECK-NEXT: CXXBoolLiteralExpr 364 // CHECK-NEXT: NullStmt 365 366 #pragma acc parallel copyout(t) pcopyout(zero:NTTP, u) present_or_copyout(u[0:t]) 367 while(true); 368 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 369 // CHECK-NEXT: copyout clause 370 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 371 // CHECK-NEXT: pcopyout clause : zero 372 // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 373 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 374 // CHECK-NEXT: present_or_copyout clause 375 // CHECK-NEXT: ArraySectionExpr 376 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 377 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 378 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 379 // CHECK-NEXT: WhileStmt 380 // CHECK-NEXT: CXXBoolLiteralExpr 381 // CHECK-NEXT: NullStmt 382 383 #pragma acc parallel create(t) pcreate(zero: NTTP, u) present_or_create(u[0:t]) 384 while(true); 385 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 386 // CHECK-NEXT: create clause 387 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 388 // CHECK-NEXT: pcreate clause : zero 389 // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 390 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 391 // CHECK-NEXT: present_or_create clause 392 // CHECK-NEXT: ArraySectionExpr 393 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 394 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 395 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 396 // CHECK-NEXT: WhileStmt 397 // CHECK-NEXT: CXXBoolLiteralExpr 398 // CHECK-NEXT: NullStmt 399 400 #pragma acc parallel private(u[0]) 401 while(true); 402 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 403 // CHECK-NEXT: private clause 404 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'<dependent type>' lvalue 405 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 406 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 407 // CHECK-NEXT: WhileStmt 408 // CHECK-NEXT: CXXBoolLiteralExpr 409 // CHECK-NEXT: NullStmt 410 411 #pragma acc parallel private(u[0:t]) 412 while(true); 413 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 414 // CHECK-NEXT: private clause 415 // CHECK-NEXT: ArraySectionExpr 416 // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 417 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 418 // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 419 // CHECK-NEXT: WhileStmt 420 // CHECK-NEXT: CXXBoolLiteralExpr 421 // CHECK-NEXT: NullStmt 422 423 #pragma acc parallel attach(PointerParam) deviceptr(PointerParam) 424 while (true); 425 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 426 // CHECK-NEXT: attach clause 427 // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}} 'PointerParam' 'T *' 428 // CHECK-NEXT: deviceptr clause 429 // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}} 'PointerParam' 'T *' 430 // CHECK-NEXT: WhileStmt 431 // CHECK-NEXT: CXXBoolLiteralExpr 432 // CHECK-NEXT: NullStmt 433 434 // CHECK-NEXT: DeclStmt 435 // CHECK-NEXT: VarDecl{{.*}}EndMarker 436 int EndMarker; 437 438 // Check the instantiated versions of the above. 439 // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *, int *)' implicit_instantiation 440 // CHECK-NEXT: TemplateArgument decl 441 // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' 442 // CHECK-NEXT: TemplateArgument type 'int' 443 // CHECK-NEXT: BuiltinType{{.*}} 'int' 444 // CHECK-NEXT: TemplateArgument type 'int[1]' 445 // CHECK-NEXT: ConstantArrayType{{.*}} 'int[1]'{{.*}} 1 446 // CHECK-NEXT: BuiltinType{{.*}} 'int' 447 // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' 448 // CHECK-NEXT: ParmVarDecl{{.*}} used u 'int *' 449 // CHECK-NEXT: ParmVarDecl{{.*}} used PointerParam 'int *' 450 // CHECK-NEXT: CompoundStmt 451 452 // #pragma acc parallel private(GlobalArray, PointerParam[Global]) 453 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 454 // CHECK-NEXT: private clause 455 // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 456 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue 457 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 458 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}}'PointerParam' 'int *' 459 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 460 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 461 // CHECK-NEXT: WhileStmt 462 // CHECK-NEXT: CXXBoolLiteralExpr 463 // CHECK-NEXT: NullStmt 464 465 // #pragma acc parallel private(t, u) 466 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 467 // CHECK-NEXT: private clause 468 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 469 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 470 // CHECK-NEXT: WhileStmt 471 // CHECK-NEXT: CXXBoolLiteralExpr 472 // CHECK-NEXT: NullStmt 473 474 // #pragma acc parallel firstprivate(t, u) 475 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 476 // CHECK-NEXT: firstprivate clause 477 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 478 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 479 // CHECK-NEXT: WhileStmt 480 // CHECK-NEXT: CXXBoolLiteralExpr 481 // CHECK-NEXT: NullStmt 482 483 // #pragma acc parallel private(t) private(u) 484 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 485 // CHECK-NEXT: private clause 486 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 487 // CHECK-NEXT: private clause 488 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 489 // CHECK-NEXT: WhileStmt 490 // CHECK-NEXT: CXXBoolLiteralExpr 491 // CHECK-NEXT: NullStmt 492 493 // #pragma acc parallel private(t) private(NTTP, u) 494 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 495 // CHECK-NEXT: private clause 496 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 497 // CHECK-NEXT: private clause 498 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 499 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 500 // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 501 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 502 // CHECK-NEXT: WhileStmt 503 // CHECK-NEXT: CXXBoolLiteralExpr 504 // CHECK-NEXT: NullStmt 505 506 // #pragma acc parallel private(t) firstprivate(NTTP, u) 507 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 508 // CHECK-NEXT: private clause 509 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 510 // CHECK-NEXT: firstprivate clause 511 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 512 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 513 // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 514 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 515 // CHECK-NEXT: WhileStmt 516 // CHECK-NEXT: CXXBoolLiteralExpr 517 // CHECK-NEXT: NullStmt 518 519 // #pragma acc parallel no_create(t) present(NTTP, u) 520 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 521 // CHECK-NEXT: no_create clause 522 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 523 // CHECK-NEXT: present clause 524 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 525 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 526 // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 527 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 528 // CHECK-NEXT: WhileStmt 529 // CHECK-NEXT: CXXBoolLiteralExpr 530 // CHECK-NEXT: NullStmt 531 532 //#pragma acc parallel copy(t) pcopy(NTTP, u) copy_or_present(u[0:t]) 533 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 534 // CHECK-NEXT: copy clause 535 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 536 // CHECK-NEXT: pcopy clause 537 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 538 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 539 // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 540 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 541 // CHECK-NEXT: present_or_copy clause 542 // CHECK-NEXT: ArraySectionExpr 543 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 544 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 545 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 546 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 547 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 548 // CHECK-NEXT: WhileStmt 549 // CHECK-NEXT: CXXBoolLiteralExpr 550 // CHECK-NEXT: NullStmt 551 552 //#pragma acc parallel copyin(t) pcopyin(readonly:NTTP, u) present_or_copyin(u[0:t]) 553 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 554 // CHECK-NEXT: copyin clause 555 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 556 // CHECK-NEXT: pcopyin clause : readonly 557 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 558 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 559 // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 560 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 561 // CHECK-NEXT: present_or_copyin clause 562 // CHECK-NEXT: ArraySectionExpr 563 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 564 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 565 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 566 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 567 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 568 // CHECK-NEXT: WhileStmt 569 // CHECK-NEXT: CXXBoolLiteralExpr 570 // CHECK-NEXT: NullStmt 571 572 //#pragma acc parallel copyout(t) pcopyout(zero:NTTP, u) present_or_copyout(u[0:t]) 573 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 574 // CHECK-NEXT: copyout clause 575 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 576 // CHECK-NEXT: pcopyout clause : zero 577 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 578 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 579 // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 580 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 581 // CHECK-NEXT: present_or_copyout clause 582 // CHECK-NEXT: ArraySectionExpr 583 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 584 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 585 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 586 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 587 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 588 // CHECK-NEXT: WhileStmt 589 // CHECK-NEXT: CXXBoolLiteralExpr 590 // CHECK-NEXT: NullStmt 591 592 //#pragma acc parallel create(t) pcreate(zero: NTTP, u) present_or_create(u[0:t]) 593 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 594 // CHECK-NEXT: create clause 595 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 596 // CHECK-NEXT: pcreate clause : zero 597 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 598 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 599 // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 600 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 601 // CHECK-NEXT: present_or_create clause 602 // CHECK-NEXT: ArraySectionExpr 603 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 604 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 605 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 606 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 607 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 608 // CHECK-NEXT: WhileStmt 609 // CHECK-NEXT: CXXBoolLiteralExpr 610 // CHECK-NEXT: NullStmt 611 612 // #pragma acc parallel private(u[0]) 613 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 614 // CHECK-NEXT: private clause 615 // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue 616 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 617 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 618 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 619 // CHECK-NEXT: WhileStmt 620 // CHECK-NEXT: CXXBoolLiteralExpr 621 // CHECK-NEXT: NullStmt 622 623 // #pragma acc parallel private(u[0:t]) 624 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 625 // CHECK-NEXT: private clause 626 // CHECK-NEXT: ArraySectionExpr 627 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 628 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 629 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 630 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 631 // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 632 // CHECK-NEXT: WhileStmt 633 // CHECK-NEXT: CXXBoolLiteralExpr 634 // CHECK-NEXT: NullStmt 635 636 //#pragma acc parallel attach(PointerParam) deviceptr(PointerParam) 637 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 638 // CHECK-NEXT: attach clause 639 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'PointerParam' 'int *' 640 // CHECK-NEXT: deviceptr clause 641 // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'PointerParam' 'int *' 642 // CHECK-NEXT: WhileStmt 643 // CHECK-NEXT: CXXBoolLiteralExpr 644 // CHECK-NEXT: NullStmt 645 646 // CHECK-NEXT: DeclStmt 647 // CHECK-NEXT: VarDecl{{.*}}EndMarker 648 } 649 650 struct S { 651 // CHECK-NEXT: CXXRecordDecl{{.*}} struct S definition 652 // CHECK: CXXRecordDecl{{.*}} implicit struct S 653 int ThisMember; 654 // CHECK-NEXT: FieldDecl{{.*}} ThisMember 'int' 655 int *ThisMemberPtr; 656 // CHECK-NEXT: FieldDecl{{.*}} ThisMemberPtr 'int *' 657 int ThisMemberArray[5]; 658 // CHECK-NEXT: FieldDecl{{.*}} ThisMemberArray 'int[5]' 659 660 void foo(); 661 // CHECK-NEXT: CXXMethodDecl{{.*}} foo 'void ()' 662 663 template<typename T> 664 void bar(T *PointerParam) { 665 // CHECK-NEXT: FunctionTemplateDecl{{.*}}bar 666 // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T 667 // CHECK-NEXT: CXXMethodDecl{{.*}} bar 'void (T *)' implicit-inline 668 // CHECK-NEXT: ParmVarDecl{{.*}} PointerParam 'T *' 669 // CHECK-NEXT: CompoundStmt 670 671 #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 672 while(true); 673 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 674 // CHECK-NEXT: private clause 675 // CHECK-NEXT: MemberExpr{{.*}} 'int' lvalue ->ThisMember 676 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 677 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'int' lvalue 678 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 679 // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 680 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 681 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 682 // CHECK-NEXT: WhileStmt 683 // CHECK-NEXT: CXXBoolLiteralExpr 684 // CHECK-NEXT: NullStmt 685 686 #pragma acc parallel private(ThisMemberArray[1:2]) 687 while(true); 688 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 689 // CHECK-NEXT: private clause 690 // CHECK-NEXT: ArraySectionExpr{{.*}} 691 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 692 // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 693 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 694 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 695 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 696 // CHECK-NEXT: WhileStmt 697 // CHECK-NEXT: CXXBoolLiteralExpr 698 // CHECK-NEXT: NullStmt 699 700 #pragma acc parallel private(this) 701 while(true); 702 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 703 // CHECK-NEXT: private clause 704 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 705 // CHECK-NEXT: WhileStmt 706 // CHECK-NEXT: CXXBoolLiteralExpr 707 // CHECK-NEXT: NullStmt 708 709 #pragma acc parallel attach(PointerParam, this, this->ThisMemberPtr) deviceptr(PointerParam, this, ThisMemberPtr) 710 while (true); 711 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 712 // CHECK-NEXT: attach clause 713 // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue ParmVar{{.*}} 'PointerParam' 'T *' 714 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 715 // CHECK-NEXT: MemberExpr{{.*}} 'int *' lvalue ->ThisMemberPtr 716 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 717 // CHECK-NEXT: deviceptr clause 718 // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue ParmVar{{.*}} 'PointerParam' 'T *' 719 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 720 // CHECK-NEXT: MemberExpr{{.*}} 'int *' lvalue ->ThisMemberPtr 721 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 722 // CHECK-NEXT: WhileStmt 723 // CHECK-NEXT: CXXBoolLiteralExpr 724 // CHECK-NEXT: NullStmt 725 726 // Check Instantiations: 727 // CHECK-NEXT: CXXMethodDecl{{.*}} used bar 'void (int *)' implicit_instantiation implicit-inline 728 // CHECK-NEXT: TemplateArgument type 'int' 729 // CHECK-NEXT: BuiltinType{{.*}} 'int' 730 // CHECK-NEXT: ParmVarDecl{{.*}} PointerParam 'int *' 731 // CHECK-NEXT: CompoundStmt 732 733 // #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 734 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 735 // CHECK-NEXT: private clause 736 // CHECK-NEXT: MemberExpr{{.*}} 'int' lvalue ->ThisMember 737 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 738 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'int' lvalue 739 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 740 // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 741 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 742 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 743 // CHECK-NEXT: WhileStmt 744 // CHECK-NEXT: CXXBoolLiteralExpr 745 // CHECK-NEXT: NullStmt 746 747 // #pragma acc parallel private(ThisMemberArray[1:2]) 748 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 749 // CHECK-NEXT: private clause 750 // CHECK-NEXT: ArraySectionExpr{{.*}} 751 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 752 // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 753 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 754 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 755 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 756 // CHECK-NEXT: WhileStmt 757 // CHECK-NEXT: CXXBoolLiteralExpr 758 // CHECK-NEXT: NullStmt 759 760 // #pragma acc parallel private(this) 761 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 762 // CHECK-NEXT: private clause 763 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 764 // CHECK-NEXT: WhileStmt 765 // CHECK-NEXT: CXXBoolLiteralExpr 766 // CHECK-NEXT: NullStmt 767 768 //#pragma acc parallel attach(PointerParam, this, this->ThisMemberPtr) deviceptr(PointerParam, this, ThisMemberPtr) 769 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 770 // CHECK-NEXT: attach clause 771 // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue ParmVar{{.*}} 'PointerParam' 'int *' 772 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 773 // CHECK-NEXT: MemberExpr{{.*}} 'int *' lvalue ->ThisMemberPtr 774 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 775 // CHECK-NEXT: deviceptr clause 776 // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue ParmVar{{.*}} 'PointerParam' 'int *' 777 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 778 // CHECK-NEXT: MemberExpr{{.*}} 'int *' lvalue ->ThisMemberPtr 779 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 780 // CHECK-NEXT: WhileStmt 781 // CHECK-NEXT: CXXBoolLiteralExpr 782 // CHECK-NEXT: NullStmt 783 } 784 }; 785 786 void S::foo() { 787 // CHECK: CXXMethodDecl{{.*}} foo 'void ()' 788 // CHECK-NEXT: CompoundStmt 789 #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 790 while(true); 791 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 792 // CHECK-NEXT: private clause 793 // CHECK-NEXT: MemberExpr{{.*}} 'int' lvalue ->ThisMember 794 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 795 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'int' lvalue 796 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 797 // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 798 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 799 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 800 // CHECK-NEXT: WhileStmt 801 // CHECK-NEXT: CXXBoolLiteralExpr 802 // CHECK-NEXT: NullStmt 803 804 #pragma acc parallel private(ThisMemberArray[1:2]) 805 while(true); 806 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 807 // CHECK-NEXT: private clause 808 // CHECK-NEXT: ArraySectionExpr{{.*}} 809 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 810 // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 811 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 812 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 813 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 814 // CHECK-NEXT: WhileStmt 815 // CHECK-NEXT: CXXBoolLiteralExpr 816 // CHECK-NEXT: NullStmt 817 818 #pragma acc parallel private(this) 819 while(true); 820 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 821 // CHECK-NEXT: private clause 822 // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 823 // CHECK-NEXT: WhileStmt 824 // CHECK-NEXT: CXXBoolLiteralExpr 825 // CHECK-NEXT: NullStmt 826 } 827 828 template<typename U> 829 struct STempl { 830 // CHECK-NEXT: ClassTemplateDecl{{.*}} STempl 831 // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename depth 0 index 0 U 832 // CHECK-NEXT: CXXRecordDecl{{.*}} struct STempl definition 833 // CHECK: CXXRecordDecl{{.*}} implicit struct STempl 834 U ThisMember; 835 // CHECK-NEXT: FieldDecl{{.*}} ThisMember 'U' 836 U ThisMemberArray[5]; 837 // CHECK-NEXT: FieldDecl{{.*}} ThisMemberArray 'U[5]' 838 839 void foo() { 840 // CHECK-NEXT: CXXMethodDecl {{.*}} foo 'void ()' 841 // CHECK-NEXT: CompoundStmt 842 843 #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 844 while(true); 845 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 846 // CHECK-NEXT: private clause 847 // CHECK-NEXT: MemberExpr{{.*}} 'U' lvalue ->ThisMember 848 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' implicit this 849 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'U' lvalue 850 // CHECK-NEXT: MemberExpr{{.*}} 'U[5]' lvalue ->ThisMemberArray 851 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' this 852 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 853 // CHECK-NEXT: WhileStmt 854 // CHECK-NEXT: CXXBoolLiteralExpr 855 // CHECK-NEXT: NullStmt 856 857 #pragma acc parallel private(ThisMemberArray[1:2]) 858 while(true); 859 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 860 // CHECK-NEXT: private clause 861 // CHECK-NEXT: ArraySectionExpr{{.*}} 862 // CHECK-NEXT: MemberExpr{{.*}} 'U[5]' lvalue ->ThisMemberArray 863 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' implicit this 864 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 865 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 866 // CHECK-NEXT: WhileStmt 867 // CHECK-NEXT: CXXBoolLiteralExpr 868 // CHECK-NEXT: NullStmt 869 870 #pragma acc parallel private(this) 871 while(true); 872 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 873 // CHECK-NEXT: private clause 874 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' this 875 // CHECK-NEXT: WhileStmt 876 // CHECK-NEXT: CXXBoolLiteralExpr 877 // CHECK-NEXT: NullStmt 878 } 879 880 template<typename T> 881 void bar() { 882 // CHECK-NEXT: FunctionTemplateDecl{{.*}} bar 883 // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename depth 1 index 0 T 884 // CHECK-NEXT: CXXMethodDecl{{.*}} bar 'void ()' 885 // CHECK-NEXT: CompoundStmt 886 887 #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 888 while(true); 889 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 890 // CHECK-NEXT: private clause 891 // CHECK-NEXT: MemberExpr{{.*}} 'U' lvalue ->ThisMember 892 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' implicit this 893 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'U' lvalue 894 // CHECK-NEXT: MemberExpr{{.*}} 'U[5]' lvalue ->ThisMemberArray 895 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' this 896 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 897 // CHECK-NEXT: WhileStmt 898 // CHECK-NEXT: CXXBoolLiteralExpr 899 // CHECK-NEXT: NullStmt 900 901 #pragma acc parallel private(ThisMemberArray[1:2]) 902 while(true); 903 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 904 // CHECK-NEXT: private clause 905 // CHECK-NEXT: ArraySectionExpr{{.*}} 906 // CHECK-NEXT: MemberExpr{{.*}} 'U[5]' lvalue ->ThisMemberArray 907 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' implicit this 908 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 909 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 910 // CHECK-NEXT: WhileStmt 911 // CHECK-NEXT: CXXBoolLiteralExpr 912 // CHECK-NEXT: NullStmt 913 914 #pragma acc parallel private(this) 915 while(true); 916 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 917 // CHECK-NEXT: private clause 918 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' this 919 // CHECK-NEXT: WhileStmt 920 // CHECK-NEXT: CXXBoolLiteralExpr 921 // CHECK-NEXT: NullStmt 922 } 923 924 // Instantiation of the class template. 925 926 // CHECK-NEXT: ClassTemplateSpecializationDecl{{.*}}struct STempl 927 // CHECK: TemplateArgument type 'int' 928 // CHECK-NEXT: BuiltinType {{.*}}'int' 929 // CHECK-NEXT: CXXRecordDecl{{.*}} struct STempl 930 // CHECK-NEXT: FieldDecl{{.*}}ThisMember 'int' 931 // CHECK-NEXT: FieldDecl{{.*}} ThisMemberArray 'int[5]' 932 933 // CHECK-NEXT: CXXMethodDecl{{.*}} foo 'void ()' 934 // CHECK-NEXT: FunctionTemplateDecl{{.*}}bar 935 // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename depth 0 index 0 T 936 // CHECK-NEXT: CXXMethodDecl{{.*}}bar 'void ()' 937 // CHECK-NEXT: CXXMethodDecl{{.*}}bar 'void ()' 938 // CHECK-NEXT: TemplateArgument type 'int' 939 // CHECK-NEXT: BuiltinType{{.*}} 'int' 940 // CHECK-NEXT: CompoundStmt 941 942 //#pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 943 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 944 // CHECK-NEXT: private clause 945 // CHECK-NEXT: MemberExpr{{.*}} 'int' lvalue ->ThisMember 946 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<int> *' implicit this 947 // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'int' lvalue 948 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 949 // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 950 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<int> *' this 951 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 952 // CHECK-NEXT: WhileStmt 953 // CHECK-NEXT: CXXBoolLiteralExpr 954 // CHECK-NEXT: NullStmt 955 956 //#pragma acc parallel private(ThisMemberArray[1:2]) 957 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 958 // CHECK-NEXT: private clause 959 // CHECK-NEXT: ArraySectionExpr{{.*}} 960 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 961 // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 962 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<int> *' implicit this 963 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 964 // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 965 // CHECK-NEXT: WhileStmt 966 // CHECK-NEXT: CXXBoolLiteralExpr 967 // CHECK-NEXT: NullStmt 968 969 //#pragma acc parallel private(this) 970 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 971 // CHECK-NEXT: private clause 972 // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<int> *' this 973 // CHECK-NEXT: WhileStmt 974 // CHECK-NEXT: CXXBoolLiteralExpr 975 // CHECK-NEXT: NullStmt 976 }; 977 978 void Inst() { 979 static constexpr unsigned CEVar = 1; 980 int i; 981 int Arr[5]; 982 TemplUses<CEVar, int, int[1]>({}, {}, &i); 983 984 S s; 985 s.bar<int>(&i); 986 STempl<int> stempl; 987 stempl.bar<int>(); 988 } 989 #endif 990