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 Yuvoid use_template() { 607aa9c393SJennifer Yu SomeKernel aKern; 617aa9c393SJennifer Yu aKern.apply<32>(); 627aa9c393SJennifer Yu } 637aa9c393SJennifer Yu foo()647aa9c393SJennifer Yuvoid 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 Yuvoid 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