1054f7c05Serichkeane // RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -ast-dump | FileCheck %s 2fa67986dSErich Keane 3*7577284cSerichkeane // Test this with PCH. 4*7577284cSerichkeane // RUN: %clang_cc1 %s -fopenacc -emit-pch -Wno-openacc-deprecated-clause-alias -o %t %s 5*7577284cSerichkeane // RUN: %clang_cc1 %s -fopenacc -include-pch %t -Wno-openacc-deprecated-clause-alias -ast-dump-all | FileCheck %s 6*7577284cSerichkeane 7*7577284cSerichkeane #ifndef PCH_HELPER 8*7577284cSerichkeane #define PCH_HELPER 9*7577284cSerichkeane 10fa67986dSErich Keane int Global; 11fa67986dSErich Keane short GlobalArray[5]; 12fa67986dSErich Keane 13fa67986dSErich Keane void NormalUses(float *PointerParam) { 14fa67986dSErich Keane // CHECK: FunctionDecl{{.*}}NormalUses 15fa67986dSErich Keane // CHECK: ParmVarDecl 16fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 17fa67986dSErich Keane 18fa67986dSErich Keane #pragma acc parallel private(Global, GlobalArray[2]) 19fa67986dSErich Keane while(true); 20fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 21fa67986dSErich Keane // CHECK-NEXT: private clause 22fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 23fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'short' lvalue 24fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'short *' <ArrayToPointerDecay> 25fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 26fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 2 27fa67986dSErich Keane // CHECK-NEXT: WhileStmt 28fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 29fa67986dSErich Keane // CHECK-NEXT: NullStmt 30fa67986dSErich Keane 31fa67986dSErich Keane #pragma acc parallel private(GlobalArray, PointerParam[Global]) 32fa67986dSErich Keane while(true); 33fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 34fa67986dSErich Keane // CHECK-NEXT: private clause 35fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 36fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 37fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 38fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 39fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 40fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 41fa67986dSErich Keane // CHECK-NEXT: WhileStmt 42fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 43fa67986dSErich Keane // CHECK-NEXT: NullStmt 44fa67986dSErich Keane 45a13c5140Serichkeane #pragma acc parallel firstprivate(GlobalArray, PointerParam[Global]) 46a13c5140Serichkeane while(true); 47a13c5140Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 48a13c5140Serichkeane // CHECK-NEXT: firstprivate clause 49a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 50a13c5140Serichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 51a13c5140Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 52a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 53a13c5140Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 54a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 55a13c5140Serichkeane // CHECK-NEXT: WhileStmt 56a13c5140Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 57a13c5140Serichkeane // CHECK-NEXT: NullStmt 58a13c5140Serichkeane 59bd909d2eSerichkeane #pragma acc parallel present(GlobalArray, PointerParam[Global]) 60bd909d2eSerichkeane while(true); 61bd909d2eSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 62bd909d2eSerichkeane // CHECK-NEXT: present clause 63bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 64bd909d2eSerichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 65bd909d2eSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 66bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 67bd909d2eSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 68bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 69bd909d2eSerichkeane // CHECK-NEXT: WhileStmt 70bd909d2eSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 71bd909d2eSerichkeane // CHECK-NEXT: NullStmt 72bd909d2eSerichkeane 73bd909d2eSerichkeane #pragma acc parallel no_create(GlobalArray, PointerParam[Global]) 74bd909d2eSerichkeane while(true); 75bd909d2eSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 76bd909d2eSerichkeane // CHECK-NEXT: no_create clause 77bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 78bd909d2eSerichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 79bd909d2eSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 80bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 81bd909d2eSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 82bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 83bd909d2eSerichkeane // CHECK-NEXT: WhileStmt 84bd909d2eSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 85bd909d2eSerichkeane // CHECK-NEXT: NullStmt 86bd909d2eSerichkeane 87fa67986dSErich Keane #pragma acc parallel private(GlobalArray) private(PointerParam[Global]) 88fa67986dSErich Keane while(true); 89fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 90fa67986dSErich Keane // CHECK-NEXT: private clause 91fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 92fa67986dSErich Keane // CHECK-NEXT: private clause 93fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 94fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 95fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 96fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 97fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 98fa67986dSErich Keane // CHECK-NEXT: WhileStmt 99fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 100fa67986dSErich Keane // CHECK-NEXT: NullStmt 101fa67986dSErich Keane 102054f7c05Serichkeane #pragma acc parallel copy(GlobalArray) pcopy(PointerParam[Global]) present_or_copy(Global) 103054f7c05Serichkeane while(true); 104054f7c05Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 105054f7c05Serichkeane // CHECK-NEXT: copy clause 106054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 107054f7c05Serichkeane // CHECK-NEXT: pcopy clause 108054f7c05Serichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 109054f7c05Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 110054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 111054f7c05Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 112054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 113054f7c05Serichkeane // CHECK-NEXT: present_or_copy clause 114054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 115054f7c05Serichkeane // CHECK-NEXT: WhileStmt 116054f7c05Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 117054f7c05Serichkeane // CHECK-NEXT: NullStmt 118054f7c05Serichkeane 11901e91a2dSerichkeane #pragma acc parallel copyin(GlobalArray) pcopyin(readonly: PointerParam[Global]) present_or_copyin(Global) 12001e91a2dSerichkeane while(true); 12101e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 12201e91a2dSerichkeane // CHECK-NEXT: copyin clause 12301e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 12401e91a2dSerichkeane // CHECK-NEXT: pcopyin clause : readonly 12501e91a2dSerichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 12601e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 12701e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 12801e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 12901e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 13001e91a2dSerichkeane // CHECK-NEXT: present_or_copyin clause 13101e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 13201e91a2dSerichkeane // CHECK-NEXT: WhileStmt 13301e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 13401e91a2dSerichkeane // CHECK-NEXT: NullStmt 13501e91a2dSerichkeane 13601e91a2dSerichkeane #pragma acc parallel copyout(GlobalArray) pcopyout(zero:PointerParam[Global]) present_or_copyout(Global) 13701e91a2dSerichkeane while(true); 13801e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 13901e91a2dSerichkeane // CHECK-NEXT: copyout clause 14001e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 14101e91a2dSerichkeane // CHECK-NEXT: pcopyout clause : zero 14201e91a2dSerichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 14301e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 14401e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 14501e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 14601e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 14701e91a2dSerichkeane // CHECK-NEXT: present_or_copyout clause 14801e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 14901e91a2dSerichkeane // CHECK-NEXT: WhileStmt 15001e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 15101e91a2dSerichkeane // CHECK-NEXT: NullStmt 15201e91a2dSerichkeane 15301e91a2dSerichkeane #pragma acc parallel create(GlobalArray) pcreate(zero:PointerParam[Global]) present_or_create(Global) 15401e91a2dSerichkeane while(true); 15501e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 15601e91a2dSerichkeane // CHECK-NEXT: create clause 15701e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 15801e91a2dSerichkeane // CHECK-NEXT: pcreate clause : zero 15901e91a2dSerichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue 16001e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 16101e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' 16201e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 16301e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 16401e91a2dSerichkeane // CHECK-NEXT: present_or_create clause 16501e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 16601e91a2dSerichkeane // CHECK-NEXT: WhileStmt 16701e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 16801e91a2dSerichkeane // CHECK-NEXT: NullStmt 16901e91a2dSerichkeane 170fa67986dSErich Keane #pragma acc parallel private(GlobalArray, PointerParam[Global : Global]) 171fa67986dSErich Keane while(true); 172fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 173fa67986dSErich Keane // CHECK-NEXT: private clause 174fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 175fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr 176c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 177fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' 178c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 179fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 180c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 181fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 182fa67986dSErich Keane // CHECK-NEXT: WhileStmt 183fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 184fa67986dSErich Keane // CHECK-NEXT: NullStmt 185a13c5140Serichkeane 186a13c5140Serichkeane #pragma acc parallel firstprivate(GlobalArray, PointerParam[Global : Global]) 187a13c5140Serichkeane while(true); 188a13c5140Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 189a13c5140Serichkeane // CHECK-NEXT: firstprivate clause 190a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 191a13c5140Serichkeane // CHECK-NEXT: ArraySectionExpr 192a13c5140Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue> 193a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' 194a13c5140Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 195a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 196a13c5140Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 197a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 198a13c5140Serichkeane // CHECK-NEXT: WhileStmt 199a13c5140Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 200a13c5140Serichkeane // CHECK-NEXT: NullStmt 20148c8a579Serichkeane 20248c8a579Serichkeane #pragma acc parallel attach(PointerParam) deviceptr(PointerParam) 20348c8a579Serichkeane while (true); 20448c8a579Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 20548c8a579Serichkeane // CHECK-NEXT: attach clause 20648c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' 20748c8a579Serichkeane // CHECK-NEXT: deviceptr clause 20848c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' 20948c8a579Serichkeane // CHECK-NEXT: WhileStmt 21048c8a579Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 21148c8a579Serichkeane // CHECK-NEXT: NullStmt 212fa67986dSErich Keane } 213fa67986dSErich Keane 214fa67986dSErich Keane // This example is an error typically, but we want to make sure we're properly 215fa67986dSErich Keane // capturing NTTPs until instantiation time. 216fa67986dSErich Keane template<unsigned I> 217fa67986dSErich Keane void UnInstTempl() { 218fa67986dSErich Keane // CHECK-NEXT: FunctionTemplateDecl{{.*}} UnInstTempl 219fa67986dSErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}}referenced 'unsigned int' depth 0 index 0 I 220fa67986dSErich Keane // CHECK-NEXT: FunctionDecl{{.*}} UnInstTempl 'void ()' 221fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 222fa67986dSErich Keane #pragma acc parallel private(I) 223fa67986dSErich Keane while(true); 224fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 225fa67986dSErich Keane // CHECK-NEXT: private clause 226fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'I' 'unsigned int' 227fa67986dSErich Keane // CHECK-NEXT: WhileStmt 228fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 229fa67986dSErich Keane // CHECK-NEXT: NullStmt 230a13c5140Serichkeane #pragma acc parallel firstprivate(I) 231a13c5140Serichkeane while(true); 232a13c5140Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 233a13c5140Serichkeane // CHECK-NEXT: firstprivate clause 234a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'I' 'unsigned int' 235a13c5140Serichkeane // CHECK-NEXT: WhileStmt 236a13c5140Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 237a13c5140Serichkeane // CHECK-NEXT: NullStmt 238fa67986dSErich Keane } 239fa67986dSErich Keane 240fa67986dSErich Keane template<auto &NTTP, typename T, typename U> 241fa67986dSErich Keane void TemplUses(T t, U u, T*PointerParam) { 242fa67986dSErich Keane // CHECK-NEXT: FunctionTemplateDecl 243fa67986dSErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP 244fa67986dSErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T 245fa67986dSErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U 246fa67986dSErich Keane // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U, T *)' 247fa67986dSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' 248fa67986dSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' 249fa67986dSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} referenced PointerParam 'T *' 250fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 251fa67986dSErich Keane 252fa67986dSErich Keane 253fa67986dSErich Keane #pragma acc parallel private(GlobalArray, PointerParam[Global]) 254fa67986dSErich Keane while(true); 255fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 256fa67986dSErich Keane // CHECK-NEXT: private clause 257fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 258fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'T' lvalue 259fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}}'PointerParam' 'T *' 260fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 261fa67986dSErich Keane // CHECK-NEXT: WhileStmt 262fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 263fa67986dSErich Keane // CHECK-NEXT: NullStmt 264fa67986dSErich Keane 265fa67986dSErich Keane #pragma acc parallel private(t, u) 266fa67986dSErich Keane while(true); 267fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 268fa67986dSErich Keane // CHECK-NEXT: private clause 269fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 270fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 271fa67986dSErich Keane // CHECK-NEXT: WhileStmt 272fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 273fa67986dSErich Keane // CHECK-NEXT: NullStmt 274fa67986dSErich Keane 275a13c5140Serichkeane #pragma acc parallel firstprivate(t, u) 276a13c5140Serichkeane while(true); 277a13c5140Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 278a13c5140Serichkeane // CHECK-NEXT: firstprivate clause 279a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 280a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 281a13c5140Serichkeane // CHECK-NEXT: WhileStmt 282a13c5140Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 283a13c5140Serichkeane // CHECK-NEXT: NullStmt 284a13c5140Serichkeane 285fa67986dSErich Keane #pragma acc parallel private(t) private(u) 286fa67986dSErich Keane while(true); 287fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 288fa67986dSErich Keane // CHECK-NEXT: private clause 289fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 290fa67986dSErich Keane // CHECK-NEXT: private clause 291fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 292fa67986dSErich Keane // CHECK-NEXT: WhileStmt 293fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 294fa67986dSErich Keane // CHECK-NEXT: NullStmt 295fa67986dSErich Keane 296fa67986dSErich Keane #pragma acc parallel private(t) private(NTTP, u) 297fa67986dSErich Keane while(true); 298fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 299fa67986dSErich Keane // CHECK-NEXT: private clause 300fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 301fa67986dSErich Keane // CHECK-NEXT: private clause 302fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 303fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 304fa67986dSErich Keane // CHECK-NEXT: WhileStmt 305fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 306fa67986dSErich Keane // CHECK-NEXT: NullStmt 307fa67986dSErich Keane 308a13c5140Serichkeane #pragma acc parallel private(t) firstprivate(NTTP, u) 309a13c5140Serichkeane while(true); 310a13c5140Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 311a13c5140Serichkeane // CHECK-NEXT: private clause 312a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 313a13c5140Serichkeane // CHECK-NEXT: firstprivate clause 314a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 315a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 316a13c5140Serichkeane // CHECK-NEXT: WhileStmt 317a13c5140Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 318a13c5140Serichkeane // CHECK-NEXT: NullStmt 319a13c5140Serichkeane 320bd909d2eSerichkeane #pragma acc parallel no_create(t) present(NTTP, u) 321bd909d2eSerichkeane while(true); 322bd909d2eSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 323bd909d2eSerichkeane // CHECK-NEXT: no_create clause 324bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 325bd909d2eSerichkeane // CHECK-NEXT: present clause 326bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 327bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 328bd909d2eSerichkeane // CHECK-NEXT: WhileStmt 329bd909d2eSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 330bd909d2eSerichkeane // CHECK-NEXT: NullStmt 331bd909d2eSerichkeane 332054f7c05Serichkeane #pragma acc parallel copy(t) pcopy(NTTP, u) present_or_copy(u[0:t]) 333054f7c05Serichkeane while(true); 334054f7c05Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 335054f7c05Serichkeane // CHECK-NEXT: copy clause 336054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 337054f7c05Serichkeane // CHECK-NEXT: pcopy clause 338054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 339054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 340054f7c05Serichkeane // CHECK-NEXT: present_or_copy clause 341054f7c05Serichkeane // CHECK-NEXT: ArraySectionExpr 342054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 343054f7c05Serichkeane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 344054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 345054f7c05Serichkeane // CHECK-NEXT: WhileStmt 346054f7c05Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 347054f7c05Serichkeane // CHECK-NEXT: NullStmt 348054f7c05Serichkeane 34901e91a2dSerichkeane #pragma acc parallel copyin(t) pcopyin(readonly:NTTP, u) present_or_copyin(u[0:t]) 35001e91a2dSerichkeane while(true); 35101e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 35201e91a2dSerichkeane // CHECK-NEXT: copyin clause 35301e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 35401e91a2dSerichkeane // CHECK-NEXT: pcopyin clause : readonly 35501e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 35601e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 35701e91a2dSerichkeane // CHECK-NEXT: present_or_copyin clause 35801e91a2dSerichkeane // CHECK-NEXT: ArraySectionExpr 35901e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 36001e91a2dSerichkeane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 36101e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 36201e91a2dSerichkeane // CHECK-NEXT: WhileStmt 36301e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 36401e91a2dSerichkeane // CHECK-NEXT: NullStmt 36501e91a2dSerichkeane 36601e91a2dSerichkeane #pragma acc parallel copyout(t) pcopyout(zero:NTTP, u) present_or_copyout(u[0:t]) 36701e91a2dSerichkeane while(true); 36801e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 36901e91a2dSerichkeane // CHECK-NEXT: copyout clause 37001e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 37101e91a2dSerichkeane // CHECK-NEXT: pcopyout clause : zero 37201e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 37301e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 37401e91a2dSerichkeane // CHECK-NEXT: present_or_copyout clause 37501e91a2dSerichkeane // CHECK-NEXT: ArraySectionExpr 37601e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 37701e91a2dSerichkeane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 37801e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 37901e91a2dSerichkeane // CHECK-NEXT: WhileStmt 38001e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 38101e91a2dSerichkeane // CHECK-NEXT: NullStmt 38201e91a2dSerichkeane 38301e91a2dSerichkeane #pragma acc parallel create(t) pcreate(zero: NTTP, u) present_or_create(u[0:t]) 38401e91a2dSerichkeane while(true); 38501e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 38601e91a2dSerichkeane // CHECK-NEXT: create clause 38701e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 38801e91a2dSerichkeane // CHECK-NEXT: pcreate clause : zero 38901e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' 39001e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 39101e91a2dSerichkeane // CHECK-NEXT: present_or_create clause 39201e91a2dSerichkeane // CHECK-NEXT: ArraySectionExpr 39301e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 39401e91a2dSerichkeane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 39501e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 39601e91a2dSerichkeane // CHECK-NEXT: WhileStmt 39701e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 39801e91a2dSerichkeane // CHECK-NEXT: NullStmt 39901e91a2dSerichkeane 400fa67986dSErich Keane #pragma acc parallel private(u[0]) 401fa67986dSErich Keane while(true); 402fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 403fa67986dSErich Keane // CHECK-NEXT: private clause 404fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'<dependent type>' lvalue 405fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 406fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 407fa67986dSErich Keane // CHECK-NEXT: WhileStmt 408fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 409fa67986dSErich Keane // CHECK-NEXT: NullStmt 410fa67986dSErich Keane 411fa67986dSErich Keane #pragma acc parallel private(u[0:t]) 412fa67986dSErich Keane while(true); 413fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 414fa67986dSErich Keane // CHECK-NEXT: private clause 415fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr 416fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' 417fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 418fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' 419fa67986dSErich Keane // CHECK-NEXT: WhileStmt 420fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 421fa67986dSErich Keane // CHECK-NEXT: NullStmt 422fa67986dSErich Keane 42348c8a579Serichkeane #pragma acc parallel attach(PointerParam) deviceptr(PointerParam) 42448c8a579Serichkeane while (true); 42548c8a579Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 42648c8a579Serichkeane // CHECK-NEXT: attach clause 42748c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}} 'PointerParam' 'T *' 42848c8a579Serichkeane // CHECK-NEXT: deviceptr clause 42948c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}} 'PointerParam' 'T *' 43048c8a579Serichkeane // CHECK-NEXT: WhileStmt 43148c8a579Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 43248c8a579Serichkeane // CHECK-NEXT: NullStmt 43348c8a579Serichkeane 434fa67986dSErich Keane // CHECK-NEXT: DeclStmt 435fa67986dSErich Keane // CHECK-NEXT: VarDecl{{.*}}EndMarker 436fa67986dSErich Keane int EndMarker; 437fa67986dSErich Keane 438fa67986dSErich Keane // Check the instantiated versions of the above. 439fa67986dSErich Keane // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *, int *)' implicit_instantiation 440fa67986dSErich Keane // CHECK-NEXT: TemplateArgument decl 441fa67986dSErich Keane // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' 442fa67986dSErich Keane // CHECK-NEXT: TemplateArgument type 'int' 443fa67986dSErich Keane // CHECK-NEXT: BuiltinType{{.*}} 'int' 444fa67986dSErich Keane // CHECK-NEXT: TemplateArgument type 'int[1]' 445*7577284cSerichkeane // CHECK-NEXT: ConstantArrayType{{.*}} 'int[1]'{{.*}} 1 446fa67986dSErich Keane // CHECK-NEXT: BuiltinType{{.*}} 'int' 447fa67986dSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' 448fa67986dSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} used u 'int *' 449fa67986dSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} used PointerParam 'int *' 450fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 451fa67986dSErich Keane 452fa67986dSErich Keane // #pragma acc parallel private(GlobalArray, PointerParam[Global]) 453fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 454fa67986dSErich Keane // CHECK-NEXT: private clause 455fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' 456fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue 457fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 458fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}}'PointerParam' 'int *' 459fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 460fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' 461fa67986dSErich Keane // CHECK-NEXT: WhileStmt 462fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 463fa67986dSErich Keane // CHECK-NEXT: NullStmt 464fa67986dSErich Keane 465fa67986dSErich Keane // #pragma acc parallel private(t, u) 466fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 467fa67986dSErich Keane // CHECK-NEXT: private clause 468fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 469fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 470fa67986dSErich Keane // CHECK-NEXT: WhileStmt 471fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 472fa67986dSErich Keane // CHECK-NEXT: NullStmt 473fa67986dSErich Keane 474a13c5140Serichkeane // #pragma acc parallel firstprivate(t, u) 475a13c5140Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 476a13c5140Serichkeane // CHECK-NEXT: firstprivate clause 477a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 478a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 479a13c5140Serichkeane // CHECK-NEXT: WhileStmt 480a13c5140Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 481a13c5140Serichkeane // CHECK-NEXT: NullStmt 482a13c5140Serichkeane 483fa67986dSErich Keane // #pragma acc parallel private(t) private(u) 484fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 485fa67986dSErich Keane // CHECK-NEXT: private clause 486fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 487fa67986dSErich Keane // CHECK-NEXT: private clause 488fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 489fa67986dSErich Keane // CHECK-NEXT: WhileStmt 490fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 491fa67986dSErich Keane // CHECK-NEXT: NullStmt 492fa67986dSErich Keane 493fa67986dSErich Keane // #pragma acc parallel private(t) private(NTTP, u) 494fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 495fa67986dSErich Keane // CHECK-NEXT: private clause 496fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 497fa67986dSErich Keane // CHECK-NEXT: private clause 498fa67986dSErich Keane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 499fa67986dSErich Keane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 500fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 501fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 502fa67986dSErich Keane // CHECK-NEXT: WhileStmt 503fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 504fa67986dSErich Keane // CHECK-NEXT: NullStmt 505fa67986dSErich Keane 506a13c5140Serichkeane // #pragma acc parallel private(t) firstprivate(NTTP, u) 507a13c5140Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 508a13c5140Serichkeane // CHECK-NEXT: private clause 509a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 510a13c5140Serichkeane // CHECK-NEXT: firstprivate clause 511a13c5140Serichkeane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 512a13c5140Serichkeane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 513a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 514a13c5140Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 515a13c5140Serichkeane // CHECK-NEXT: WhileStmt 516a13c5140Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 517a13c5140Serichkeane // CHECK-NEXT: NullStmt 518a13c5140Serichkeane 519bd909d2eSerichkeane // #pragma acc parallel no_create(t) present(NTTP, u) 520bd909d2eSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 521bd909d2eSerichkeane // CHECK-NEXT: no_create clause 522bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 523bd909d2eSerichkeane // CHECK-NEXT: present clause 524bd909d2eSerichkeane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 525bd909d2eSerichkeane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 526bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 527bd909d2eSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 528bd909d2eSerichkeane // CHECK-NEXT: WhileStmt 529bd909d2eSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 530bd909d2eSerichkeane // CHECK-NEXT: NullStmt 531bd909d2eSerichkeane 532054f7c05Serichkeane //#pragma acc parallel copy(t) pcopy(NTTP, u) copy_or_present(u[0:t]) 533054f7c05Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 534054f7c05Serichkeane // CHECK-NEXT: copy clause 535054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 536054f7c05Serichkeane // CHECK-NEXT: pcopy clause 537054f7c05Serichkeane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 538054f7c05Serichkeane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 539054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 540054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 541054f7c05Serichkeane // CHECK-NEXT: present_or_copy clause 542054f7c05Serichkeane // CHECK-NEXT: ArraySectionExpr 543054f7c05Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 544054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 545054f7c05Serichkeane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 546054f7c05Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 547054f7c05Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 548054f7c05Serichkeane // CHECK-NEXT: WhileStmt 549054f7c05Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 550054f7c05Serichkeane // CHECK-NEXT: NullStmt 551054f7c05Serichkeane 55201e91a2dSerichkeane //#pragma acc parallel copyin(t) pcopyin(readonly:NTTP, u) present_or_copyin(u[0:t]) 55301e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 55401e91a2dSerichkeane // CHECK-NEXT: copyin clause 55501e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 55601e91a2dSerichkeane // CHECK-NEXT: pcopyin clause : readonly 55701e91a2dSerichkeane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 55801e91a2dSerichkeane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 55901e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 56001e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 56101e91a2dSerichkeane // CHECK-NEXT: present_or_copyin clause 56201e91a2dSerichkeane // CHECK-NEXT: ArraySectionExpr 56301e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 56401e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 56501e91a2dSerichkeane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 56601e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 56701e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 56801e91a2dSerichkeane // CHECK-NEXT: WhileStmt 56901e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 57001e91a2dSerichkeane // CHECK-NEXT: NullStmt 57101e91a2dSerichkeane 57201e91a2dSerichkeane //#pragma acc parallel copyout(t) pcopyout(zero:NTTP, u) present_or_copyout(u[0:t]) 57301e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 57401e91a2dSerichkeane // CHECK-NEXT: copyout clause 57501e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 57601e91a2dSerichkeane // CHECK-NEXT: pcopyout clause : zero 57701e91a2dSerichkeane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 57801e91a2dSerichkeane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 57901e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 58001e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 58101e91a2dSerichkeane // CHECK-NEXT: present_or_copyout clause 58201e91a2dSerichkeane // CHECK-NEXT: ArraySectionExpr 58301e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 58401e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 58501e91a2dSerichkeane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 58601e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 58701e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 58801e91a2dSerichkeane // CHECK-NEXT: WhileStmt 58901e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 59001e91a2dSerichkeane // CHECK-NEXT: NullStmt 59101e91a2dSerichkeane 59201e91a2dSerichkeane //#pragma acc parallel create(t) pcreate(zero: NTTP, u) present_or_create(u[0:t]) 59301e91a2dSerichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 59401e91a2dSerichkeane // CHECK-NEXT: create clause 59501e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 59601e91a2dSerichkeane // CHECK-NEXT: pcreate clause : zero 59701e91a2dSerichkeane // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue 59801e91a2dSerichkeane // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP 59901e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' 60001e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 60101e91a2dSerichkeane // CHECK-NEXT: present_or_create clause 60201e91a2dSerichkeane // CHECK-NEXT: ArraySectionExpr 60301e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 60401e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 60501e91a2dSerichkeane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 60601e91a2dSerichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 60701e91a2dSerichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 60801e91a2dSerichkeane // CHECK-NEXT: WhileStmt 60901e91a2dSerichkeane // CHECK-NEXT: CXXBoolLiteralExpr 61001e91a2dSerichkeane // CHECK-NEXT: NullStmt 61101e91a2dSerichkeane 612fa67986dSErich Keane // #pragma acc parallel private(u[0]) 613fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 614fa67986dSErich Keane // CHECK-NEXT: private clause 615fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue 616fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 617fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 618fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 619fa67986dSErich Keane // CHECK-NEXT: WhileStmt 620fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 621fa67986dSErich Keane // CHECK-NEXT: NullStmt 622fa67986dSErich Keane 623fa67986dSErich Keane // #pragma acc parallel private(u[0:t]) 624fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 625fa67986dSErich Keane // CHECK-NEXT: private clause 626fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr 627c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue> 628fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' 629fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 630c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 631fa67986dSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' 632fa67986dSErich Keane // CHECK-NEXT: WhileStmt 633fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 634fa67986dSErich Keane // CHECK-NEXT: NullStmt 635fa67986dSErich Keane 63648c8a579Serichkeane //#pragma acc parallel attach(PointerParam) deviceptr(PointerParam) 63748c8a579Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 63848c8a579Serichkeane // CHECK-NEXT: attach clause 63948c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'PointerParam' 'int *' 64048c8a579Serichkeane // CHECK-NEXT: deviceptr clause 64148c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'PointerParam' 'int *' 64248c8a579Serichkeane // CHECK-NEXT: WhileStmt 64348c8a579Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 64448c8a579Serichkeane // CHECK-NEXT: NullStmt 64548c8a579Serichkeane 646fa67986dSErich Keane // CHECK-NEXT: DeclStmt 647fa67986dSErich Keane // CHECK-NEXT: VarDecl{{.*}}EndMarker 648fa67986dSErich Keane } 649fa67986dSErich Keane 650fa67986dSErich Keane struct S { 651fa67986dSErich Keane // CHECK-NEXT: CXXRecordDecl{{.*}} struct S definition 652fa67986dSErich Keane // CHECK: CXXRecordDecl{{.*}} implicit struct S 653fa67986dSErich Keane int ThisMember; 654fa67986dSErich Keane // CHECK-NEXT: FieldDecl{{.*}} ThisMember 'int' 65548c8a579Serichkeane int *ThisMemberPtr; 65648c8a579Serichkeane // CHECK-NEXT: FieldDecl{{.*}} ThisMemberPtr 'int *' 657fa67986dSErich Keane int ThisMemberArray[5]; 658fa67986dSErich Keane // CHECK-NEXT: FieldDecl{{.*}} ThisMemberArray 'int[5]' 659fa67986dSErich Keane 660fa67986dSErich Keane void foo(); 661fa67986dSErich Keane // CHECK-NEXT: CXXMethodDecl{{.*}} foo 'void ()' 662fa67986dSErich Keane 663fa67986dSErich Keane template<typename T> 66448c8a579Serichkeane void bar(T *PointerParam) { 665fa67986dSErich Keane // CHECK-NEXT: FunctionTemplateDecl{{.*}}bar 666fa67986dSErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T 66748c8a579Serichkeane // CHECK-NEXT: CXXMethodDecl{{.*}} bar 'void (T *)' implicit-inline 66848c8a579Serichkeane // CHECK-NEXT: ParmVarDecl{{.*}} PointerParam 'T *' 669fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 670fa67986dSErich Keane 671fa67986dSErich Keane #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 672fa67986dSErich Keane while(true); 673fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 674fa67986dSErich Keane // CHECK-NEXT: private clause 675fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int' lvalue ->ThisMember 676fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 677fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'int' lvalue 678fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 679fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 680fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 681fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 682fa67986dSErich Keane // CHECK-NEXT: WhileStmt 683fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 684fa67986dSErich Keane // CHECK-NEXT: NullStmt 685fa67986dSErich Keane 686fa67986dSErich Keane #pragma acc parallel private(ThisMemberArray[1:2]) 687fa67986dSErich Keane while(true); 688fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 689fa67986dSErich Keane // CHECK-NEXT: private clause 690fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr{{.*}} 691c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 692fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 693fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 694fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 695fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 696fa67986dSErich Keane // CHECK-NEXT: WhileStmt 697fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 698fa67986dSErich Keane // CHECK-NEXT: NullStmt 699fa67986dSErich Keane 700fa67986dSErich Keane #pragma acc parallel private(this) 701fa67986dSErich Keane while(true); 702fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 703fa67986dSErich Keane // CHECK-NEXT: private clause 704fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 705fa67986dSErich Keane // CHECK-NEXT: WhileStmt 706fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 707fa67986dSErich Keane // CHECK-NEXT: NullStmt 708fa67986dSErich Keane 70948c8a579Serichkeane #pragma acc parallel attach(PointerParam, this, this->ThisMemberPtr) deviceptr(PointerParam, this, ThisMemberPtr) 71048c8a579Serichkeane while (true); 71148c8a579Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 71248c8a579Serichkeane // CHECK-NEXT: attach clause 71348c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue ParmVar{{.*}} 'PointerParam' 'T *' 71448c8a579Serichkeane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 71548c8a579Serichkeane // CHECK-NEXT: MemberExpr{{.*}} 'int *' lvalue ->ThisMemberPtr 71648c8a579Serichkeane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 71748c8a579Serichkeane // CHECK-NEXT: deviceptr clause 71848c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'T *' lvalue ParmVar{{.*}} 'PointerParam' 'T *' 71948c8a579Serichkeane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 72048c8a579Serichkeane // CHECK-NEXT: MemberExpr{{.*}} 'int *' lvalue ->ThisMemberPtr 72148c8a579Serichkeane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 72248c8a579Serichkeane // CHECK-NEXT: WhileStmt 72348c8a579Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 72448c8a579Serichkeane // CHECK-NEXT: NullStmt 72548c8a579Serichkeane 726fa67986dSErich Keane // Check Instantiations: 72748c8a579Serichkeane // CHECK-NEXT: CXXMethodDecl{{.*}} used bar 'void (int *)' implicit_instantiation implicit-inline 728fa67986dSErich Keane // CHECK-NEXT: TemplateArgument type 'int' 729fa67986dSErich Keane // CHECK-NEXT: BuiltinType{{.*}} 'int' 73048c8a579Serichkeane // CHECK-NEXT: ParmVarDecl{{.*}} PointerParam 'int *' 731fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 732fa67986dSErich Keane 733fa67986dSErich Keane // #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 734fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 735fa67986dSErich Keane // CHECK-NEXT: private clause 736fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int' lvalue ->ThisMember 737fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 738fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'int' lvalue 739fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 740fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 741fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 742fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 743fa67986dSErich Keane // CHECK-NEXT: WhileStmt 744fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 745fa67986dSErich Keane // CHECK-NEXT: NullStmt 746fa67986dSErich Keane 747fa67986dSErich Keane // #pragma acc parallel private(ThisMemberArray[1:2]) 748fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 749fa67986dSErich Keane // CHECK-NEXT: private clause 750fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr{{.*}} 751c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 752fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 753fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 754fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 755fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 756fa67986dSErich Keane // CHECK-NEXT: WhileStmt 757fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 758fa67986dSErich Keane // CHECK-NEXT: NullStmt 759fa67986dSErich Keane 760fa67986dSErich Keane // #pragma acc parallel private(this) 761fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 762fa67986dSErich Keane // CHECK-NEXT: private clause 763fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 764fa67986dSErich Keane // CHECK-NEXT: WhileStmt 765fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 766fa67986dSErich Keane // CHECK-NEXT: NullStmt 76748c8a579Serichkeane 76848c8a579Serichkeane //#pragma acc parallel attach(PointerParam, this, this->ThisMemberPtr) deviceptr(PointerParam, this, ThisMemberPtr) 76948c8a579Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 77048c8a579Serichkeane // CHECK-NEXT: attach clause 77148c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue ParmVar{{.*}} 'PointerParam' 'int *' 77248c8a579Serichkeane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 77348c8a579Serichkeane // CHECK-NEXT: MemberExpr{{.*}} 'int *' lvalue ->ThisMemberPtr 77448c8a579Serichkeane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 77548c8a579Serichkeane // CHECK-NEXT: deviceptr clause 77648c8a579Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'int *' lvalue ParmVar{{.*}} 'PointerParam' 'int *' 77748c8a579Serichkeane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 77848c8a579Serichkeane // CHECK-NEXT: MemberExpr{{.*}} 'int *' lvalue ->ThisMemberPtr 77948c8a579Serichkeane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 78048c8a579Serichkeane // CHECK-NEXT: WhileStmt 78148c8a579Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 78248c8a579Serichkeane // CHECK-NEXT: NullStmt 783fa67986dSErich Keane } 784fa67986dSErich Keane }; 785fa67986dSErich Keane 786fa67986dSErich Keane void S::foo() { 787fa67986dSErich Keane // CHECK: CXXMethodDecl{{.*}} foo 'void ()' 788fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 789fa67986dSErich Keane #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 790fa67986dSErich Keane while(true); 791fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 792fa67986dSErich Keane // CHECK-NEXT: private clause 793fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int' lvalue ->ThisMember 794fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 795fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'int' lvalue 796fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 797fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 798fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 799fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 800fa67986dSErich Keane // CHECK-NEXT: WhileStmt 801fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 802fa67986dSErich Keane // CHECK-NEXT: NullStmt 803fa67986dSErich Keane 804fa67986dSErich Keane #pragma acc parallel private(ThisMemberArray[1:2]) 805fa67986dSErich Keane while(true); 806fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 807fa67986dSErich Keane // CHECK-NEXT: private clause 808fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr{{.*}} 809c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 810fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 811fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' implicit this 812fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 813fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 814fa67986dSErich Keane // CHECK-NEXT: WhileStmt 815fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 816fa67986dSErich Keane // CHECK-NEXT: NullStmt 817fa67986dSErich Keane 818fa67986dSErich Keane #pragma acc parallel private(this) 819fa67986dSErich Keane while(true); 820fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 821fa67986dSErich Keane // CHECK-NEXT: private clause 822fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'S *' this 823fa67986dSErich Keane // CHECK-NEXT: WhileStmt 824fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 825fa67986dSErich Keane // CHECK-NEXT: NullStmt 826fa67986dSErich Keane } 827fa67986dSErich Keane 828fa67986dSErich Keane template<typename U> 829fa67986dSErich Keane struct STempl { 830fa67986dSErich Keane // CHECK-NEXT: ClassTemplateDecl{{.*}} STempl 831fa67986dSErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename depth 0 index 0 U 832fa67986dSErich Keane // CHECK-NEXT: CXXRecordDecl{{.*}} struct STempl definition 833fa67986dSErich Keane // CHECK: CXXRecordDecl{{.*}} implicit struct STempl 834fa67986dSErich Keane U ThisMember; 835fa67986dSErich Keane // CHECK-NEXT: FieldDecl{{.*}} ThisMember 'U' 836fa67986dSErich Keane U ThisMemberArray[5]; 837fa67986dSErich Keane // CHECK-NEXT: FieldDecl{{.*}} ThisMemberArray 'U[5]' 838fa67986dSErich Keane 839fa67986dSErich Keane void foo() { 840fa67986dSErich Keane // CHECK-NEXT: CXXMethodDecl {{.*}} foo 'void ()' 841fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 842fa67986dSErich Keane 843fa67986dSErich Keane #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 844fa67986dSErich Keane while(true); 845fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 846fa67986dSErich Keane // CHECK-NEXT: private clause 847fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'U' lvalue ->ThisMember 848fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' implicit this 84941f9c78fSerichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'U' lvalue 85041f9c78fSerichkeane // CHECK-NEXT: MemberExpr{{.*}} 'U[5]' lvalue ->ThisMemberArray 851fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' this 852fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 853fa67986dSErich Keane // CHECK-NEXT: WhileStmt 854fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 855fa67986dSErich Keane // CHECK-NEXT: NullStmt 856fa67986dSErich Keane 857fa67986dSErich Keane #pragma acc parallel private(ThisMemberArray[1:2]) 858fa67986dSErich Keane while(true); 859fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 860fa67986dSErich Keane // CHECK-NEXT: private clause 861fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr{{.*}} 862fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'U[5]' lvalue ->ThisMemberArray 863fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' implicit this 864fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 865fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 866fa67986dSErich Keane // CHECK-NEXT: WhileStmt 867fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 868fa67986dSErich Keane // CHECK-NEXT: NullStmt 869fa67986dSErich Keane 870fa67986dSErich Keane #pragma acc parallel private(this) 871fa67986dSErich Keane while(true); 872fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 873fa67986dSErich Keane // CHECK-NEXT: private clause 874fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' this 875fa67986dSErich Keane // CHECK-NEXT: WhileStmt 876fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 877fa67986dSErich Keane // CHECK-NEXT: NullStmt 878fa67986dSErich Keane } 879fa67986dSErich Keane 880fa67986dSErich Keane template<typename T> 881fa67986dSErich Keane void bar() { 882fa67986dSErich Keane // CHECK-NEXT: FunctionTemplateDecl{{.*}} bar 883fa67986dSErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename depth 1 index 0 T 884fa67986dSErich Keane // CHECK-NEXT: CXXMethodDecl{{.*}} bar 'void ()' 885fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 886fa67986dSErich Keane 887fa67986dSErich Keane #pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 888fa67986dSErich Keane while(true); 889fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 890fa67986dSErich Keane // CHECK-NEXT: private clause 891fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'U' lvalue ->ThisMember 892fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' implicit this 89341f9c78fSerichkeane // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'U' lvalue 89441f9c78fSerichkeane // CHECK-NEXT: MemberExpr{{.*}} 'U[5]' lvalue ->ThisMemberArray 895fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' this 896fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 897fa67986dSErich Keane // CHECK-NEXT: WhileStmt 898fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 899fa67986dSErich Keane // CHECK-NEXT: NullStmt 900fa67986dSErich Keane 901fa67986dSErich Keane #pragma acc parallel private(ThisMemberArray[1:2]) 902fa67986dSErich Keane while(true); 903fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 904fa67986dSErich Keane // CHECK-NEXT: private clause 905fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr{{.*}} 906fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'U[5]' lvalue ->ThisMemberArray 907fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' implicit this 908fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 909fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 910fa67986dSErich Keane // CHECK-NEXT: WhileStmt 911fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 912fa67986dSErich Keane // CHECK-NEXT: NullStmt 913fa67986dSErich Keane 914fa67986dSErich Keane #pragma acc parallel private(this) 915fa67986dSErich Keane while(true); 916fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 917fa67986dSErich Keane // CHECK-NEXT: private clause 918fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<U> *' this 919fa67986dSErich Keane // CHECK-NEXT: WhileStmt 920fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 921fa67986dSErich Keane // CHECK-NEXT: NullStmt 922fa67986dSErich Keane } 923fa67986dSErich Keane 924fa67986dSErich Keane // Instantiation of the class template. 925fa67986dSErich Keane 926fa67986dSErich Keane // CHECK-NEXT: ClassTemplateSpecializationDecl{{.*}}struct STempl 927fa67986dSErich Keane // CHECK: TemplateArgument type 'int' 928fa67986dSErich Keane // CHECK-NEXT: BuiltinType {{.*}}'int' 929fa67986dSErich Keane // CHECK-NEXT: CXXRecordDecl{{.*}} struct STempl 930fa67986dSErich Keane // CHECK-NEXT: FieldDecl{{.*}}ThisMember 'int' 931fa67986dSErich Keane // CHECK-NEXT: FieldDecl{{.*}} ThisMemberArray 'int[5]' 932fa67986dSErich Keane 933fa67986dSErich Keane // CHECK-NEXT: CXXMethodDecl{{.*}} foo 'void ()' 934fa67986dSErich Keane // CHECK-NEXT: FunctionTemplateDecl{{.*}}bar 935fa67986dSErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename depth 0 index 0 T 936fa67986dSErich Keane // CHECK-NEXT: CXXMethodDecl{{.*}}bar 'void ()' 937fa67986dSErich Keane // CHECK-NEXT: CXXMethodDecl{{.*}}bar 'void ()' 938fa67986dSErich Keane // CHECK-NEXT: TemplateArgument type 'int' 939fa67986dSErich Keane // CHECK-NEXT: BuiltinType{{.*}} 'int' 940fa67986dSErich Keane // CHECK-NEXT: CompoundStmt 941fa67986dSErich Keane 942fa67986dSErich Keane //#pragma acc parallel private(ThisMember, this->ThisMemberArray[1]) 943fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 944fa67986dSErich Keane // CHECK-NEXT: private clause 945fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int' lvalue ->ThisMember 946fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<int> *' implicit this 947fa67986dSErich Keane // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'int' lvalue 948fa67986dSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 949fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 950fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<int> *' this 951fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 952fa67986dSErich Keane // CHECK-NEXT: WhileStmt 953fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 954fa67986dSErich Keane // CHECK-NEXT: NullStmt 955fa67986dSErich Keane 956fa67986dSErich Keane //#pragma acc parallel private(ThisMemberArray[1:2]) 957fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 958fa67986dSErich Keane // CHECK-NEXT: private clause 959fa67986dSErich Keane // CHECK-NEXT: ArraySectionExpr{{.*}} 960c1298878SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <ArrayToPointerDecay> 961fa67986dSErich Keane // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->ThisMemberArray 962fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<int> *' implicit this 963fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1 964fa67986dSErich Keane // CHECK-NEXT: IntegerLiteral{{.*}}'int' 2 965fa67986dSErich Keane // CHECK-NEXT: WhileStmt 966fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 967fa67986dSErich Keane // CHECK-NEXT: NullStmt 968fa67986dSErich Keane 969fa67986dSErich Keane //#pragma acc parallel private(this) 970fa67986dSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}} parallel 971fa67986dSErich Keane // CHECK-NEXT: private clause 972fa67986dSErich Keane // CHECK-NEXT: CXXThisExpr{{.*}} 'STempl<int> *' this 973fa67986dSErich Keane // CHECK-NEXT: WhileStmt 974fa67986dSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 975fa67986dSErich Keane // CHECK-NEXT: NullStmt 976fa67986dSErich Keane }; 977fa67986dSErich Keane 978fa67986dSErich Keane void Inst() { 979fa67986dSErich Keane static constexpr unsigned CEVar = 1; 980fa67986dSErich Keane int i; 981fa67986dSErich Keane int Arr[5]; 982fa67986dSErich Keane TemplUses<CEVar, int, int[1]>({}, {}, &i); 983fa67986dSErich Keane 984fa67986dSErich Keane S s; 98548c8a579Serichkeane s.bar<int>(&i); 986fa67986dSErich Keane STempl<int> stempl; 987fa67986dSErich Keane stempl.bar<int>(); 988fa67986dSErich Keane } 989*7577284cSerichkeane #endif 990