xref: /llvm-project/clang/test/OpenMP/default_private_ast_print.cpp (revision 0c6f2f629cc0017361310fa4c132090413a874db)
1 // expected-no-diagnostics
2 
3 //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
4 //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
5 //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
6 //RUN:   -ast-print %s | FileCheck %s --check-prefix=PRINT
7 
8 //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
9 //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
10 //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
11 //RUN:   -ast-dump %s | FileCheck %s --check-prefix=DUMP
12 
13 //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
14 //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
15 //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
16 //RUN:   -emit-pch -o %t %s
17 
18 //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
19 //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
20 //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
21 //RUN:   -include-pch %t -ast-print %s | FileCheck %s --check-prefix=PRINT
22 
23 //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
24 //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
25 //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
26 //RUN:   -include-pch %t -ast-dump-all %s | FileCheck %s --check-prefix=DUMP
27 
28 #ifndef HEADER
29 #define HEADER
30 
31 struct SomeKernel {
32   int targetDev;
33   float devPtr;
34   SomeKernel();
35   ~SomeKernel();
36 
37   template <unsigned int nRHS>
applySomeKernel38   void apply() {
39 #pragma omp parallel default(private)
40     {
41       targetDev++;
42     }
43     // PRINT: #pragma omp parallel default(private)
44     // PRINT-NEXT: {
45     // PRINT-NEXT:  this->targetDev++;
46     // CHECK-NEXT: }
47     // DUMP: -OMPParallelDirective
48     // DUMP->NEXT: -OMPDefaultClause
49   }
50   // PRINT: template<> void apply<32U>()
51   // PRINT: #pragma omp parallel default(private)
52   // PRINT-NEXT: {
53   // PRINT-NEXT:  this->targetDev++;
54   // CHECK-NEXT: }
55   // DUMP: -OMPParallelDirective
56   // DUMP-NEXT: -OMPDefaultClause
57 };
58 
use_template()59 void use_template() {
60   SomeKernel aKern;
61   aKern.apply<32>();
62 }
63 
foo()64 void foo() {
65   int a;
66 #pragma omp parallel default(private)
67   a++;
68   // PRINT: #pragma omp parallel default(private)
69   // PRINT-NEXT: a++;
70   // DUMP: -OMPParallelDirective
71   // DUMP-NEXT:  -OMPDefaultClause
72   // DUMP-NEXT: -OMPPrivateClause {{.*}} <implicit>
73   // DUMP-NEXT:  -DeclRefExpr {{.*}} 'a'
74 }
75 
76 struct St {
77   int a, b;
78   int y;
StSt79   St() : a(0), b(0) {}
~StSt80   ~St() {}
81 };
bar()82 void bar() {
83   St a = St();
84   static int yy = 0;
85 #pragma omp parallel default(private)
86   {
87     a.a += 1;
88     a.b += 1;
89     a.y++;
90     yy++;
91   }
92   // PRINT: #pragma omp parallel default(private)
93   // DUMP: -OMPParallelDirective
94   // DUMP-NEXT: -OMPDefaultClause
95   // DUMP-NEXT: -OMPPrivateClause {{.*}} <implicit>
96   // DUMP-NEXT:  -DeclRefExpr {{.*}} 'a'
97   // DUMP-NEXT:  -DeclRefExpr {{.*}} 'yy'
98 }
99 
100 void zoo(int);
101 struct A {
102   int z;
103   int f;
104   A();
105   ~A();
fooA106   void foo() {
107 #pragma omp parallel private(z) default(private)
108     {
109       z++;
110       f++;
111       zoo(z + f);
112       f++;
113     }
114   }
115   // PRINT:    #pragma omp parallel private(this->z) default(private)
116   // DUMP:     -OMPParallelDirective
117   // DUMP-NEXT:  -OMPPrivateClause
118   // DUMP-NEXT:    -DeclRefExpr {{.*}} 'z'
119   // DUMP-NEXT:  -OMPDefaultClause
120   // DUMP-NEXT:  -OMPPrivateClause
121   // DUMP-NEXT:    -DeclRefExpr {{.*}} 'f'
122   // DUMP:         -CXXThisExpr {{.*}} 'A *' implicit this
barA123   void bar() {
124 #pragma omp parallel private(z) default(private)
125     {
126 #pragma omp parallel private(z) default(private)
127       {
128         z++;
129         f++;
130         zoo(z + f);
131         f++;
132       }
133     }
134   }
135   // PRINT:    #pragma omp parallel private(this->z) default(private)
136   // PRINT:          #pragma omp parallel private(this->z) default(private)
137   // DUMP:     -OMPParallelDirective
138   // DUMP-NEXT:  -OMPPrivateClause
139   // DUMP-NEXT:    -DeclRefExpr {{.*}} 'z'
140   // DUMP-NEXT:  -OMPDefaultClause
141   // DUMP:           -OMPParallelDirective
142   // DUMP-NEXT:        -OMPPrivateClause
143   // DUMP-NEXT:           -DeclRefExpr {{.*}} 'z'
144   // DUMP-NEXT:        -OMPDefaultClause
145   // DUMP-NEXT:        -OMPPrivateClause {{.*}} <implicit>
146   // DUMP-NEXT:           -DeclRefExpr {{.*}} 'f'
147   // DUMP:             -CXXThisExpr
148   // DUMP:         -MemberExpr
149   // DUMP-NEXT:       -CXXThisExpr
150   // DUMP:         -CXXThisExpr
151 };
152 #endif // HEADER
153