brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.7 KiB · 795c5a2 Raw
226 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 NormalFunc() {14  // CHECK-LABEL: NormalFunc15  // CHECK-NEXT: CompoundStmt16 17#pragma acc wait async(some_int())18  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait19  // CHECK-NEXT: <<<NULL>>20  // CHECK-NEXT: async clause21  // CHECK-NEXT: CallExpr{{.*}}'int'22  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>23  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'24#pragma acc wait async25  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait26  // CHECK-NEXT: <<<NULL>>27  // CHECK-NEXT: async clause28#pragma acc wait(some_int(), some_long()) if (some_int() < some_long())29  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait30  // CHECK-NEXT: <<<NULL>>31  // CHECK-NEXT: CallExpr{{.*}}'int'32  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>33  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'34  // CHECK-NEXT: CallExpr{{.*}}'long'35  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>36  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long'37  // CHECK-NEXT: if clause38  // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'39  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'long'40  // CHECK-NEXT: CallExpr{{.*}}'int'41  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>42  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'43  // CHECK-NEXT: CallExpr{{.*}}'long'44  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>45  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long'46#pragma acc wait(queues:some_int(), some_long())47  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait48  // CHECK-NEXT: <<<NULL>>49  // CHECK-NEXT: CallExpr{{.*}}'int'50  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>51  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'52  // CHECK-NEXT: CallExpr{{.*}}'long'53  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>54  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long'55#pragma acc wait(devnum:some_int() : queues:some_int(), some_long())56  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait57  // CHECK-NEXT: CallExpr{{.*}}'int'58  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>59  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'60  // CHECK-NEXT: CallExpr{{.*}}'int'61  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>62  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'63  // CHECK-NEXT: CallExpr{{.*}}'long'64  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>65  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long'66#pragma acc wait(devnum:some_int() : some_int(), some_long())67  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait68  // CHECK-NEXT: CallExpr{{.*}}'int'69  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>70  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'71  // CHECK-NEXT: CallExpr{{.*}}'int'72  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>73  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'74  // CHECK-NEXT: CallExpr{{.*}}'long'75  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>76  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long'77}78 79template<typename T>80void TemplFunc(T t) {81  // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc82  // CHECK-NEXT: TemplateTypeParmDecl83  // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc84  // CHECK-NEXT: ParmVarDecl{{.*}} t 'T'85  // CHECK-NEXT: CompoundStmt86 87#pragma acc wait async(T::value)88  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait89  // CHECK-NEXT: <<<NULL>>90  // CHECK-NEXT: async clause91  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'92  // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'93#pragma acc wait async94  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait95  // CHECK-NEXT: <<<NULL>>96  // CHECK-NEXT: async clause97#pragma acc wait(t, T::value) if (T::value > t)98  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait99  // CHECK-NEXT: <<<NULL>>100  // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue ParmVar{{.*}} 't' 'T'101  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'102  // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'103  // CHECK-NEXT: if clause104  // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '>'105  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'106  // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'107  // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue ParmVar{{.*}} 't' 'T'108#pragma acc wait(queues:typename T::IntTy{}, T::value) if (typename T::IntTy{} < typename T::ShortTy{})109  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait110  // CHECK-NEXT: <<<NULL>>111  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'typename T::IntTy' list112  // CHECK-NEXT: InitListExpr113  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'114  // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'115  // CHECK-NEXT: if clause116  // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '<'117  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'typename T::IntTy' list118  // CHECK-NEXT: InitListExpr119  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'typename T::ShortTy' list120  // CHECK-NEXT: InitListExpr121#pragma acc wait(devnum:typename T::ShortTy{} : queues:some_int(), T::value)122  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait123  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'typename T::ShortTy' list124  // CHECK-NEXT: InitListExpr125  // CHECK-NEXT: CallExpr{{.*}}'int'126  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>127  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'128  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'129  // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'130#pragma acc wait(devnum:typename T::ShortTy{} : T::value, some_long())131  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait132  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'typename T::ShortTy' list133  // CHECK-NEXT: InitListExpr134  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'135  // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'136  // CHECK-NEXT: CallExpr{{.*}}'long'137  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>138  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long'139 140  // Instantiation:141  // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void (HasInt)' implicit_instantiation142  // CHECK-NEXT: TemplateArgument type 'HasInt'143  // CHECK-NEXT: RecordType{{.*}} 'HasInt'144  // CHECK-NEXT: CXXRecord{{.*}} 'HasInt'145  // CHECK-NEXT: ParmVarDecl{{.*}} t 'HasInt'146  // CHECK-NEXT: CompoundStmt147 148  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait149  // CHECK-NEXT: <<<NULL>>150  // CHECK-NEXT: async clause151  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int'152  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const int'153  // CHECK-NEXT: NestedNameSpecifier {{.*}}'HasInt'154  //155  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait156  // CHECK-NEXT: <<<NULL>>157  // CHECK-NEXT: async clause158  //159  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait160  // CHECK-NEXT: <<<NULL>>161  // CHECK-NEXT: ImplicitCastExpr{{.*}}'char' <UserDefinedConversion>162  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'163  // CHECK-NEXT: MemberExpr{{.*}}.operator char164  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar{{.*}} 't' 'HasInt'165  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int'166  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const int'167  // CHECK-NEXT: NestedNameSpecifier {{.*}}'HasInt'168  // CHECK-NEXT: if clause169  // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '>'170  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int'171  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const int'172  // CHECK-NEXT: NestedNameSpecifier {{.*}}'HasInt'173  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <IntegralCast>174  // CHECK-NEXT: ImplicitCastExpr{{.*}}'char' <UserDefinedConversion>175  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'176  // CHECK-NEXT: MemberExpr{{.*}}.operator char177  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar{{.*}} 't' 'HasInt'178  //179  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait180  // CHECK-NEXT: <<<NULL>>181  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename HasInt::IntTy':'int'182  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::IntTy':'int'183  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int'184  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const int'185  // CHECK-NEXT: NestedNameSpecifier {{.*}}'HasInt'186  // CHECK-NEXT: if clause187  // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'188  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename HasInt::IntTy':'int'189  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::IntTy':'int'190  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int'191  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename HasInt::ShortTy':'short'192  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::ShortTy':'short'193  //194  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait195  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename HasInt::ShortTy':'short'196  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::ShortTy':'short'197  // CHECK-NEXT: CallExpr{{.*}}'int'198  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>199  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int'200  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int'201  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const int'202  // CHECK-NEXT: NestedNameSpecifier {{.*}}'HasInt'203  //204  // CHECK-NEXT: OpenACCWaitConstruct{{.*}}wait205  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename HasInt::ShortTy':'short'206  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::ShortTy':'short'207  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int'208  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const int'209  // CHECK-NEXT: NestedNameSpecifier {{.*}}'HasInt'210  // CHECK-NEXT: CallExpr{{.*}}'long'211  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>212  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long'213}214 215struct HasInt {216  using IntTy = int;217  using ShortTy = short;218  static constexpr int value = 1;219 220  operator char();221};222void use() {223  TemplFunc(HasInt{});224}225#endif226