xref: /llvm-project/clang/test/OpenMP/default_private_ast_print.cpp (revision 0c6f2f629cc0017361310fa4c132090413a874db)
17aa9c393SJennifer Yu // expected-no-diagnostics
27aa9c393SJennifer Yu 
3*0c6f2f62SAnimesh Kumar //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
47aa9c393SJennifer Yu //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
57aa9c393SJennifer Yu //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
67aa9c393SJennifer Yu //RUN:   -ast-print %s | FileCheck %s --check-prefix=PRINT
77aa9c393SJennifer Yu 
8*0c6f2f62SAnimesh Kumar //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
97aa9c393SJennifer Yu //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
107aa9c393SJennifer Yu //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
117aa9c393SJennifer Yu //RUN:   -ast-dump %s | FileCheck %s --check-prefix=DUMP
127aa9c393SJennifer Yu 
13*0c6f2f62SAnimesh Kumar //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
147aa9c393SJennifer Yu //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
157aa9c393SJennifer Yu //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
167aa9c393SJennifer Yu //RUN:   -emit-pch -o %t %s
177aa9c393SJennifer Yu 
18*0c6f2f62SAnimesh Kumar //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
197aa9c393SJennifer Yu //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
207aa9c393SJennifer Yu //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
217aa9c393SJennifer Yu //RUN:   -include-pch %t -ast-print %s | FileCheck %s --check-prefix=PRINT
227aa9c393SJennifer Yu 
23*0c6f2f62SAnimesh Kumar //RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \
247aa9c393SJennifer Yu //RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \
257aa9c393SJennifer Yu //RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \
267aa9c393SJennifer Yu //RUN:   -include-pch %t -ast-dump-all %s | FileCheck %s --check-prefix=DUMP
277aa9c393SJennifer Yu 
287aa9c393SJennifer Yu #ifndef HEADER
297aa9c393SJennifer Yu #define HEADER
307aa9c393SJennifer Yu 
317aa9c393SJennifer Yu struct SomeKernel {
327aa9c393SJennifer Yu   int targetDev;
337aa9c393SJennifer Yu   float devPtr;
347aa9c393SJennifer Yu   SomeKernel();
357aa9c393SJennifer Yu   ~SomeKernel();
367aa9c393SJennifer Yu 
377aa9c393SJennifer Yu   template <unsigned int nRHS>
applySomeKernel387aa9c393SJennifer Yu   void apply() {
397aa9c393SJennifer Yu #pragma omp parallel default(private)
407aa9c393SJennifer Yu     {
417aa9c393SJennifer Yu       targetDev++;
427aa9c393SJennifer Yu     }
437aa9c393SJennifer Yu     // PRINT: #pragma omp parallel default(private)
447aa9c393SJennifer Yu     // PRINT-NEXT: {
457aa9c393SJennifer Yu     // PRINT-NEXT:  this->targetDev++;
467aa9c393SJennifer Yu     // CHECK-NEXT: }
477aa9c393SJennifer Yu     // DUMP: -OMPParallelDirective
487aa9c393SJennifer Yu     // DUMP->NEXT: -OMPDefaultClause
497aa9c393SJennifer Yu   }
507aa9c393SJennifer Yu   // PRINT: template<> void apply<32U>()
517aa9c393SJennifer Yu   // PRINT: #pragma omp parallel default(private)
527aa9c393SJennifer Yu   // PRINT-NEXT: {
537aa9c393SJennifer Yu   // PRINT-NEXT:  this->targetDev++;
547aa9c393SJennifer Yu   // CHECK-NEXT: }
557aa9c393SJennifer Yu   // DUMP: -OMPParallelDirective
567aa9c393SJennifer Yu   // DUMP-NEXT: -OMPDefaultClause
577aa9c393SJennifer Yu };
587aa9c393SJennifer Yu 
use_template()597aa9c393SJennifer Yu void use_template() {
607aa9c393SJennifer Yu   SomeKernel aKern;
617aa9c393SJennifer Yu   aKern.apply<32>();
627aa9c393SJennifer Yu }
637aa9c393SJennifer Yu 
foo()647aa9c393SJennifer Yu void foo() {
657aa9c393SJennifer Yu   int a;
667aa9c393SJennifer Yu #pragma omp parallel default(private)
677aa9c393SJennifer Yu   a++;
687aa9c393SJennifer Yu   // PRINT: #pragma omp parallel default(private)
697aa9c393SJennifer Yu   // PRINT-NEXT: a++;
707aa9c393SJennifer Yu   // DUMP: -OMPParallelDirective
717aa9c393SJennifer Yu   // DUMP-NEXT:  -OMPDefaultClause
727aa9c393SJennifer Yu   // DUMP-NEXT: -OMPPrivateClause {{.*}} <implicit>
737aa9c393SJennifer Yu   // DUMP-NEXT:  -DeclRefExpr {{.*}} 'a'
747aa9c393SJennifer Yu }
757aa9c393SJennifer Yu 
767aa9c393SJennifer Yu struct St {
777aa9c393SJennifer Yu   int a, b;
787aa9c393SJennifer Yu   int y;
StSt797aa9c393SJennifer Yu   St() : a(0), b(0) {}
~StSt807aa9c393SJennifer Yu   ~St() {}
817aa9c393SJennifer Yu };
bar()827aa9c393SJennifer Yu void bar() {
837aa9c393SJennifer Yu   St a = St();
847aa9c393SJennifer Yu   static int yy = 0;
857aa9c393SJennifer Yu #pragma omp parallel default(private)
867aa9c393SJennifer Yu   {
877aa9c393SJennifer Yu     a.a += 1;
887aa9c393SJennifer Yu     a.b += 1;
897aa9c393SJennifer Yu     a.y++;
907aa9c393SJennifer Yu     yy++;
917aa9c393SJennifer Yu   }
927aa9c393SJennifer Yu   // PRINT: #pragma omp parallel default(private)
937aa9c393SJennifer Yu   // DUMP: -OMPParallelDirective
947aa9c393SJennifer Yu   // DUMP-NEXT: -OMPDefaultClause
957aa9c393SJennifer Yu   // DUMP-NEXT: -OMPPrivateClause {{.*}} <implicit>
967aa9c393SJennifer Yu   // DUMP-NEXT:  -DeclRefExpr {{.*}} 'a'
977aa9c393SJennifer Yu   // DUMP-NEXT:  -DeclRefExpr {{.*}} 'yy'
987aa9c393SJennifer Yu }
99927156a6SJennifer Yu 
100927156a6SJennifer Yu void zoo(int);
101927156a6SJennifer Yu struct A {
102927156a6SJennifer Yu   int z;
103927156a6SJennifer Yu   int f;
104927156a6SJennifer Yu   A();
105927156a6SJennifer Yu   ~A();
fooA106927156a6SJennifer Yu   void foo() {
107927156a6SJennifer Yu #pragma omp parallel private(z) default(private)
108927156a6SJennifer Yu     {
109927156a6SJennifer Yu       z++;
110927156a6SJennifer Yu       f++;
111927156a6SJennifer Yu       zoo(z + f);
112927156a6SJennifer Yu       f++;
113927156a6SJennifer Yu     }
114927156a6SJennifer Yu   }
115927156a6SJennifer Yu   // PRINT:    #pragma omp parallel private(this->z) default(private)
116927156a6SJennifer Yu   // DUMP:     -OMPParallelDirective
117927156a6SJennifer Yu   // DUMP-NEXT:  -OMPPrivateClause
118927156a6SJennifer Yu   // DUMP-NEXT:    -DeclRefExpr {{.*}} 'z'
119927156a6SJennifer Yu   // DUMP-NEXT:  -OMPDefaultClause
120927156a6SJennifer Yu   // DUMP-NEXT:  -OMPPrivateClause
121927156a6SJennifer Yu   // DUMP-NEXT:    -DeclRefExpr {{.*}} 'f'
122927156a6SJennifer Yu   // DUMP:         -CXXThisExpr {{.*}} 'A *' implicit this
barA123927156a6SJennifer Yu   void bar() {
124927156a6SJennifer Yu #pragma omp parallel private(z) default(private)
125927156a6SJennifer Yu     {
126927156a6SJennifer Yu #pragma omp parallel private(z) default(private)
127927156a6SJennifer Yu       {
128927156a6SJennifer Yu         z++;
129927156a6SJennifer Yu         f++;
130927156a6SJennifer Yu         zoo(z + f);
131927156a6SJennifer Yu         f++;
132927156a6SJennifer Yu       }
133927156a6SJennifer Yu     }
134927156a6SJennifer Yu   }
135927156a6SJennifer Yu   // PRINT:    #pragma omp parallel private(this->z) default(private)
136927156a6SJennifer Yu   // PRINT:          #pragma omp parallel private(this->z) default(private)
137927156a6SJennifer Yu   // DUMP:     -OMPParallelDirective
138927156a6SJennifer Yu   // DUMP-NEXT:  -OMPPrivateClause
139927156a6SJennifer Yu   // DUMP-NEXT:    -DeclRefExpr {{.*}} 'z'
140927156a6SJennifer Yu   // DUMP-NEXT:  -OMPDefaultClause
141927156a6SJennifer Yu   // DUMP:           -OMPParallelDirective
142927156a6SJennifer Yu   // DUMP-NEXT:        -OMPPrivateClause
143927156a6SJennifer Yu   // DUMP-NEXT:           -DeclRefExpr {{.*}} 'z'
144927156a6SJennifer Yu   // DUMP-NEXT:        -OMPDefaultClause
145927156a6SJennifer Yu   // DUMP-NEXT:        -OMPPrivateClause {{.*}} <implicit>
146927156a6SJennifer Yu   // DUMP-NEXT:           -DeclRefExpr {{.*}} 'f'
147927156a6SJennifer Yu   // DUMP:             -CXXThisExpr
148927156a6SJennifer Yu   // DUMP:         -MemberExpr
149927156a6SJennifer Yu   // DUMP-NEXT:       -CXXThisExpr
150927156a6SJennifer Yu   // DUMP:         -CXXThisExpr
151927156a6SJennifer Yu };
1527aa9c393SJennifer Yu #endif // HEADER
153