110 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 14 int Var;15 // CHECK-NEXT: DeclStmt16 // CHECK-NEXT: VarDecl17 18 // TODO OpenACC: these constructs require the clauses to be legal, but we19 // don't have the clauses implemented yet. As we implement them, they needed20 // to be added to the 'check' lines.21 22#pragma acc data default(none)23 while (Var);24 // CHECK-NEXT: OpenACCDataConstruct{{.*}}data25 // CHECK-NEXT: default(none)26 // CHECK-NEXT: WhileStmt27 // CHECK: NullStmt28#pragma acc enter data copyin(Var)29 // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data30 // CHECK-NEXT: copyin clause31 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int'32#pragma acc exit data copyout(Var)33 // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data34 // CHECK-NEXT: copyout clause35 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int'36#pragma acc host_data use_device(Var)37 while (Var);38 // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data39 // CHECK-NEXT: use_device clause40 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int'41 // CHECK-NEXT: WhileStmt42 // CHECK: NullStmt43}44 45template<typename T>46void TemplFunc() {47 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc48 // CHECK-NEXT: TemplateTypeParmDecl49 // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc50 // CHECK-NEXT: CompoundStmt51 52 T Var;53 // CHECK-NEXT: DeclStmt54 // CHECK-NEXT: VarDecl55 56#pragma acc data default(none)57 while (Var);58 // CHECK-NEXT: OpenACCDataConstruct{{.*}}data59 // CHECK-NEXT: default(none)60 // CHECK-NEXT: WhileStmt61 // CHECK: NullStmt62#pragma acc enter data copyin(Var)63 // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data64 // CHECK-NEXT: copyin clause65 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T'66#pragma acc exit data copyout(Var)67 // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data68 // CHECK-NEXT: copyout clause69 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T'70#pragma acc host_data use_device(Var)71 while (Var);72 // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data73 // CHECK-NEXT: use_device clause74 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T'75 // CHECK-NEXT: WhileStmt76 // CHECK: NullStmt77 78 // Instantiation:79 // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void ()' implicit_instantiation80 // CHECK-NEXT: TemplateArgument type 'int'81 // CHECK-NEXT: BuiltinType{{.*}} 'int'82 // CHECK-NEXT: CompoundStmt83 84 // CHECK-NEXT: DeclStmt85 // CHECK-NEXT: VarDecl86 87 // CHECK-NEXT: OpenACCDataConstruct{{.*}}data88 // CHECK-NEXT: default(none)89 // CHECK-NEXT: WhileStmt90 // CHECK: NullStmt91 92 // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data93 // CHECK-NEXT: copyin clause94 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int'95 96 // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data97 // CHECK-NEXT: copyout clause98 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int'99 100 // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data101 // CHECK-NEXT: use_device clause102 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int'103 // CHECK-NEXT: WhileStmt104 // CHECK: NullStmt105}106void use() {107 TemplFunc<int>();108}109#endif110