72 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_HELPER9void NormalFunc() {10 // CHECK-LABEL: NormalFunc11 // CHECK-NEXT: CompoundStmt12 // CHECK-NEXT: OpenACCDataConstruct {{.*}}data13 // CHECK-NEXT: default(none)14#pragma acc data default(none)15 // CHECK: OpenACCDataConstruct {{.*}}data16 // CHECK-NEXT: default(present)17#pragma acc data default(present)18 // CHECK-NEXT: OpenACCDataConstruct {{.*}}data19 // CHECK-NEXT: default(present)20_Pragma("acc data default(present)")21 ;22}23template<typename T>24void TemplFunc() {25#pragma acc data default(none)26 for (unsigned i = 0; i < 5; ++i) {27 typename T::type I;28 }29 30#pragma acc data default(present)31 for (unsigned i = 0; i < 5; ++i) {32 typename T::type I;33 }34 35 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc36 // CHECK-NEXT: TemplateTypeParmDecl37 38 // Template Pattern:39 // CHECK-NEXT: FunctionDecl40 // CHECK-NEXT: CompoundStmt41 // CHECK-NEXT: OpenACCDataConstruct {{.*}}data42 // CHECK-NEXT: default(none)43 // CHECK: VarDecl{{.*}} I 'typename T::type'44 45 // CHECK-NEXT: OpenACCDataConstruct {{.*}}data46 // CHECK-NEXT: default(present)47 // CHECK: VarDecl{{.*}} I 'typename T::type'48 49 // Check instantiation.50 // CHECK-LABEL: FunctionDecl{{.*}} used TemplFunc 'void ()' implicit_instantiation51 // CHECK-NEXT: TemplateArgument type 'S'52 // CHECK-NEXT: RecordType53 // CHECK-NEXT: CXXRecord54 // CHECK-NEXT: CompoundStmt55 // CHECK-NEXT: OpenACCDataConstruct {{.*}}data56 // CHECK-NEXT: default(none)57 // CHECK: VarDecl{{.*}} I 'typename S::type':'int'58 // CHECK-NEXT: OpenACCDataConstruct {{.*}}data59 // CHECK-NEXT: default(present)60 // CHECK: VarDecl{{.*}} I 'typename S::type':'int'61 62}63struct S {64 using type = int;65};66 67void use() {68 TemplFunc<S>();69}70 71#endif72