xref: /llvm-project/clang/test/OpenMP/loop_bind_messages.cpp (revision 8ab62da18d47fa0ce6aef9da50cca34a26ea775c)
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