99 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 set default_async(some_int()) device_num(some_long()) device_type(acc_device_nvidia) if (some_int() < some_long())17 // CHECK-NEXT: OpenACCSetConstruct{{.*}}set18 // CHECK-NEXT: default_async clause19 // CHECK-NEXT: CallExpr{{.*}}'int'20 // CHECK-NEXT: ImplicitCastExpr21 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'22 // CHECK-NEXT: device_num clause23 // CHECK-NEXT: CallExpr{{.*}} 'long'24 // CHECK-NEXT: ImplicitCastExpr25 // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'26 // CHECK-NEXT: device_type(acc_device_nvidia)27 // CHECK-NEXT: if clause28 // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'29 // CHECK-NEXT: ImplicitCastExpr{{.*}}'long'30 // CHECK-NEXT: CallExpr{{.*}}'int'31 // CHECK-NEXT: ImplicitCastExpr32 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'33 // CHECK-NEXT: CallExpr{{.*}} 'long'34 // CHECK-NEXT: ImplicitCastExpr35 // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'36}37 38template<typename T>39void TemplFunc(T t) {40 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc41 // CHECK-NEXT: TemplateTypeParmDecl42 // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc43 // CHECK-NEXT: ParmVarDecl{{.*}} t 'T'44 // CHECK-NEXT: CompoundStmt45 46#pragma acc set default_async(T::value) device_num(t) device_type(multicore) if (T::value < t)47 // CHECK-NEXT: OpenACCSetConstruct{{.*}}set48 // CHECK-NEXT: default_async clause49 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'50 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'51 // CHECK-NEXT: device_num clause52 // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'T'53 // CHECK-NEXT: device_type(multicore)54 // CHECK-NEXT: if clause55 // CHECK-NEXT: BinaryOperator{{.*}}'<dependent type>' '<'56 // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'57 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'58 // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'T'59 60 // Instantiation:61 // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void (SomeStruct)' implicit_instantiation62 // CHECK-NEXT: TemplateArgument type 'SomeStruct'63 // CHECK-NEXT: RecordType{{.*}} 'SomeStruct'64 // CHECK-NEXT: CXXRecord{{.*}} 'SomeStruct'65 // CHECK-NEXT: ParmVarDecl{{.*}} t 'SomeStruct'66 // CHECK-NEXT: CompoundStmt67 68 // CHECK-NEXT: OpenACCSetConstruct{{.*}}set69 // CHECK-NEXT: default_async clause70 // CHECK-NEXT: ImplicitCastExpr {{.*}}'unsigned int'71 // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'72 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'73 // CHECK-NEXT: device_num clause74 // CHECK-NEXT: ImplicitCastExpr {{.*}}'unsigned int'75 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'76 // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int77 // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'78 // CHECK-NEXT: device_type(multicore)79 // CHECK-NEXT: if clause80 // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'81 // CHECK-NEXT: ImplicitCastExpr {{.*}}'unsigned int'82 // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'83 // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'84 // CHECK-NEXT: ImplicitCastExpr {{.*}}'unsigned int'85 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'86 // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int87 // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'88}89 90struct SomeStruct{91 static constexpr unsigned value = 5;92 operator unsigned();93};94 95void use() {96 TemplFunc(SomeStruct{});97}98#endif99