1 // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s 2 3 // Test this with PCH. 4 // RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s 5 // RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s 6 7 #ifndef PCH_HELPER 8 #define PCH_HELPER 9 10 void NormalFunc() { 11 // CHECK-LABEL: NormalFunc 12 // CHECK-NEXT: CompoundStmt 13 14 int Var; 15 // CHECK-NEXT: DeclStmt 16 // CHECK-NEXT: VarDecl 17 18 // TODO OpenACC: these constructs require the clauses to be legal, but we 19 // don't have the clauses implemented yet. As we implement them, they needed 20 // to be added to the 'check' lines. 21 22 #pragma acc data default(none) 23 while (Var); 24 // CHECK-NEXT: OpenACCDataConstruct{{.*}}data 25 // CHECK-NEXT: default(none) 26 // CHECK-NEXT: WhileStmt 27 // CHECK: NullStmt 28 #pragma acc enter data copyin(Var) 29 // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data 30 // CHECK-NEXT: copyin clause 31 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' 32 #pragma acc exit data copyout(Var) 33 // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data 34 // CHECK-NEXT: copyout clause 35 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' 36 #pragma acc host_data use_device(Var) 37 while (Var); 38 // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data 39 // CHECK-NEXT: use_device clause 40 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' 41 // CHECK-NEXT: WhileStmt 42 // CHECK: NullStmt 43 } 44 45 template<typename T> 46 void TemplFunc() { 47 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc 48 // CHECK-NEXT: TemplateTypeParmDecl 49 // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc 50 // CHECK-NEXT: CompoundStmt 51 52 T Var; 53 // CHECK-NEXT: DeclStmt 54 // CHECK-NEXT: VarDecl 55 56 #pragma acc data default(none) 57 while (Var); 58 // CHECK-NEXT: OpenACCDataConstruct{{.*}}data 59 // CHECK-NEXT: default(none) 60 // CHECK-NEXT: WhileStmt 61 // CHECK: NullStmt 62 #pragma acc enter data copyin(Var) 63 // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data 64 // CHECK-NEXT: copyin clause 65 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' 66 #pragma acc exit data copyout(Var) 67 // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data 68 // CHECK-NEXT: copyout clause 69 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' 70 #pragma acc host_data use_device(Var) 71 while (Var); 72 // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data 73 // CHECK-NEXT: use_device clause 74 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' 75 // CHECK-NEXT: WhileStmt 76 // CHECK: NullStmt 77 78 // Instantiation: 79 // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void ()' implicit_instantiation 80 // CHECK-NEXT: TemplateArgument type 'int' 81 // CHECK-NEXT: BuiltinType{{.*}} 'int' 82 // CHECK-NEXT: CompoundStmt 83 84 // CHECK-NEXT: DeclStmt 85 // CHECK-NEXT: VarDecl 86 87 // CHECK-NEXT: OpenACCDataConstruct{{.*}}data 88 // CHECK-NEXT: default(none) 89 // CHECK-NEXT: WhileStmt 90 // CHECK: NullStmt 91 92 // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data 93 // CHECK-NEXT: copyin clause 94 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' 95 96 // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data 97 // CHECK-NEXT: copyout clause 98 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' 99 100 // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data 101 // CHECK-NEXT: use_device clause 102 // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' 103 // CHECK-NEXT: WhileStmt 104 // CHECK: NullStmt 105 } 106 void use() { 107 TemplFunc<int>(); 108 } 109 #endif 110