| extern | |
| #ifdef __cplusplus | |
| "C" | |
| #endif | |
| void abort (void); | |
| void | |
| bar (long long int *p) | |
| { | |
| p[0] *= 2; | |
| #pragma omp task in_reduction (*: p[0]) | |
| p[0] *= 3; | |
| } | |
| void | |
| foo (long long int *p, long long int *q) | |
| { | |
| #pragma omp taskgroup task_reduction (*: p[0]) | |
| { | |
| #pragma omp task in_reduction (*: p[0]) | |
| bar (p); | |
| #pragma omp task in_reduction (*: p[0]) | |
| bar (p); | |
| bar (p); | |
| #pragma omp taskgroup task_reduction (*: q[0]) | |
| { | |
| #pragma omp task in_reduction (*: q[0]) | |
| bar (q); | |
| #pragma omp task in_reduction (*: q[0]) | |
| bar (q); | |
| #pragma omp task in_reduction (*: q[0]) | |
| bar (q); | |
| bar (q); | |
| #pragma omp task in_reduction (*: p[0]) | |
| { | |
| #pragma omp taskgroup task_reduction (*: p[0]) | |
| { | |
| #pragma omp task in_reduction (*: p[0]) | |
| bar (p); | |
| p[0] *= 2; | |
| #pragma omp task in_reduction (*: p[0]) | |
| bar (p); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| int | |
| main () | |
| { | |
| long long int p = 1LL, q = 1LL; | |
| foo (&p, &q); | |
| if (p != 6LL * 6LL * 6LL * 6LL * 6LL * 2LL || q != 6LL * 6LL * 6LL * 6LL) | |
| abort (); | |
| p = 1LL; | |
| q = 1LL; | |
| #pragma omp taskgroup | |
| foo (&p, &q); | |
| if (p != 6LL * 6LL * 6LL * 6LL * 6LL * 2LL || q != 6LL * 6LL * 6LL * 6LL) | |
| abort (); | |
| p = 1LL; | |
| q = 1LL; | |
| #pragma omp parallel | |
| #pragma omp single | |
| foo (&p, &q); | |
| if (p != 6LL * 6LL * 6LL * 6LL * 6LL * 2LL || q != 6LL * 6LL * 6LL * 6LL) | |
| abort (); | |
| return 0; | |
| } |