1 // RUN: %libomp-compile-and-run 2 3 // UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7, gcc-8 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 8 int a = 0, b = 1; 9 10 int main(int argc, char **argv) { 11 12 #pragma omp parallel 13 #pragma omp single 14 { 15 #pragma omp taskgroup task_reduction(+: a) task_reduction(*: b) 16 { 17 int i; 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 #pragma omp task in_reduction(+: a) 24 { 25 a += i; 26 } 27 } 28 } 29 } 30 } 31 32 if (a != 30) { 33 fprintf(stderr, "error: a != 30. Instead a = %d\n", a); 34 exit(EXIT_FAILURE); 35 } 36 if (b != 120) { 37 fprintf(stderr, "error: b != 120. Instead b = %d\n", b); 38 exit(EXIT_FAILURE); 39 } 40 41 return EXIT_SUCCESS; 42 } 43