176 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s --check-prefix=CHECK --check-prefix=OMP502// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s3// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s --check-prefix=CHECK --check-prefix=OMP504// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=51 -ast-print %s -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP515// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP516// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP517// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=52 -ast-print %s -DOMP52 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP528// RUN: %clang_cc1 -fopenmp -fopenmp-version=52 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP529// RUN: %clang_cc1 -fopenmp -fopenmp-version=52 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP52 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP5210 11// RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s | FileCheck %s --check-prefix=CHECK --check-prefix=OMP5012// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s13// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s --check-prefix=CHECK --check-prefix=OMP5014// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ast-print %s -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP5115// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP5116// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP51 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP5117// expected-no-diagnostics18// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=52 -ast-print %s -DOMP52 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP5219// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -x c++ -std=c++11 -emit-pch -o %t %s -DOMP5220// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -std=c++11 -include-pch %t -verify %s -ast-print -DOMP52 | FileCheck %s --check-prefix=CHECK --check-prefix=OMP5221// expected-no-diagnostics22 23#ifndef HEADER24#define HEADER25 26void foo() {}27 28struct S {29 S(): a(0) {}30 S(int v) : a(v) {}31 int a;32 typedef int type;33};34 35template <typename T>36class S7 : public T {37protected:38 T a;39 S7() : a(0) {}40 41public:42 S7(typename T::type v) : a(v) {43#pragma omp parallel for private(a) private(this->a) private(T::a)44 for (int k = 0; k < a.a; ++k)45 ++this->a.a;46 }47 S7 &operator=(S7 &s) {48#pragma omp parallel for private(a) private(this->a)49 for (int k = 0; k < s.a.a; ++k)50 ++s.a.a;51 return *this;52 }53};54 55// CHECK: #pragma omp parallel for private(this->a) private(this->a) private(T::a){{$}}56// CHECK: #pragma omp parallel for private(this->a) private(this->a)57// CHECK: #pragma omp parallel for private(this->a) private(this->a) private(this->S::a)58 59class S8 : public S7<S> {60 S8() {}61 62public:63 S8(int v) : S7<S>(v){64#pragma omp parallel for private(a) private(this->a) private(S7<S>::a)65 for (int k = 0; k < a.a; ++k)66 ++this->a.a;67 }68 S8 &operator=(S8 &s) {69#pragma omp parallel for private(a) private(this->a)70 for (int k = 0; k < s.a.a; ++k)71 ++s.a.a;72 return *this;73 }74};75 76// CHECK: #pragma omp parallel for private(this->a) private(this->a) private(this->S7<S>::a)77// CHECK: #pragma omp parallel for private(this->a) private(this->a)78 79template <class T, int N>80T tmain(T argc) {81 T b = argc, c, d, e, f, h;82 static T a;83// CHECK: static T a;84 static T g;85#pragma omp threadprivate(g)86#if defined(OMP51) || defined(OMP52)87#pragma omp parallel for schedule(dynamic) default(none) copyin(g) linear(a) allocate(a) lastprivate(conditional: d, e,f) order(reproducible:concurrent)88#else89#pragma omp parallel for schedule(dynamic) default(none) copyin(g) linear(a) allocate(a) lastprivate(conditional: d, e,f) order(concurrent)90#endif // OMP5191 // OMP50: #pragma omp parallel for schedule(dynamic) default(none) copyin(g) linear(a) allocate(a) lastprivate(conditional: d,e,f) order(concurrent)92 // OMP51: #pragma omp parallel for schedule(dynamic) default(none) copyin(g) linear(a) allocate(a) lastprivate(conditional: d,e,f) order(reproducible: concurrent)93 // OMP52: #pragma omp parallel for schedule(dynamic) default(none) copyin(g) linear(a) allocate(a) lastprivate(conditional: d,e,f) order(reproducible: concurrent)94 for (int i = 0; i < 2; ++i)95 a = 2;96// CHECK-NEXT: for (int i = 0; i < 2; ++i)97// CHECK-NEXT: a = 2;98#pragma omp parallel for allocate(argc) private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) if (parallel :argc) num_threads(N) default(shared) shared(e) reduction(+ : h)99 for (int i = 0; i < 2; ++i)100 for (int j = 0; j < 2; ++j)101 for (int j = 0; j < 2; ++j)102 for (int j = 0; j < 2; ++j)103 for (int j = 0; j < 2; ++j)104 for (int i = 0; i < 2; ++i)105 for (int j = 0; j < 2; ++j)106 for (int j = 0; j < 2; ++j)107 for (int j = 0; j < 2; ++j)108 for (int j = 0; j < 2; ++j)109 foo();110 // CHECK-NEXT: #pragma omp parallel for allocate(argc) private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) if(parallel: argc) num_threads(N) default(shared) shared(e) reduction(+: h)111 // CHECK-NEXT: for (int i = 0; i < 2; ++i)112 // CHECK-NEXT: for (int j = 0; j < 2; ++j)113 // CHECK-NEXT: for (int j = 0; j < 2; ++j)114 // CHECK-NEXT: for (int j = 0; j < 2; ++j)115 // CHECK-NEXT: for (int j = 0; j < 2; ++j)116 // CHECK-NEXT: for (int i = 0; i < 2; ++i)117 // CHECK-NEXT: for (int j = 0; j < 2; ++j)118 // CHECK-NEXT: for (int j = 0; j < 2; ++j)119 // CHECK-NEXT: for (int j = 0; j < 2; ++j)120 // CHECK-NEXT: for (int j = 0; j < 2; ++j)121 // CHECK-NEXT: foo();122 return T();123}124 125int increment () {126 #pragma omp for127 for (int i = 5 ; i != 0; ++i)128 ;129 // CHECK: int increment() {130 // CHECK-NEXT: #pragma omp for131 // CHECK-NEXT: for (int i = 5; i != 0; ++i)132 // CHECK-NEXT: ;133 return 0;134}135 136int decrement_nowait () {137 #pragma omp for nowait138 for (int j = 5 ; j != 0; --j)139 ;140 // CHECK: int decrement_nowait() {141 // CHECK-NEXT: #pragma omp for nowait142 // CHECK-NEXT: for (int j = 5; j != 0; --j)143 // CHECK-NEXT: ;144 return 0;145}146 147 148int main(int argc, char **argv) {149 int b = argc, c, d, e, f, h;150 static int a;151// CHECK: static int a;152 static float g;153#pragma omp threadprivate(g)154#pragma omp parallel for schedule(guided, argc) default(none) copyin(g) linear(a) shared(argc) reduction(task,&:d)155 // CHECK: #pragma omp parallel for schedule(guided, argc) default(none) copyin(g) linear(a) shared(argc) reduction(task, &: d)156 for (int i = 0; i < 2; ++i)157 a = 2;158// CHECK-NEXT: for (int i = 0; i < 2; ++i)159// CHECK-NEXT: a = 2;160#ifdef OMP52161#pragma omp parallel for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered if (argc) num_threads(a) default(shared) shared(e) reduction(+ : h) linear(a: step(-5))162#else163#pragma omp parallel for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered if (argc) num_threads(a) default(shared) shared(e) reduction(+ : h) linear(a:-5)164#endif165 for (int i = 0; i < 10; ++i)166 for (int j = 0; j < 10; ++j)167 foo();168 // CHECK-NEXT: #pragma omp parallel for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) ordered if(argc) num_threads(a) default(shared) shared(e) reduction(+: h) linear(a: step(-5))169 // CHECK-NEXT: for (int i = 0; i < 10; ++i)170 // CHECK-NEXT: for (int j = 0; j < 10; ++j)171 // CHECK-NEXT: foo();172 return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0]));173}174 175#endif176