43 lines · c
1// RUN: %libomp-compile-and-run2 3// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7, gcc-84 5#include <stdio.h>6#include <stdlib.h>7 8int a = 0, b = 1;9 10int main(int argc, char **argv) {11 12 #pragma omp parallel13 #pragma omp single14 {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