xref: /llvm-project/openmp/runtime/test/tasking/task_reduction2.c (revision 4457565757ea91207b7e5f2ce7b7bf173bfd2c0c)
1 // RUN: %libomp-compile-and-run
2 //
3 // XFAIL: icc
4 // UNSUPPORTED: clang-4, clang-5, clang-6, clang-7, clang-8, clang-9, clang-10
5 // UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7, gcc-8
6 
7 #include <stdio.h>
8 #include <stdlib.h>
9 
10 int a = 0, b = 1;
11 
main(int argc,char ** argv)12 int main(int argc, char **argv) {
13 
14   #pragma omp parallel
15   {
16     int i;
17     #pragma omp for reduction(task, +: a) reduction(task, *: b)
18     for (i = 1; i <= 5; ++i) {
19       #pragma omp task in_reduction(+: a) in_reduction(*: b)
20       {
21         a += i;
22         b *= i;
23       }
24     }
25   }
26 
27   if (a != 15) {
28     fprintf(stderr, "error: a != 15. Instead a = %d\n", a);
29     exit(EXIT_FAILURE);
30   }
31   if (b != 120) {
32     fprintf(stderr, "error: b != 120. Instead b = %d\n", b);
33     exit(EXIT_FAILURE);
34   }
35 
36   return EXIT_SUCCESS;
37 }
38