144 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 10void NormalFunc() {11 // CHECK-LABEL: NormalFunc12 // CHECK-NEXT: CompoundStmt13 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel14 // CHECK-NEXT: default(none)15 // CHECK-NEXT: CompoundStmt16#pragma acc parallel default(none)17 {18#pragma acc parallel19 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel20 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel21 // CHECK-NEXT: default(present)22 // CHECK-NEXT: CompoundStmt23#pragma acc parallel default(present)24 {}25 }26 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial27 // CHECK-NEXT: CompoundStmt28#pragma acc serial29 {30#pragma acc serial31 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial32 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial33 // CHECK-NEXT: CompoundStmt34#pragma acc serial35 {}36 }37 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels38 // CHECK-NEXT: CompoundStmt39#pragma acc kernels40 {41#pragma acc kernels42 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels43 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels44 // CHECK-NEXT: CompoundStmt45#pragma acc kernels46 {}47 }48 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels49 // CHECK-NEXT: CompoundStmt50 _Pragma("acc kernels")51 {}52}53 54template<typename T>55void TemplFunc() {56#pragma acc parallel default(none)57 {58 typename T::type I;59 }60 61#pragma acc serial default(present)62 {63 typename T::type I;64 }65 66#pragma acc kernels67 {68 typename T::type I;69 }70 71 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc72 // CHECK-NEXT: TemplateTypeParmDecl73 74 // Template Pattern:75 // CHECK-NEXT: FunctionDecl76 // CHECK-NEXT: CompoundStmt77 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel78 // CHECK-NEXT: default(none)79 // CHECK-NEXT: CompoundStmt80 // CHECK-NEXT: DeclStmt81 // CHECK-NEXT: VarDecl{{.*}} I 'typename T::type'82 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial83 // CHECK-NEXT: default(present)84 // CHECK-NEXT: CompoundStmt85 // CHECK-NEXT: DeclStmt86 // CHECK-NEXT: VarDecl{{.*}} I 'typename T::type'87 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels88 // CHECK-NEXT: CompoundStmt89 // CHECK-NEXT: DeclStmt90 // CHECK-NEXT: VarDecl{{.*}} I 'typename T::type'91 92 // Check instantiation.93 // CHECK-LABEL: FunctionDecl{{.*}} used TemplFunc 'void ()' implicit_instantiation94 // CHECK-NEXT: TemplateArgument type 'S'95 // CHECK-NEXT: RecordType96 // CHECK-NEXT: CXXRecord97 // CHECK-NEXT: CompoundStmt98 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel99 // CHECK-NEXT: default(none)100 // CHECK-NEXT: CompoundStmt101 // CHECK-NEXT: DeclStmt102 // CHECK-NEXT: VarDecl{{.*}} I 'typename S::type':'int'103 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial104 // CHECK-NEXT: default(present)105 // CHECK-NEXT: CompoundStmt106 // CHECK-NEXT: DeclStmt107 // CHECK-NEXT: VarDecl{{.*}} I 'typename S::type':'int'108 // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels109 // CHECK-NEXT: CompoundStmt110 // CHECK-NEXT: DeclStmt111 // CHECK-NEXT: VarDecl{{.*}} I 'typename S::type':'int'112}113 114struct S {115 using type = int;116};117 118void use() {119 TemplFunc<S>();120}121 122struct HasCtor { HasCtor(); operator int(); ~HasCtor();};123 124void useCtorType() {125 // CHECK-LABEL: useCtorType126 // CHECK-NEXT: CompoundStmt127 128#pragma acc kernels num_workers(HasCtor{})129 // CHECK-NEXT: OpenACCComputeConstruct{{.*}} kernels130 // CHECK-NEXT: num_workers clause131 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>132 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'133 // CHECK-NEXT: MemberExpr{{.*}}.operator int134 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}}'HasCtor'135 // CHECK-NEXT: CXXBindTemporaryExpr{{.*}}'HasCtor'136 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'HasCtor'137 138 while(true);139 // CHECK-NEXT: WhileStmt140 // CHECK-NEXT: CXXBoolLiteralExpr141 // CHECK-NEXT: NullStmt142}143#endif144