// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s // Test this with PCH. // RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s // RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s #ifndef PCH_HELPER #define PCH_HELPER void NormalFunc() { // CHECK-LABEL: NormalFunc // CHECK-NEXT: CompoundStmt // CHECK-NEXT: OpenACCDataConstruct {{.*}}data // CHECK-NEXT: default(none) #pragma acc data default(none) // CHECK: OpenACCDataConstruct {{.*}}data // CHECK-NEXT: default(present) #pragma acc data default(present) // CHECK-NEXT: OpenACCDataConstruct {{.*}}data // CHECK-NEXT: default(present) _Pragma("acc data default(present)") ; } template void TemplFunc() { #pragma acc data default(none) for (unsigned i = 0; i < 5; ++i) { typename T::type I; } #pragma acc data default(present) for (unsigned i = 0; i < 5; ++i) { typename T::type I; } // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc // CHECK-NEXT: TemplateTypeParmDecl // Template Pattern: // CHECK-NEXT: FunctionDecl // CHECK-NEXT: CompoundStmt // CHECK-NEXT: OpenACCDataConstruct {{.*}}data // CHECK-NEXT: default(none) // CHECK: VarDecl{{.*}} I 'typename T::type' // CHECK-NEXT: OpenACCDataConstruct {{.*}}data // CHECK-NEXT: default(present) // CHECK: VarDecl{{.*}} I 'typename T::type' // Check instantiation. // CHECK-LABEL: FunctionDecl{{.*}} used TemplFunc 'void ()' implicit_instantiation // CHECK-NEXT: TemplateArgument type 'S' // CHECK-NEXT: RecordType // CHECK-NEXT: CXXRecord // CHECK-NEXT: CompoundStmt // CHECK-NEXT: OpenACCDataConstruct {{.*}}data // CHECK-NEXT: default(none) // CHECK: VarDecl{{.*}} I 'typename S::type':'int' // CHECK-NEXT: OpenACCDataConstruct {{.*}}data // CHECK-NEXT: default(present) // CHECK: VarDecl{{.*}} I 'typename S::type':'int' } struct S { using type = int; }; void use() { TemplFunc(); } #endif