176600aeeSErich Keane // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s 276600aeeSErich Keane 376600aeeSErich Keane // Test this with PCH. 476600aeeSErich Keane // RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s 576600aeeSErich Keane // RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s 676600aeeSErich Keane 776600aeeSErich Keane #ifndef PCH_HELPER 876600aeeSErich Keane #define PCH_HELPER 976600aeeSErich Keane 1076600aeeSErich Keane int some_int(); 1176600aeeSErich Keane short some_short(); 1276600aeeSErich Keane long some_long(); 1376600aeeSErich Keane enum E{}; 1476600aeeSErich Keane E some_enum(); 1576600aeeSErich Keane 1676600aeeSErich Keane struct CorrectConvert { 1776600aeeSErich Keane operator int(); 1876600aeeSErich Keane } Convert; 1976600aeeSErich Keane 2076600aeeSErich Keane 2176600aeeSErich Keane void NormalUses() { 2276600aeeSErich Keane // CHECK: FunctionDecl{{.*}}NormalUses 2376600aeeSErich Keane // CHECK-NEXT: CompoundStmt 2476600aeeSErich Keane 2576600aeeSErich Keane #pragma acc parallel num_workers(some_int()) 2676600aeeSErich Keane while(true){} 2776600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 2876600aeeSErich Keane // CHECK-NEXT: num_workers clause 2976600aeeSErich Keane // CHECK-NEXT: CallExpr{{.*}}'int' 3076600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 3176600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 3276600aeeSErich Keane // CHECK-NEXT: WhileStmt 3376600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 3476600aeeSErich Keane // CHECK-NEXT: CompoundStmt 3576600aeeSErich Keane 3676600aeeSErich Keane #pragma acc kernels num_workers(some_short()) 3776600aeeSErich Keane while(true){} 3876600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 3976600aeeSErich Keane // CHECK-NEXT: num_workers clause 4076600aeeSErich Keane // CHECK-NEXT: CallExpr{{.*}}'short' 4176600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay> 4276600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()' 4376600aeeSErich Keane // CHECK-NEXT: WhileStmt 4476600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 4576600aeeSErich Keane // CHECK-NEXT: CompoundStmt 4676600aeeSErich Keane 4776600aeeSErich Keane #pragma acc parallel num_workers(some_long()) 4876600aeeSErich Keane while(true){} 4976600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 5076600aeeSErich Keane // CHECK-NEXT: num_workers clause 5176600aeeSErich Keane // CHECK-NEXT: CallExpr{{.*}}'long' 5276600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay> 5376600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' 5476600aeeSErich Keane // CHECK-NEXT: WhileStmt 5576600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 5676600aeeSErich Keane // CHECK-NEXT: CompoundStmt 5776600aeeSErich Keane 5876600aeeSErich Keane #pragma acc parallel num_workers(some_enum()) 5976600aeeSErich Keane while(true){} 6076600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 6176600aeeSErich Keane // CHECK-NEXT: num_workers clause 6276600aeeSErich Keane // CHECK-NEXT: CallExpr{{.*}}'E' 6376600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'E (*)()' <FunctionToPointerDecay> 6476600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'E ()' lvalue Function{{.*}} 'some_enum' 'E ()' 6576600aeeSErich Keane // CHECK-NEXT: WhileStmt 6676600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 6776600aeeSErich Keane // CHECK-NEXT: CompoundStmt 6876600aeeSErich Keane 6976600aeeSErich Keane #pragma acc kernels num_workers(Convert) 7076600aeeSErich Keane while(true){} 7176600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 7276600aeeSErich Keane // CHECK-NEXT: num_workers clause 7376600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion> 7476600aeeSErich Keane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int' 7576600aeeSErich Keane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int 7676600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'struct CorrectConvert':'CorrectConvert' lvalue Var 7776600aeeSErich Keane // CHECK-NEXT: WhileStmt 7876600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 7976600aeeSErich Keane // CHECK-NEXT: CompoundStmt 80b8adf169SErich Keane 81b8adf169SErich Keane #pragma acc kernels vector_length(some_short()) 82b8adf169SErich Keane while(true){} 83b8adf169SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 84b8adf169SErich Keane // CHECK-NEXT: vector_length clause 85b8adf169SErich Keane // CHECK-NEXT: CallExpr{{.*}}'short' 86b8adf169SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay> 87b8adf169SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()' 88b8adf169SErich Keane // CHECK-NEXT: WhileStmt 89b8adf169SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 90b8adf169SErich Keane // CHECK-NEXT: CompoundStmt 91dc20a0eaSErich Keane 92dc20a0eaSErich Keane #pragma acc parallel num_gangs(some_int(), some_long(), some_short()) 93dc20a0eaSErich Keane while(true){} 94dc20a0eaSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 95dc20a0eaSErich Keane // CHECK-NEXT: num_gangs clause 96dc20a0eaSErich Keane // CHECK-NEXT: CallExpr{{.*}}'int' 97dc20a0eaSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 98dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 99dc20a0eaSErich Keane // CHECK-NEXT: CallExpr{{.*}}'long' 100dc20a0eaSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay> 101dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' 102dc20a0eaSErich Keane // CHECK-NEXT: CallExpr{{.*}}'short' 103dc20a0eaSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay> 104dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()' 105dc20a0eaSErich Keane // CHECK-NEXT: WhileStmt 106dc20a0eaSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 107dc20a0eaSErich Keane // CHECK-NEXT: CompoundStmt 108dc20a0eaSErich Keane 109dc20a0eaSErich Keane #pragma acc kernels num_gangs(some_int()) 110dc20a0eaSErich Keane while(true){} 111dc20a0eaSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 112dc20a0eaSErich Keane // CHECK-NEXT: num_gangs clause 113dc20a0eaSErich Keane // CHECK-NEXT: CallExpr{{.*}}'int' 114dc20a0eaSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 115dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 116dc20a0eaSErich Keane // CHECK-NEXT: WhileStmt 117dc20a0eaSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 118dc20a0eaSErich Keane // CHECK-NEXT: CompoundStmt 11930cfe2b2Serichkeane 12030cfe2b2Serichkeane #pragma acc kernels async(some_int()) 12130cfe2b2Serichkeane while(true){} 12230cfe2b2Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 12330cfe2b2Serichkeane // CHECK-NEXT: async clause 12430cfe2b2Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 12530cfe2b2Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 12630cfe2b2Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 12730cfe2b2Serichkeane // CHECK-NEXT: WhileStmt 12830cfe2b2Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 12930cfe2b2Serichkeane // CHECK-NEXT: CompoundStmt 13030cfe2b2Serichkeane 13130cfe2b2Serichkeane #pragma acc kernels async 13230cfe2b2Serichkeane while(true){} 13330cfe2b2Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 13430cfe2b2Serichkeane // CHECK-NEXT: async clause 13530cfe2b2Serichkeane // CHECK-NEXT: WhileStmt 13630cfe2b2Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 13730cfe2b2Serichkeane // CHECK-NEXT: CompoundStmt 138*b1b46521Serichkeane 139*b1b46521Serichkeane #pragma acc parallel wait 140*b1b46521Serichkeane while (true){} 141*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 142*b1b46521Serichkeane // CHECK-NEXT: wait clause 143*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 144*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 145*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 146*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 147*b1b46521Serichkeane #pragma acc parallel wait() 148*b1b46521Serichkeane while (true){} 149*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 150*b1b46521Serichkeane // CHECK-NEXT: wait clause 151*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 152*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 153*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 154*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 155*b1b46521Serichkeane #pragma acc parallel wait(some_int(), some_long()) 156*b1b46521Serichkeane while (true){} 157*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 158*b1b46521Serichkeane // CHECK-NEXT: wait clause 159*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 160*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 161*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 162*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 163*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'long' 164*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay> 165*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' 166*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 167*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 168*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 169*b1b46521Serichkeane #pragma acc parallel wait(queues:some_int(), some_long()) 170*b1b46521Serichkeane while (true){} 171*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 172*b1b46521Serichkeane // CHECK-NEXT: wait clause has queues tag 173*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 174*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 175*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 176*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 177*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'long' 178*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay> 179*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' 180*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 181*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 182*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 183*b1b46521Serichkeane #pragma acc parallel wait(devnum: some_int() :some_int(), some_long()) 184*b1b46521Serichkeane while (true){} 185*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 186*b1b46521Serichkeane // CHECK-NEXT: wait clause has devnum 187*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 188*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 189*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 190*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 191*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 192*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 193*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'long' 194*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay> 195*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' 196*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 197*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 198*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 199*b1b46521Serichkeane #pragma acc parallel wait(devnum: some_int() : queues :some_int(), some_long()) wait(devnum: some_int() : queues :some_int(), some_long()) 200*b1b46521Serichkeane while (true){} 201*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 202*b1b46521Serichkeane // CHECK-NEXT: wait clause has devnum has queues tag 203*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 204*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 205*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 206*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 207*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 208*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 209*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'long' 210*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay> 211*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' 212*b1b46521Serichkeane // CHECK-NEXT: wait clause has devnum has queues tag 213*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 214*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 215*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 216*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'int' 217*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> 218*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' 219*b1b46521Serichkeane // CHECK-NEXT: CallExpr{{.*}}'long' 220*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay> 221*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' 222*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 223*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 224*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 22576600aeeSErich Keane } 22676600aeeSErich Keane 22730cfe2b2Serichkeane 22876600aeeSErich Keane template<typename T, typename U> 22976600aeeSErich Keane void TemplUses(T t, U u) { 23076600aeeSErich Keane // CHECK-NEXT: FunctionTemplateDecl 23176600aeeSErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T 23276600aeeSErich Keane // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 U 23376600aeeSErich Keane // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)' 23476600aeeSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' 23576600aeeSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' 23676600aeeSErich Keane // CHECK-NEXT: CompoundStmt 23776600aeeSErich Keane 23876600aeeSErich Keane #pragma acc parallel num_workers(t) 23976600aeeSErich Keane while(true){} 24076600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 24176600aeeSErich Keane // CHECK-NEXT: num_workers clause 24276600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue ParmVar{{.*}} 't' 'T' 24376600aeeSErich Keane // CHECK-NEXT: WhileStmt 24476600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 24576600aeeSErich Keane // CHECK-NEXT: CompoundStmt 24676600aeeSErich Keane 24776600aeeSErich Keane #pragma acc kernels num_workers(u) 24876600aeeSErich Keane while(true){} 24976600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 25076600aeeSErich Keane // CHECK-NEXT: num_workers clause 25176600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 25276600aeeSErich Keane // CHECK-NEXT: WhileStmt 25376600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 25476600aeeSErich Keane // CHECK-NEXT: CompoundStmt 25576600aeeSErich Keane 25676600aeeSErich Keane #pragma acc parallel num_workers(U::value) 25776600aeeSErich Keane while(true){} 25876600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 25976600aeeSErich Keane // CHECK-NEXT: num_workers clause 26076600aeeSErich Keane // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue 26176600aeeSErich Keane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' 26276600aeeSErich Keane // CHECK-NEXT: WhileStmt 26376600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 26476600aeeSErich Keane // CHECK-NEXT: CompoundStmt 26576600aeeSErich Keane 26676600aeeSErich Keane #pragma acc kernels num_workers(T{}) 26776600aeeSErich Keane while(true){} 26876600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 26976600aeeSErich Keane // CHECK-NEXT: num_workers clause 27076600aeeSErich Keane // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list 27176600aeeSErich Keane // CHECK-NEXT: InitListExpr{{.*}} 'void' 27276600aeeSErich Keane // CHECK-NEXT: WhileStmt 27376600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 27476600aeeSErich Keane // CHECK-NEXT: CompoundStmt 27576600aeeSErich Keane 27676600aeeSErich Keane #pragma acc parallel num_workers(U{}) 27776600aeeSErich Keane while(true){} 27876600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 27976600aeeSErich Keane // CHECK-NEXT: num_workers clause 28076600aeeSErich Keane // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'U' 'U' list 28176600aeeSErich Keane // CHECK-NEXT: InitListExpr{{.*}} 'void' 28276600aeeSErich Keane // CHECK-NEXT: WhileStmt 28376600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 28476600aeeSErich Keane // CHECK-NEXT: CompoundStmt 28576600aeeSErich Keane 28676600aeeSErich Keane #pragma acc kernels num_workers(typename U::IntTy{}) 28776600aeeSErich Keane while(true){} 28876600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 28976600aeeSErich Keane // CHECK-NEXT: num_workers clause 29076600aeeSErich Keane // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename U::IntTy' 'typename U::IntTy' list 29176600aeeSErich Keane // CHECK-NEXT: InitListExpr{{.*}} 'void' 29276600aeeSErich Keane // CHECK-NEXT: WhileStmt 29376600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 29476600aeeSErich Keane // CHECK-NEXT: CompoundStmt 29576600aeeSErich Keane 29676600aeeSErich Keane #pragma acc parallel num_workers(typename U::ShortTy{}) 29776600aeeSErich Keane while(true){} 29876600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 29976600aeeSErich Keane // CHECK-NEXT: num_workers clause 30076600aeeSErich Keane // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename U::ShortTy' 'typename U::ShortTy' list 30176600aeeSErich Keane // CHECK-NEXT: InitListExpr{{.*}} 'void' 30276600aeeSErich Keane // CHECK-NEXT: WhileStmt 30376600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 30476600aeeSErich Keane // CHECK-NEXT: CompoundStmt 30576600aeeSErich Keane 306b8adf169SErich Keane #pragma acc kernels vector_length(u) 307b8adf169SErich Keane while(true){} 308b8adf169SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 309b8adf169SErich Keane // CHECK-NEXT: vector_length clause 310b8adf169SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 311b8adf169SErich Keane // CHECK-NEXT: WhileStmt 312b8adf169SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 313b8adf169SErich Keane // CHECK-NEXT: CompoundStmt 314b8adf169SErich Keane 315b8adf169SErich Keane #pragma acc parallel vector_length(U::value) 316b8adf169SErich Keane while(true){} 317b8adf169SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 318b8adf169SErich Keane // CHECK-NEXT: vector_length clause 319b8adf169SErich Keane // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue 320b8adf169SErich Keane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' 321b8adf169SErich Keane // CHECK-NEXT: WhileStmt 322b8adf169SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 323b8adf169SErich Keane // CHECK-NEXT: CompoundStmt 324b8adf169SErich Keane 325dc20a0eaSErich Keane #pragma acc kernels num_gangs(u) 326dc20a0eaSErich Keane while(true){} 327dc20a0eaSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 328dc20a0eaSErich Keane // CHECK-NEXT: num_gangs clause 329dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 330dc20a0eaSErich Keane // CHECK-NEXT: WhileStmt 331dc20a0eaSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 332dc20a0eaSErich Keane // CHECK-NEXT: CompoundStmt 333dc20a0eaSErich Keane 334dc20a0eaSErich Keane #pragma acc parallel num_gangs(u, U::value) 335dc20a0eaSErich Keane while(true){} 336dc20a0eaSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 337dc20a0eaSErich Keane // CHECK-NEXT: num_gangs clause 338dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 339dc20a0eaSErich Keane // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue 340dc20a0eaSErich Keane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' 341dc20a0eaSErich Keane // CHECK-NEXT: WhileStmt 342dc20a0eaSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 343dc20a0eaSErich Keane // CHECK-NEXT: CompoundStmt 344dc20a0eaSErich Keane 34530cfe2b2Serichkeane #pragma acc kernels async 34630cfe2b2Serichkeane while(true){} 34730cfe2b2Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 34830cfe2b2Serichkeane // CHECK-NEXT: async clause 34930cfe2b2Serichkeane // CHECK-NEXT: WhileStmt 35030cfe2b2Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 35130cfe2b2Serichkeane // CHECK-NEXT: CompoundStmt 35230cfe2b2Serichkeane 35330cfe2b2Serichkeane #pragma acc kernels async(u) 35430cfe2b2Serichkeane while(true){} 35530cfe2b2Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 35630cfe2b2Serichkeane // CHECK-NEXT: async clause 35730cfe2b2Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 35830cfe2b2Serichkeane // CHECK-NEXT: WhileStmt 35930cfe2b2Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 36030cfe2b2Serichkeane // CHECK-NEXT: CompoundStmt 36130cfe2b2Serichkeane 36230cfe2b2Serichkeane #pragma acc parallel async (U::value) 36330cfe2b2Serichkeane while(true){} 36430cfe2b2Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 36530cfe2b2Serichkeane // CHECK-NEXT: async clause 36630cfe2b2Serichkeane // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue 36730cfe2b2Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' 36830cfe2b2Serichkeane // CHECK-NEXT: WhileStmt 36930cfe2b2Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 37030cfe2b2Serichkeane // CHECK-NEXT: CompoundStmt 37130cfe2b2Serichkeane 372*b1b46521Serichkeane #pragma acc parallel wait 373*b1b46521Serichkeane while (true){} 374*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 375*b1b46521Serichkeane // CHECK-NEXT: wait clause 376*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 377*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 378*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 379*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 380*b1b46521Serichkeane 381*b1b46521Serichkeane #pragma acc parallel wait() 382*b1b46521Serichkeane while (true){} 383*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 384*b1b46521Serichkeane // CHECK-NEXT: wait clause 385*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 386*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 387*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 388*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 389*b1b46521Serichkeane 390*b1b46521Serichkeane #pragma acc parallel wait(U::value, u) 391*b1b46521Serichkeane while (true){} 392*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 393*b1b46521Serichkeane // CHECK-NEXT: wait clause 394*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 395*b1b46521Serichkeane // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue 396*b1b46521Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' 397*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 398*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 399*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 400*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 401*b1b46521Serichkeane 402*b1b46521Serichkeane #pragma acc parallel wait(queues: U::value, u) 403*b1b46521Serichkeane while (true){} 404*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 405*b1b46521Serichkeane // CHECK-NEXT: wait clause has queues tag 406*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 407*b1b46521Serichkeane // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue 408*b1b46521Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' 409*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 410*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 411*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 412*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 413*b1b46521Serichkeane 414*b1b46521Serichkeane #pragma acc parallel wait(devnum:u:queues: U::value, u) 415*b1b46521Serichkeane while (true){} 416*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 417*b1b46521Serichkeane // CHECK-NEXT: wait clause has devnum has queues tag 418*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 419*b1b46521Serichkeane // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue 420*b1b46521Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' 421*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 422*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 423*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 424*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 425*b1b46521Serichkeane 426*b1b46521Serichkeane #pragma acc parallel wait(devnum:u: U::value, u) 427*b1b46521Serichkeane while (true){} 428*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 429*b1b46521Serichkeane // CHECK-NEXT: wait clause has devnum 430*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 431*b1b46521Serichkeane // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue 432*b1b46521Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' 433*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' 434*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 435*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 436*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 437*b1b46521Serichkeane 438dc20a0eaSErich Keane // CHECK-NEXT: DeclStmt 439dc20a0eaSErich Keane // CHECK-NEXT: VarDecl{{.*}}EndMarker 440dc20a0eaSErich Keane int EndMarker; 441dc20a0eaSErich Keane 44276600aeeSErich Keane // Check the instantiated versions of the above. 44376600aeeSErich Keane // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (CorrectConvert, HasInt)' implicit_instantiation 44476600aeeSErich Keane // CHECK-NEXT: TemplateArgument type 'CorrectConvert' 44576600aeeSErich Keane // CHECK-NEXT: RecordType{{.*}} 'CorrectConvert' 44676600aeeSErich Keane // CHECK-NEXT: CXXRecord{{.*}} 'CorrectConvert' 44776600aeeSErich Keane // CHECK-NEXT: TemplateArgument type 'HasInt' 44876600aeeSErich Keane // CHECK-NEXT: RecordType{{.*}} 'HasInt' 44976600aeeSErich Keane // CHECK-NEXT: CXXRecord{{.*}} 'HasInt' 45076600aeeSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} used t 'CorrectConvert' 45176600aeeSErich Keane // CHECK-NEXT: ParmVarDecl{{.*}} used u 'HasInt' 45276600aeeSErich Keane // CHECK-NEXT: CompoundStmt 45376600aeeSErich Keane 45476600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 45576600aeeSErich Keane // CHECK-NEXT: num_workers clause 45676600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion> 45776600aeeSErich Keane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int' 45876600aeeSErich Keane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int 45976600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'CorrectConvert' lvalue ParmVar 46076600aeeSErich Keane // CHECK-NEXT: WhileStmt 46176600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 46276600aeeSErich Keane // CHECK-NEXT: CompoundStmt 46376600aeeSErich Keane 46476600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 46576600aeeSErich Keane // CHECK-NEXT: num_workers clause 46676600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 46776600aeeSErich Keane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 46876600aeeSErich Keane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 46976600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 47076600aeeSErich Keane // CHECK-NEXT: WhileStmt 47176600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 47276600aeeSErich Keane // CHECK-NEXT: CompoundStmt 47376600aeeSErich Keane 47476600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 47576600aeeSErich Keane // CHECK-NEXT: num_workers clause 47676600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 47776600aeeSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' 47876600aeeSErich Keane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' 47976600aeeSErich Keane // CHECK-NEXT: WhileStmt 48076600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 48176600aeeSErich Keane // CHECK-NEXT: CompoundStmt 48276600aeeSErich Keane 48376600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 48476600aeeSErich Keane // CHECK-NEXT: num_workers clause 48576600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion> 48676600aeeSErich Keane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int' 48776600aeeSErich Keane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int 48876600aeeSErich Keane // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'CorrectConvert' lvalue 48976600aeeSErich Keane // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'CorrectConvert' functional cast to struct CorrectConvert <NoOp> 49076600aeeSErich Keane // CHECK-NEXT: InitListExpr{{.*}}'CorrectConvert' 49176600aeeSErich Keane // CHECK-NEXT: WhileStmt 49276600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 49376600aeeSErich Keane // CHECK-NEXT: CompoundStmt 49476600aeeSErich Keane 49576600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 49676600aeeSErich Keane // CHECK-NEXT: num_workers clause 49776600aeeSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 49876600aeeSErich Keane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 49976600aeeSErich Keane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 50076600aeeSErich Keane // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'HasInt' lvalue 50176600aeeSErich Keane // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'HasInt' functional cast to struct HasInt <NoOp> 50276600aeeSErich Keane // CHECK-NEXT: InitListExpr{{.*}}'HasInt' 50376600aeeSErich Keane // CHECK-NEXT: WhileStmt 50476600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 50576600aeeSErich Keane // CHECK-NEXT: CompoundStmt 50676600aeeSErich Keane 50776600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 50876600aeeSErich Keane // CHECK-NEXT: num_workers clause 50976600aeeSErich Keane // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'typename HasInt::IntTy':'int' functional cast to typename struct HasInt::IntTy <NoOp> 51076600aeeSErich Keane // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::IntTy':'int' 51176600aeeSErich Keane // CHECK-NEXT: WhileStmt 51276600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 51376600aeeSErich Keane // CHECK-NEXT: CompoundStmt 51476600aeeSErich Keane 51576600aeeSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 51676600aeeSErich Keane // CHECK-NEXT: num_workers clause 51776600aeeSErich Keane // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'typename HasInt::ShortTy':'short' functional cast to typename struct HasInt::ShortTy <NoOp> 51876600aeeSErich Keane // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::ShortTy':'short' 51976600aeeSErich Keane // CHECK-NEXT: WhileStmt 52076600aeeSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 52176600aeeSErich Keane // CHECK-NEXT: CompoundStmt 522b8adf169SErich Keane 523b8adf169SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 524b8adf169SErich Keane // CHECK-NEXT: vector_length clause 525b8adf169SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 526b8adf169SErich Keane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 527b8adf169SErich Keane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 528b8adf169SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 529b8adf169SErich Keane // CHECK-NEXT: WhileStmt 530b8adf169SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 531b8adf169SErich Keane // CHECK-NEXT: CompoundStmt 532b8adf169SErich Keane 533b8adf169SErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 534b8adf169SErich Keane // CHECK-NEXT: vector_length clause 535b8adf169SErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 536b8adf169SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' 537b8adf169SErich Keane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' 538b8adf169SErich Keane // CHECK-NEXT: WhileStmt 539b8adf169SErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 540b8adf169SErich Keane // CHECK-NEXT: CompoundStmt 541dc20a0eaSErich Keane 542dc20a0eaSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 543dc20a0eaSErich Keane // CHECK-NEXT: num_gangs clause 544dc20a0eaSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 545dc20a0eaSErich Keane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 546dc20a0eaSErich Keane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 547dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 548dc20a0eaSErich Keane // CHECK-NEXT: WhileStmt 549dc20a0eaSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 550dc20a0eaSErich Keane // CHECK-NEXT: CompoundStmt 551dc20a0eaSErich Keane 552dc20a0eaSErich Keane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 553dc20a0eaSErich Keane // CHECK-NEXT: num_gangs clause 554dc20a0eaSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 555dc20a0eaSErich Keane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 556dc20a0eaSErich Keane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 557dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 558dc20a0eaSErich Keane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 559dc20a0eaSErich Keane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' 560dc20a0eaSErich Keane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' 561dc20a0eaSErich Keane // CHECK-NEXT: WhileStmt 562dc20a0eaSErich Keane // CHECK-NEXT: CXXBoolLiteralExpr 563dc20a0eaSErich Keane // CHECK-NEXT: CompoundStmt 564dc20a0eaSErich Keane 56530cfe2b2Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 56630cfe2b2Serichkeane // CHECK-NEXT: async clause 56730cfe2b2Serichkeane // CHECK-NEXT: WhileStmt 56830cfe2b2Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 56930cfe2b2Serichkeane // CHECK-NEXT: CompoundStmt 57030cfe2b2Serichkeane 57130cfe2b2Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels 57230cfe2b2Serichkeane // CHECK-NEXT: async clause 57330cfe2b2Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 57430cfe2b2Serichkeane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 57530cfe2b2Serichkeane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 57630cfe2b2Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 57730cfe2b2Serichkeane // CHECK-NEXT: WhileStmt 57830cfe2b2Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 57930cfe2b2Serichkeane // CHECK-NEXT: CompoundStmt 58030cfe2b2Serichkeane 58130cfe2b2Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 58230cfe2b2Serichkeane // CHECK-NEXT: async clause 58330cfe2b2Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 58430cfe2b2Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' 58530cfe2b2Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' 58630cfe2b2Serichkeane // CHECK-NEXT: WhileStmt 58730cfe2b2Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 58830cfe2b2Serichkeane // CHECK-NEXT: CompoundStmt 58930cfe2b2Serichkeane 590*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 591*b1b46521Serichkeane // CHECK-NEXT: wait clause 592*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 593*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 594*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 595*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 596*b1b46521Serichkeane 597*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 598*b1b46521Serichkeane // CHECK-NEXT: wait clause 599*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 600*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 601*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 602*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 603*b1b46521Serichkeane 604*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 605*b1b46521Serichkeane // CHECK-NEXT: wait clause 606*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 607*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 608*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' 609*b1b46521Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' 610*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 611*b1b46521Serichkeane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 612*b1b46521Serichkeane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 613*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 614*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 615*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 616*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 617*b1b46521Serichkeane 618*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 619*b1b46521Serichkeane // CHECK-NEXT: wait clause has queues tag 620*b1b46521Serichkeane // CHECK-NEXT: <<<NULL>>> 621*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 622*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' 623*b1b46521Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' 624*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 625*b1b46521Serichkeane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 626*b1b46521Serichkeane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 627*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 628*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 629*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 630*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 631*b1b46521Serichkeane 632*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 633*b1b46521Serichkeane // CHECK-NEXT: wait clause has devnum has queues tag 634*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 635*b1b46521Serichkeane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 636*b1b46521Serichkeane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 637*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 638*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 639*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' 640*b1b46521Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' 641*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 642*b1b46521Serichkeane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 643*b1b46521Serichkeane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 644*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 645*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 646*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 647*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 648*b1b46521Serichkeane 649*b1b46521Serichkeane // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel 650*b1b46521Serichkeane // CHECK-NEXT: wait clause has devnum 651*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 652*b1b46521Serichkeane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 653*b1b46521Serichkeane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 654*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 655*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> 656*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' 657*b1b46521Serichkeane // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' 658*b1b46521Serichkeane // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> 659*b1b46521Serichkeane // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' 660*b1b46521Serichkeane // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char 661*b1b46521Serichkeane // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar 662*b1b46521Serichkeane // CHECK-NEXT: WhileStmt 663*b1b46521Serichkeane // CHECK-NEXT: CXXBoolLiteralExpr 664*b1b46521Serichkeane // CHECK-NEXT: CompoundStmt 665*b1b46521Serichkeane 666dc20a0eaSErich Keane // CHECK-NEXT: DeclStmt 667dc20a0eaSErich Keane // CHECK-NEXT: VarDecl{{.*}}EndMarker 66876600aeeSErich Keane } 66976600aeeSErich Keane 67076600aeeSErich Keane struct HasInt { 67176600aeeSErich Keane using IntTy = int; 67276600aeeSErich Keane using ShortTy = short; 67376600aeeSErich Keane static constexpr int value = 1; 67476600aeeSErich Keane 67576600aeeSErich Keane operator char(); 67676600aeeSErich Keane }; 67776600aeeSErich Keane 67876600aeeSErich Keane void Inst() { 67976600aeeSErich Keane TemplUses<CorrectConvert, HasInt>({}, {}); 68076600aeeSErich Keane } 68176600aeeSErich Keane #endif // PCH_HELPER 682