76 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: OpenACCCombinedConstruct {{.*}}parallel loop13 // CHECK-NEXT: default(none)14#pragma acc parallel loop default(none)15 for (unsigned I = 0; I < 5; ++I) {16#pragma acc kernels loop17 for (unsigned J = 0; J < 5; ++J) {18 }19 // CHECK: OpenACCCombinedConstruct {{.*}}kernels loop20 // CHECK: OpenACCCombinedConstruct {{.*}}serial loop21 // CHECK-NEXT: default(present)22#pragma acc serial loop default(present)23 for (unsigned J = 0; J < 5; ++J) {24 }25 }26}27template<typename T>28void TemplFunc() {29#pragma acc parallel loop default(none)30 for (unsigned i = 0; i < 5; ++i) {31 typename T::type I;32 }33 34#pragma acc serial loop default(present)35 for (unsigned i = 0; i < 5; ++i) {36 typename T::type I;37 }38 39 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc40 // CHECK-NEXT: TemplateTypeParmDecl41 42 // Template Pattern:43 // CHECK-NEXT: FunctionDecl44 // CHECK-NEXT: CompoundStmt45 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}parallel loop46 // CHECK-NEXT: default(none)47 // CHECK: VarDecl{{.*}} I 'typename T::type'48 49 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}serial loop50 // CHECK-NEXT: default(present)51 // CHECK: VarDecl{{.*}} I 'typename T::type'52 53 // Check instantiation.54 // CHECK-LABEL: FunctionDecl{{.*}} used TemplFunc 'void ()' implicit_instantiation55 // CHECK-NEXT: TemplateArgument type 'S'56 // CHECK-NEXT: RecordType57 // CHECK-NEXT: CXXRecord58 // CHECK-NEXT: CompoundStmt59 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}parallel loop60 // CHECK-NEXT: default(none)61 // CHECK: VarDecl{{.*}} I 'typename S::type':'int'62 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}serial loop63 // CHECK-NEXT: default(present)64 // CHECK: VarDecl{{.*}} I 'typename S::type':'int'65 66}67struct S {68 using type = int;69};70 71void use() {72 TemplFunc<S>();73}74 75#endif76