brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.2 KiB · 63c5cde Raw
682 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s2 3// Test this with PCH.4// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s5// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s6 7#ifndef PCH_HELPER8#define PCH_HELPER9 10int some_int();11short some_short();12long some_long();13enum E{};14E some_enum();15 16struct CorrectConvert {17  operator int();18} Convert;19 20 21void NormalUses() {22  // CHECK: FunctionDecl{{.*}}NormalUses23  // CHECK-NEXT: CompoundStmt24 25#pragma acc parallel num_workers(some_int())26  while(true){}27  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel28  // CHECK-NEXT: num_workers clause29  // CHECK-NEXT: CallExpr{{.*}}'int'30  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>31  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'32  // CHECK-NEXT: WhileStmt33  // CHECK-NEXT: CXXBoolLiteralExpr34  // CHECK-NEXT: CompoundStmt35 36#pragma acc kernels num_workers(some_short())37  while(true){}38  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels39  // CHECK-NEXT: num_workers clause40  // CHECK-NEXT: CallExpr{{.*}}'short'41  // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay>42  // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()'43  // CHECK-NEXT: WhileStmt44  // CHECK-NEXT: CXXBoolLiteralExpr45  // CHECK-NEXT: CompoundStmt46 47#pragma acc parallel num_workers(some_long())48  while(true){}49  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel50  // CHECK-NEXT: num_workers clause51  // CHECK-NEXT: CallExpr{{.*}}'long'52  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>53  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'54  // CHECK-NEXT: WhileStmt55  // CHECK-NEXT: CXXBoolLiteralExpr56  // CHECK-NEXT: CompoundStmt57 58#pragma acc parallel num_workers(some_enum())59  while(true){}60  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel61  // CHECK-NEXT: num_workers clause62  // CHECK-NEXT: CallExpr{{.*}}'E'63  // CHECK-NEXT: ImplicitCastExpr{{.*}}'E (*)()' <FunctionToPointerDecay>64  // CHECK-NEXT: DeclRefExpr{{.*}}'E ()' lvalue Function{{.*}} 'some_enum' 'E ()'65  // CHECK-NEXT: WhileStmt66  // CHECK-NEXT: CXXBoolLiteralExpr67  // CHECK-NEXT: CompoundStmt68 69#pragma acc kernels num_workers(Convert)70  while(true){}71  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels72  // CHECK-NEXT: num_workers clause73  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>74  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'75  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int76  // CHECK-NEXT: DeclRefExpr{{.*}} 'struct CorrectConvert' lvalue Var77  // CHECK-NEXT: WhileStmt78  // CHECK-NEXT: CXXBoolLiteralExpr79  // CHECK-NEXT: CompoundStmt80 81#pragma acc kernels vector_length(some_short())82  while(true){}83  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels84  // CHECK-NEXT: vector_length clause85  // CHECK-NEXT: CallExpr{{.*}}'short'86  // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay>87  // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()'88  // CHECK-NEXT: WhileStmt89  // CHECK-NEXT: CXXBoolLiteralExpr90  // CHECK-NEXT: CompoundStmt91 92#pragma acc parallel num_gangs(some_int(), some_long(), some_short())93  while(true){}94  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel95  // CHECK-NEXT: num_gangs clause96  // CHECK-NEXT: CallExpr{{.*}}'int'97  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>98  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'99  // CHECK-NEXT: CallExpr{{.*}}'long'100  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>101  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'102  // CHECK-NEXT: CallExpr{{.*}}'short'103  // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay>104  // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()'105  // CHECK-NEXT: WhileStmt106  // CHECK-NEXT: CXXBoolLiteralExpr107  // CHECK-NEXT: CompoundStmt108 109#pragma acc kernels num_gangs(some_int())110  while(true){}111  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels112  // CHECK-NEXT: num_gangs clause113  // CHECK-NEXT: CallExpr{{.*}}'int'114  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>115  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'116  // CHECK-NEXT: WhileStmt117  // CHECK-NEXT: CXXBoolLiteralExpr118  // CHECK-NEXT: CompoundStmt119 120#pragma acc kernels async(some_int())121  while(true){}122  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels123  // CHECK-NEXT: async clause124  // CHECK-NEXT: CallExpr{{.*}}'int'125  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>126  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'127  // CHECK-NEXT: WhileStmt128  // CHECK-NEXT: CXXBoolLiteralExpr129  // CHECK-NEXT: CompoundStmt130 131#pragma acc kernels async132  while(true){}133  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels134  // CHECK-NEXT: async clause135  // CHECK-NEXT: WhileStmt136  // CHECK-NEXT: CXXBoolLiteralExpr137  // CHECK-NEXT: CompoundStmt138 139#pragma acc parallel wait140  while (true){}141  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel142  // CHECK-NEXT: wait clause143  // CHECK-NEXT: <<<NULL>>>144  // CHECK-NEXT: WhileStmt145  // CHECK-NEXT: CXXBoolLiteralExpr146  // CHECK-NEXT: CompoundStmt147#pragma acc parallel wait148  while (true){}149  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel150  // CHECK-NEXT: wait clause151  // CHECK-NEXT: <<<NULL>>>152  // CHECK-NEXT: WhileStmt153  // CHECK-NEXT: CXXBoolLiteralExpr154  // CHECK-NEXT: CompoundStmt155#pragma acc parallel wait(some_int(), some_long())156  while (true){}157  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel158  // CHECK-NEXT: wait clause159  // CHECK-NEXT: <<<NULL>>>160  // CHECK-NEXT: CallExpr{{.*}}'int'161  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>162  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'163  // CHECK-NEXT: CallExpr{{.*}}'long'164  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>165  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'166  // CHECK-NEXT: WhileStmt167  // CHECK-NEXT: CXXBoolLiteralExpr168  // CHECK-NEXT: CompoundStmt169#pragma acc parallel wait(queues:some_int(), some_long())170  while (true){}171  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel172  // CHECK-NEXT: wait clause has queues tag173  // CHECK-NEXT: <<<NULL>>>174  // CHECK-NEXT: CallExpr{{.*}}'int'175  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>176  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'177  // CHECK-NEXT: CallExpr{{.*}}'long'178  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>179  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'180  // CHECK-NEXT: WhileStmt181  // CHECK-NEXT: CXXBoolLiteralExpr182  // CHECK-NEXT: CompoundStmt183#pragma acc parallel wait(devnum: some_int() :some_int(), some_long())184  while (true){}185  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel186  // CHECK-NEXT: wait clause has devnum187  // CHECK-NEXT: CallExpr{{.*}}'int'188  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>189  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'190  // CHECK-NEXT: CallExpr{{.*}}'int'191  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>192  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'193  // CHECK-NEXT: CallExpr{{.*}}'long'194  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>195  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'196  // CHECK-NEXT: WhileStmt197  // CHECK-NEXT: CXXBoolLiteralExpr198  // CHECK-NEXT: CompoundStmt199#pragma acc parallel wait(devnum: some_int() : queues :some_int(), some_long()) wait(devnum: some_int() : queues :some_int(), some_long())200  while (true){}201  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel202  // CHECK-NEXT: wait clause has devnum has queues tag203  // CHECK-NEXT: CallExpr{{.*}}'int'204  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>205  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'206  // CHECK-NEXT: CallExpr{{.*}}'int'207  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>208  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'209  // CHECK-NEXT: CallExpr{{.*}}'long'210  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>211  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'212  // CHECK-NEXT: wait clause has devnum has queues tag213  // CHECK-NEXT: CallExpr{{.*}}'int'214  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>215  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'216  // CHECK-NEXT: CallExpr{{.*}}'int'217  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>218  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'219  // CHECK-NEXT: CallExpr{{.*}}'long'220  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>221  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'222  // CHECK-NEXT: WhileStmt223  // CHECK-NEXT: CXXBoolLiteralExpr224  // CHECK-NEXT: CompoundStmt225}226 227 228template<typename T, typename U>229void TemplUses(T t, U u) {230  // CHECK-NEXT: FunctionTemplateDecl231  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T232  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 U233  // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)'234  // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T'235  // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U'236  // CHECK-NEXT: CompoundStmt237 238#pragma acc parallel num_workers(t)239  while(true){}240  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel241  // CHECK-NEXT: num_workers clause242  // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue ParmVar{{.*}} 't' 'T'243  // CHECK-NEXT: WhileStmt244  // CHECK-NEXT: CXXBoolLiteralExpr245  // CHECK-NEXT: CompoundStmt246 247#pragma acc kernels num_workers(u)248  while(true){}249  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels250  // CHECK-NEXT: num_workers clause251  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'252  // CHECK-NEXT: WhileStmt253  // CHECK-NEXT: CXXBoolLiteralExpr254  // CHECK-NEXT: CompoundStmt255 256#pragma acc parallel num_workers(U::value)257  while(true){}258  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel259  // CHECK-NEXT: num_workers clause260  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue261  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'262  // CHECK-NEXT: WhileStmt263  // CHECK-NEXT: CXXBoolLiteralExpr264  // CHECK-NEXT: CompoundStmt265 266#pragma acc kernels num_workers(T{})267  while(true){}268  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels269  // CHECK-NEXT: num_workers clause270  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list271  // CHECK-NEXT: InitListExpr{{.*}} 'void'272  // CHECK-NEXT: WhileStmt273  // CHECK-NEXT: CXXBoolLiteralExpr274  // CHECK-NEXT: CompoundStmt275 276#pragma acc parallel num_workers(U{})277  while(true){}278  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel279  // CHECK-NEXT: num_workers clause280  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'U' 'U' list281  // CHECK-NEXT: InitListExpr{{.*}} 'void'282  // CHECK-NEXT: WhileStmt283  // CHECK-NEXT: CXXBoolLiteralExpr284  // CHECK-NEXT: CompoundStmt285 286#pragma acc kernels num_workers(typename U::IntTy{})287  while(true){}288  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels289  // CHECK-NEXT: num_workers clause290  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename U::IntTy' 'typename U::IntTy' list291  // CHECK-NEXT: InitListExpr{{.*}} 'void'292  // CHECK-NEXT: WhileStmt293  // CHECK-NEXT: CXXBoolLiteralExpr294  // CHECK-NEXT: CompoundStmt295 296#pragma acc parallel num_workers(typename U::ShortTy{})297  while(true){}298  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel299  // CHECK-NEXT: num_workers clause300  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename U::ShortTy' 'typename U::ShortTy' list301  // CHECK-NEXT: InitListExpr{{.*}} 'void'302  // CHECK-NEXT: WhileStmt303  // CHECK-NEXT: CXXBoolLiteralExpr304  // CHECK-NEXT: CompoundStmt305 306#pragma acc kernels vector_length(u)307  while(true){}308  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels309  // CHECK-NEXT: vector_length clause310  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'311  // CHECK-NEXT: WhileStmt312  // CHECK-NEXT: CXXBoolLiteralExpr313  // CHECK-NEXT: CompoundStmt314 315#pragma acc parallel vector_length(U::value)316  while(true){}317  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel318  // CHECK-NEXT: vector_length clause319  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue320  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'321  // CHECK-NEXT: WhileStmt322  // CHECK-NEXT: CXXBoolLiteralExpr323  // CHECK-NEXT: CompoundStmt324 325#pragma acc kernels num_gangs(u)326  while(true){}327  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels328  // CHECK-NEXT: num_gangs clause329  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'330  // CHECK-NEXT: WhileStmt331  // CHECK-NEXT: CXXBoolLiteralExpr332  // CHECK-NEXT: CompoundStmt333 334#pragma acc parallel num_gangs(u, U::value)335  while(true){}336  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel337  // CHECK-NEXT: num_gangs clause338  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'339  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue340  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'341  // CHECK-NEXT: WhileStmt342  // CHECK-NEXT: CXXBoolLiteralExpr343  // CHECK-NEXT: CompoundStmt344 345#pragma acc kernels async346  while(true){}347  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels348  // CHECK-NEXT: async clause349  // CHECK-NEXT: WhileStmt350  // CHECK-NEXT: CXXBoolLiteralExpr351  // CHECK-NEXT: CompoundStmt352 353#pragma acc kernels async(u)354  while(true){}355  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels356  // CHECK-NEXT: async clause357  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'358  // CHECK-NEXT: WhileStmt359  // CHECK-NEXT: CXXBoolLiteralExpr360  // CHECK-NEXT: CompoundStmt361 362#pragma acc parallel async (U::value)363  while(true){}364  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel365  // CHECK-NEXT: async clause366  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue367  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'368  // CHECK-NEXT: WhileStmt369  // CHECK-NEXT: CXXBoolLiteralExpr370  // CHECK-NEXT: CompoundStmt371 372#pragma acc parallel wait373  while (true){}374  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel375  // CHECK-NEXT: wait clause376  // CHECK-NEXT: <<<NULL>>>377  // CHECK-NEXT: WhileStmt378  // CHECK-NEXT: CXXBoolLiteralExpr379  // CHECK-NEXT: CompoundStmt380 381#pragma acc parallel wait382  while (true){}383  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel384  // CHECK-NEXT: wait clause385  // CHECK-NEXT: <<<NULL>>>386  // CHECK-NEXT: WhileStmt387  // CHECK-NEXT: CXXBoolLiteralExpr388  // CHECK-NEXT: CompoundStmt389 390#pragma acc parallel wait(U::value, u)391  while (true){}392  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel393  // CHECK-NEXT: wait clause394  // CHECK-NEXT: <<<NULL>>>395  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue396  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'397  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'398  // CHECK-NEXT: WhileStmt399  // CHECK-NEXT: CXXBoolLiteralExpr400  // CHECK-NEXT: CompoundStmt401 402#pragma acc parallel wait(queues: U::value, u)403  while (true){}404  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel405  // CHECK-NEXT: wait clause has queues tag406  // CHECK-NEXT: <<<NULL>>>407  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue408  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'409  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'410  // CHECK-NEXT: WhileStmt411  // CHECK-NEXT: CXXBoolLiteralExpr412  // CHECK-NEXT: CompoundStmt413 414#pragma acc parallel wait(devnum:u:queues: U::value, u)415  while (true){}416  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel417  // CHECK-NEXT: wait clause has devnum has queues tag418  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'419  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue420  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'421  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'422  // CHECK-NEXT: WhileStmt423  // CHECK-NEXT: CXXBoolLiteralExpr424  // CHECK-NEXT: CompoundStmt425 426#pragma acc parallel wait(devnum:u: U::value, u)427  while (true){}428  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel429  // CHECK-NEXT: wait clause has devnum430  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'431  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue432  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'433  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'434  // CHECK-NEXT: WhileStmt435  // CHECK-NEXT: CXXBoolLiteralExpr436  // CHECK-NEXT: CompoundStmt437 438  // CHECK-NEXT: DeclStmt439  // CHECK-NEXT: VarDecl{{.*}}EndMarker440  int EndMarker;441 442  // Check the instantiated versions of the above.443  // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (CorrectConvert, HasInt)' implicit_instantiation444  // CHECK-NEXT: TemplateArgument type 'CorrectConvert'445  // CHECK-NEXT: RecordType{{.*}} 'CorrectConvert'446  // CHECK-NEXT: CXXRecord{{.*}} 'CorrectConvert'447  // CHECK-NEXT: TemplateArgument type 'HasInt'448  // CHECK-NEXT: RecordType{{.*}} 'HasInt'449  // CHECK-NEXT: CXXRecord{{.*}} 'HasInt'450  // CHECK-NEXT: ParmVarDecl{{.*}} used t 'CorrectConvert'451  // CHECK-NEXT: ParmVarDecl{{.*}} used u 'HasInt'452  // CHECK-NEXT: CompoundStmt453 454  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel455  // CHECK-NEXT: num_workers clause456  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>457  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'458  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int459  // CHECK-NEXT: DeclRefExpr{{.*}} 'CorrectConvert' lvalue ParmVar460  // CHECK-NEXT: WhileStmt461  // CHECK-NEXT: CXXBoolLiteralExpr462  // CHECK-NEXT: CompoundStmt463 464  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels465  // CHECK-NEXT: num_workers clause466  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>467  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'468  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char469  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar470  // CHECK-NEXT: WhileStmt471  // CHECK-NEXT: CXXBoolLiteralExpr472  // CHECK-NEXT: CompoundStmt473 474  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel475  // CHECK-NEXT: num_workers clause476  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>477  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'478  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'479  // CHECK-NEXT: WhileStmt480  // CHECK-NEXT: CXXBoolLiteralExpr481  // CHECK-NEXT: CompoundStmt482 483  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels484  // CHECK-NEXT: num_workers clause485  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>486  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'487  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int488  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'CorrectConvert' lvalue489  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'CorrectConvert' functional cast to struct CorrectConvert <NoOp>490  // CHECK-NEXT: InitListExpr{{.*}}'CorrectConvert'491  // CHECK-NEXT: WhileStmt492  // CHECK-NEXT: CXXBoolLiteralExpr493  // CHECK-NEXT: CompoundStmt494 495  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel496  // CHECK-NEXT: num_workers clause497  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>498  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'499  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char500  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'HasInt' lvalue501  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'HasInt' functional cast to struct HasInt <NoOp>502  // CHECK-NEXT: InitListExpr{{.*}}'HasInt'503  // CHECK-NEXT: WhileStmt504  // CHECK-NEXT: CXXBoolLiteralExpr505  // CHECK-NEXT: CompoundStmt506 507  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels508  // CHECK-NEXT: num_workers clause509  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'typename HasInt::IntTy':'int' functional cast to typename HasInt::IntTy <NoOp>510  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::IntTy':'int'511  // CHECK-NEXT: WhileStmt512  // CHECK-NEXT: CXXBoolLiteralExpr513  // CHECK-NEXT: CompoundStmt514 515  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel516  // CHECK-NEXT: num_workers clause517  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'typename HasInt::ShortTy':'short' functional cast to typename HasInt::ShortTy <NoOp>518  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::ShortTy':'short'519  // CHECK-NEXT: WhileStmt520  // CHECK-NEXT: CXXBoolLiteralExpr521  // CHECK-NEXT: CompoundStmt522 523  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels524  // CHECK-NEXT: vector_length clause525  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>526  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'527  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char528  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar529  // CHECK-NEXT: WhileStmt530  // CHECK-NEXT: CXXBoolLiteralExpr531  // CHECK-NEXT: CompoundStmt532 533  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel534  // CHECK-NEXT: vector_length clause535  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>536  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'537  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'538  // CHECK-NEXT: WhileStmt539  // CHECK-NEXT: CXXBoolLiteralExpr540  // CHECK-NEXT: CompoundStmt541 542  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels543  // CHECK-NEXT: num_gangs clause544  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>545  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'546  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char547  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar548  // CHECK-NEXT: WhileStmt549  // CHECK-NEXT: CXXBoolLiteralExpr550  // CHECK-NEXT: CompoundStmt551 552  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel553  // CHECK-NEXT: num_gangs clause554  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>555  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'556  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char557  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar558  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>559  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'560  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'561  // CHECK-NEXT: WhileStmt562  // CHECK-NEXT: CXXBoolLiteralExpr563  // CHECK-NEXT: CompoundStmt564 565  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels566  // CHECK-NEXT: async clause567  // CHECK-NEXT: WhileStmt568  // CHECK-NEXT: CXXBoolLiteralExpr569  // CHECK-NEXT: CompoundStmt570 571  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels572  // CHECK-NEXT: async clause573  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>574  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'575  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char576  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar577  // CHECK-NEXT: WhileStmt578  // CHECK-NEXT: CXXBoolLiteralExpr579  // CHECK-NEXT: CompoundStmt580 581  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel582  // CHECK-NEXT: async clause583  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>584  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'585  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'586  // CHECK-NEXT: WhileStmt587  // CHECK-NEXT: CXXBoolLiteralExpr588  // CHECK-NEXT: CompoundStmt589 590  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel591  // CHECK-NEXT: wait clause592  // CHECK-NEXT: <<<NULL>>>593  // CHECK-NEXT: WhileStmt594  // CHECK-NEXT: CXXBoolLiteralExpr595  // CHECK-NEXT: CompoundStmt596 597  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel598  // CHECK-NEXT: wait clause599  // CHECK-NEXT: <<<NULL>>>600  // CHECK-NEXT: WhileStmt601  // CHECK-NEXT: CXXBoolLiteralExpr602  // CHECK-NEXT: CompoundStmt603 604  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel605  // CHECK-NEXT: wait clause606  // CHECK-NEXT: <<<NULL>>>607  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>608  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'609  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'610  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>611  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'612  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char613  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar614  // CHECK-NEXT: WhileStmt615  // CHECK-NEXT: CXXBoolLiteralExpr616  // CHECK-NEXT: CompoundStmt617 618  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel619  // CHECK-NEXT: wait clause has queues tag620  // CHECK-NEXT: <<<NULL>>>621  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>622  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'623  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'624  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>625  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'626  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char627  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar628  // CHECK-NEXT: WhileStmt629  // CHECK-NEXT: CXXBoolLiteralExpr630  // CHECK-NEXT: CompoundStmt631 632  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel633  // CHECK-NEXT: wait clause has devnum has queues tag634  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>635  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'636  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char637  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar638  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>639  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'640  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'641  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>642  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'643  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char644  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar645  // CHECK-NEXT: WhileStmt646  // CHECK-NEXT: CXXBoolLiteralExpr647  // CHECK-NEXT: CompoundStmt648 649  // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel650  // CHECK-NEXT: wait clause has devnum651  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>652  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'653  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char654  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar655  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>656  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'657  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'658  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>659  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'660  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char661  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar662  // CHECK-NEXT: WhileStmt663  // CHECK-NEXT: CXXBoolLiteralExpr664  // CHECK-NEXT: CompoundStmt665 666  // CHECK-NEXT: DeclStmt667  // CHECK-NEXT: VarDecl{{.*}}EndMarker668}669 670struct HasInt {671  using IntTy = int;672  using ShortTy = short;673  static constexpr int value = 1;674 675  operator char();676};677 678void Inst() {679  TemplUses<CorrectConvert, HasInt>({}, {});680}681#endif // PCH_HELPER682