1 #ifndef HEADER 2 #define HEADER 3 // RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -verify %s 4 5 #define NNN 50 6 int aaa[NNN]; 7 8 void parallel_loop() { 9 #pragma omp parallel 10 { 11 #pragma omp loop 12 for (int j = 0 ; j < NNN ; j++) { 13 aaa[j] = j*NNN; 14 } 15 } 16 } 17 18 void teams_loop() { 19 int var1, var2; 20 21 #pragma omp teams 22 { 23 #pragma omp loop bind(teams) 24 for (int j = 0 ; j < NNN ; j++) { 25 aaa[j] = j*NNN; 26 } 27 28 #pragma omp loop bind(teams) collapse(2) private(var1) 29 for (int i = 0 ; i < 3 ; i++) { 30 for (int j = 0 ; j < NNN ; j++) { 31 var1 += aaa[j]; 32 } 33 } 34 } 35 } 36 37 void orphan_loop_with_bind() { 38 #pragma omp loop bind(parallel) 39 for (int j = 0 ; j < NNN ; j++) { 40 aaa[j] = j*NNN; 41 } 42 } 43 44 void orphan_loop_no_bind() { 45 #pragma omp loop // expected-error{{expected 'bind' clause for 'loop' construct without an enclosing OpenMP construct}} 46 for (int j = 0 ; j < NNN ; j++) { 47 aaa[j] = j*NNN; 48 } 49 } 50 51 void teams_loop_reduction() { 52 int total = 0; 53 54 #pragma omp teams 55 { 56 #pragma omp loop bind(teams) 57 for (int j = 0 ; j < NNN ; j++) { 58 aaa[j] = j*NNN; 59 } 60 61 #pragma omp loop bind(teams) reduction(+:total) // expected-error{{'reduction' clause not allowed with '#pragma omp loop bind(teams)'}} 62 for (int j = 0 ; j < NNN ; j++) { 63 total+=aaa[j]; 64 } 65 } 66 } 67 68 int main(int argc, char *argv[]) { 69 parallel_loop(); 70 teams_loop(); 71 orphan_loop_with_bind(); 72 orphan_loop_no_bind(); 73 teams_loop_reduction(); 74 } 75 76 #endif 77