151 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();12void NormalFunc() {13 // CHECK-LABEL: NormalFunc14 // CHECK-NEXT: CompoundStmt15 16#pragma acc shutdown17 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown18_Pragma("acc shutdown")19 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown20#pragma acc shutdown if (some_int() < some_long())21 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown22 // CHECK-NEXT: if clause23 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'24 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'long'25 // CHECK-NEXT: CallExpr26 // CHECK-NEXT: ImplicitCastExpr27 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'28 // CHECK-NEXT: CallExpr29 // CHECK-NEXT: ImplicitCastExpr30 // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'31#pragma acc shutdown device_num(some_int())32 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown33 // CHECK-NEXT: device_num clause34 // CHECK-NEXT: CallExpr35 // CHECK-NEXT: ImplicitCastExpr36 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'37#pragma acc shutdown device_type(multicore)38 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown39 // CHECK-NEXT: device_type(multicore)40#pragma acc shutdown if (some_int() < some_long()) device_type(host) device_num(some_int())41 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown42 // CHECK-NEXT: if clause43 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'44 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'long'45 // CHECK-NEXT: CallExpr46 // CHECK-NEXT: ImplicitCastExpr47 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'48 // CHECK-NEXT: CallExpr49 // CHECK-NEXT: ImplicitCastExpr50 // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'51 // CHECK-NEXT: device_type(host)52 // CHECK-NEXT: device_num clause53 // CHECK-NEXT: CallExpr54 // CHECK-NEXT: ImplicitCastExpr55 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'56}57 58template<typename T>59void TemplFunc(T t) {60 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc61 // CHECK-NEXT: TemplateTypeParmDecl62 // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc63 // CHECK-NEXT: ParmVarDecl{{.*}} t 'T'64 // CHECK-NEXT: CompoundStmt65 66#pragma acc shutdown67 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown68#pragma acc shutdown if (T::value > t)69 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown70 // CHECK-NEXT: if clause71 // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '>'72 // CHECK-NEXT: DependentScopeDeclRefExpr73 // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'74 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'75#pragma acc shutdown device_num(t)76 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown77 // CHECK-NEXT: device_num clause78 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'79#pragma acc shutdown device_type(radeon)80 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown81 // CHECK-NEXT: device_type(radeon)82#pragma acc shutdown if (T::value > t) device_type(acc_device_nvidia) device_num(t)83 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown84 // CHECK-NEXT: if clause85 // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '>'86 // CHECK-NEXT: DependentScopeDeclRefExpr87 // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'88 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'89 // CHECK-NEXT: device_type(acc_device_nvidia)90 // CHECK-NEXT: device_num clause91 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'92 93 // Instantiation:94 // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void (SomeStruct)' implicit_instantiation95 // CHECK-NEXT: TemplateArgument type 'SomeStruct'96 // CHECK-NEXT: RecordType{{.*}} 'SomeStruct'97 // CHECK-NEXT: CXXRecord{{.*}} 'SomeStruct'98 // CHECK-NEXT: ParmVarDecl{{.*}} t 'SomeStruct'99 // CHECK-NEXT: CompoundStmt100 101 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown102 103 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown104 // CHECK-NEXT: if clause105 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '>'106 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'107 // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'108 // CHECK-NEXT: NestedNameSpecifier{{.*}} 'SomeStruct'109 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'110 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'unsigned int'111 // CHECK-NEXT: MemberExpr{{.*}} .operator unsigned int112 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'113 114 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown115 // CHECK-NEXT: device_num clause116 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'117 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'118 // CHECK-NEXT: MemberExpr{{.*}} .operator unsigned int119 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'120 121 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown122 // CHECK-NEXT: device_type(radeon)123 124 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown125 // CHECK-NEXT: if clause126 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '>'127 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'128 // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'129 // CHECK-NEXT: NestedNameSpecifier{{.*}} 'SomeStruct'130 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'131 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'unsigned int'132 // CHECK-NEXT: MemberExpr{{.*}} .operator unsigned int133 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'134 // CHECK-NEXT: device_type(acc_device_nvidia)135 // CHECK-NEXT: device_num clause136 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'137 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'138 // CHECK-NEXT: MemberExpr{{.*}} .operator unsigned int139 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'140}141 142struct SomeStruct{143 static constexpr unsigned value = 5;144 operator unsigned();145};146 147void use() {148 TemplFunc(SomeStruct{});149}150#endif151