brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.2 KiB · 2a8e56b Raw
267 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();11long some_long();12 13void NormalUses() {14  // CHECK: FunctionDecl{{.*}}NormalUses15  // CHECK-NEXT: CompoundStmt16 17  int I;18  // CHECK-NEXT: DeclStmt19  // CHECK-NEXT: VarDecl20 21#pragma acc data copyin(I) wait22  ;23  // CHECK-NEXT: OpenACCDataConstruct{{.*}}data24  // CHECK-NEXT: copyin clause25  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int'26  // CHECK-NEXT: wait clause27  // CHECK-NEXT: <<<NULL>>>28  // CHECK-NEXT: NullStmt29#pragma acc enter data copyin(I) wait30  // CHECK: OpenACCEnterDataConstruct{{.*}}enter data31  // CHECK-NEXT: copyin clause32  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int'33  // CHECK-NEXT: wait clause34  // CHECK-NEXT: <<<NULL>>>35#pragma acc exit data copyout(I) wait(some_int(), some_long())36  // CHECK: OpenACCExitDataConstruct{{.*}}exit data37  // CHECK-NEXT: copyout clause38  // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'int'39  // CHECK-NEXT: wait clause40  // CHECK-NEXT: <<<NULL>>>41  // CHECK-NEXT: CallExpr{{.*}}'int'42  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>43  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'44  // CHECK-NEXT: CallExpr{{.*}}'long'45  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>46  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'47#pragma acc data copyin(I) wait(queues:some_int(), some_long())48  ;49  // CHECK: OpenACCDataConstruct{{.*}}data50  // CHECK-NEXT: copyin clause51  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int'52  // CHECK-NEXT: wait clause has queues tag53  // CHECK-NEXT: <<<NULL>>>54  // CHECK-NEXT: CallExpr{{.*}}'int'55  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>56  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'57  // CHECK-NEXT: CallExpr{{.*}}'long'58  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>59  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'60  // CHECK-NEXT: NullStmt61#pragma acc enter data copyin(I) wait(devnum: some_int() :some_int(), some_long())62  // CHECK: OpenACCEnterDataConstruct{{.*}}enter data63  // CHECK-NEXT: copyin clause64  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int'65  // CHECK-NEXT: wait clause has devnum66  // CHECK-NEXT: CallExpr{{.*}}'int'67  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>68  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'69  // CHECK-NEXT: CallExpr{{.*}}'int'70  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>71  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'72  // CHECK-NEXT: CallExpr{{.*}}'long'73  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>74  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'75#pragma acc exit data copyout(I) wait(devnum: some_int() : queues :some_int(), some_long()) wait(devnum: some_int() : queues :some_int(), some_long())76  // CHECK: OpenACCExitDataConstruct{{.*}}exit data77  // CHECK-NEXT: copyout clause78  // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'int'79  // CHECK-NEXT: wait clause has devnum has queues tag80  // CHECK-NEXT: CallExpr{{.*}}'int'81  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>82  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'83  // CHECK-NEXT: CallExpr{{.*}}'int'84  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>85  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'86  // CHECK-NEXT: CallExpr{{.*}}'long'87  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>88  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'89  // CHECK-NEXT: wait clause has devnum has queues tag90  // CHECK-NEXT: CallExpr{{.*}}'int'91  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>92  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'93  // CHECK-NEXT: CallExpr{{.*}}'int'94  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>95  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'96  // CHECK-NEXT: CallExpr{{.*}}'long'97  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>98  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'99}100 101template<typename U>102void TemplUses(U u) {103  // CHECK: FunctionTemplateDecl104  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 U105  // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (U)'106  // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U'107  // CHECK-NEXT: CompoundStmt108 109  U I;110  // CHECK-NEXT: DeclStmt111  // CHECK-NEXT: VarDecl112 113#pragma acc data copyin(I) wait114  ;115  // CHECK: OpenACCDataConstruct{{.*}}data116  // CHECK-NEXT: copyin clause117  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U'118  // CHECK-NEXT: wait clause119  // CHECK-NEXT: <<<NULL>>>120  // CHECK-NEXT: NullStmt121 122#pragma acc enter data copyin(I) wait123  // CHECK: OpenACCEnterDataConstruct{{.*}}enter data124  // CHECK-NEXT: copyin clause125  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U'126  // CHECK-NEXT: wait clause127  // CHECK-NEXT: <<<NULL>>>128 129#pragma acc exit data copyout(I) wait(U::value, u)130  // CHECK: OpenACCExitDataConstruct{{.*}}exit data131  // CHECK-NEXT: copyout clause132  // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'U'133  // CHECK-NEXT: wait clause134  // CHECK-NEXT: <<<NULL>>>135  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue136  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'137  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'138 139#pragma acc data copyin(I) wait(queues: U::value, u)140  ;141  // CHECK: OpenACCDataConstruct{{.*}}data142  // CHECK-NEXT: copyin clause143  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U'144  // CHECK-NEXT: wait clause has queues tag145  // CHECK-NEXT: <<<NULL>>>146  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue147  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'148  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'149  // CHECK-NEXT: NullStmt150 151#pragma acc enter data copyin(I) wait(devnum:u:queues: U::value, u)152  // CHECK: OpenACCEnterDataConstruct{{.*}}data153  // CHECK-NEXT: copyin clause154  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U'155  // CHECK-NEXT: wait clause has devnum has queues tag156  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'157  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue158  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'159  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'160 161#pragma acc exit data copyout(I) wait(devnum:u: U::value, u)162  // CHECK: OpenACCExitDataConstruct{{.*}}exit data163  // CHECK-NEXT: copyout clause164  // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'U'165  // CHECK-NEXT: wait clause has devnum166  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'167  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue168  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'169  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'170 171  // Check the instantiated versions of the above.172  // CHECK: FunctionDecl{{.*}} used TemplUses 'void (HasInt)' implicit_instantiation173  // CHECK-NEXT: TemplateArgument type 'HasInt'174  // CHECK-NEXT: RecordType{{.*}} 'HasInt'175  // CHECK-NEXT: CXXRecord{{.*}} 'HasInt'176  // CHECK-NEXT: ParmVarDecl{{.*}} used u 'HasInt'177  // CHECK-NEXT: CompoundStmt178 179  // CHECK-NEXT: DeclStmt180  // CHECK-NEXT: VarDecl181 182  // CHECK: OpenACCDataConstruct{{.*}}data183  // CHECK-NEXT: copyin clause184  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt'185  // CHECK-NEXT: wait clause186  // CHECK-NEXT: <<<NULL>>>187  // CHECK-NEXT: NullStmt188 189  // CHECK: OpenACCEnterDataConstruct{{.*}}enter data190  // CHECK-NEXT: copyin clause191  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt'192  // CHECK-NEXT: wait clause193  // CHECK-NEXT: <<<NULL>>>194 195  // CHECK: OpenACCExitDataConstruct{{.*}}exit data196  // CHECK-NEXT: copyout clause197  // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'HasInt'198  // CHECK-NEXT: wait clause199  // CHECK-NEXT: <<<NULL>>>200  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>201  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'202  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'203  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>204  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'205  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char206  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar207 208  // CHECK: OpenACCDataConstruct{{.*}}data209  // CHECK-NEXT: copyin clause210  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt'211  // CHECK-NEXT: wait clause has queues tag212  // CHECK-NEXT: <<<NULL>>>213  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>214  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'215  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'216  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>217  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'218  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char219  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar220  // CHECK-NEXT: NullStmt221 222  // CHECK: OpenACCEnterDataConstruct{{.*}}enter data223  // CHECK-NEXT: copyin clause224  // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt'225  // CHECK-NEXT: wait clause has devnum has queues tag226  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>227  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'228  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char229  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar230  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>231  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'232  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'233  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>234  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'235  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char236  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar237 238  // CHECK: OpenACCExitDataConstruct{{.*}}exit data239  // CHECK-NEXT: copyout clause240  // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'HasInt'241  // CHECK-NEXT: wait clause has devnum242  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>243  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'244  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char245  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar246  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>247  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'248  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'249  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>250  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'251  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char252  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar253}254 255struct HasInt {256  using IntTy = int;257  using ShortTy = short;258  static constexpr int value = 1;259 260  operator char();261};262 263void Inst() {264  TemplUses<HasInt>({});265}266#endif267