| extern void abort (void); |
| |
| int |
| foo (void) |
| { |
| int i = -1, j = -1, k; |
| void nested (void) { i++; j++; } |
| nested (); |
| #pragma omp taskgroup task_reduction (+: i) |
| { |
| #pragma omp task in_reduction (+: i) |
| i++; |
| #pragma omp task in_reduction (+: i) |
| i += 6; |
| } |
| #pragma omp taskloop reduction (+: j) |
| for (k = 0; k < 2; k++) |
| { |
| j += 5; |
| #pragma omp task in_reduction (+: j) |
| j += 31; |
| } |
| return i + j; |
| } |
| |
| int |
| bar (void) |
| { |
| int i = 0, j = 0; |
| void nested (void) |
| { |
| int k; |
| #pragma omp taskgroup task_reduction (+: i) |
| { |
| #pragma omp task in_reduction (+: i) |
| i++; |
| #pragma omp task in_reduction (+: i) |
| i += 7; |
| } |
| #pragma omp taskloop reduction (+: j) |
| for (k = 0; k < 2; k++) |
| { |
| j += 21; |
| #pragma omp task in_reduction (+: j) |
| j += 8; |
| } |
| } |
| nested (); |
| return i + j; |
| } |
| |
| int |
| main () |
| { |
| if (foo () != (1 + 6 + (5 + 31) * 2)) |
| abort (); |
| if (bar () != (1 + 7 + (21 + 8) * 2)) |
| abort (); |
| return 0; |
| } |