[flang][OpenMP] 'no_openmp_constructs' added to clang broke flang build (#126145)
[llvm-project.git] / clang / test / SemaOpenACC / combined-construct-default-ast.cpp
blob8f09e749073183311c3685e0b38764eea60e1591
1 // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
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
7 #ifndef PCH_HELPER
8 #define PCH_HELPER
9 void NormalFunc() {
10 // CHECK-LABEL: NormalFunc
11 // CHECK-NEXT: CompoundStmt
12 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}parallel loop
13 // CHECK-NEXT: default(none)
14 #pragma acc parallel loop default(none)
15 for (unsigned I = 0; I < 5; ++I) {
16 #pragma acc kernels loop
17 for (unsigned J = 0; J < 5; ++J) {
19 // CHECK: OpenACCCombinedConstruct {{.*}}kernels loop
20 // CHECK: OpenACCCombinedConstruct {{.*}}serial loop
21 // CHECK-NEXT: default(present)
22 #pragma acc serial loop default(present)
23 for (unsigned J = 0; J < 5; ++J) {
27 template<typename T>
28 void TemplFunc() {
29 #pragma acc parallel loop default(none)
30 for (unsigned i = 0; i < 5; ++i) {
31 typename T::type I;
34 #pragma acc serial loop default(present)
35 for (unsigned i = 0; i < 5; ++i) {
36 typename T::type I;
39 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc
40 // CHECK-NEXT: TemplateTypeParmDecl
42 // Template Pattern:
43 // CHECK-NEXT: FunctionDecl
44 // CHECK-NEXT: CompoundStmt
45 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}parallel loop
46 // CHECK-NEXT: default(none)
47 // CHECK: VarDecl{{.*}} I 'typename T::type'
49 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}serial loop
50 // CHECK-NEXT: default(present)
51 // CHECK: VarDecl{{.*}} I 'typename T::type'
53 // Check instantiation.
54 // CHECK-LABEL: FunctionDecl{{.*}} used TemplFunc 'void ()' implicit_instantiation
55 // CHECK-NEXT: TemplateArgument type 'S'
56 // CHECK-NEXT: RecordType
57 // CHECK-NEXT: CXXRecord
58 // CHECK-NEXT: CompoundStmt
59 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}parallel loop
60 // CHECK-NEXT: default(none)
61 // CHECK: VarDecl{{.*}} I 'typename S::type':'int'
62 // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}serial loop
63 // CHECK-NEXT: default(present)
64 // CHECK: VarDecl{{.*}} I 'typename S::type':'int'
67 struct S {
68 using type = int;
71 void use() {
72 TemplFunc<S>();
75 #endif