| #include <stdlib.h> |
| #include <unistd.h> |
| |
| int |
| main () |
| { |
| #pragma omp parallel |
| #pragma omp single |
| { |
| int x = 1, y = 2, z = 3; |
| #pragma omp taskgroup |
| { |
| #pragma omp task shared (x, y, z) depend(inout: x, y) \ |
| depend (in: z) if (x > 10) |
| { |
| if (x != 1 || y != 2 || z != 3) |
| abort (); |
| x = 4; |
| y = 5; |
| } |
| /* The above task has depend clauses, but no dependencies |
| on earlier tasks, and is if (0), so must be scheduled |
| immediately. */ |
| if (x != 4 || y != 5) |
| abort (); |
| } |
| #pragma omp taskgroup |
| { |
| #pragma omp task shared (x, y) depend(in: x, y) |
| { |
| usleep (10000); |
| if (x != 4 || y != 5 || z != 3) |
| abort (); |
| } |
| #pragma omp task shared (x, y) depend(in: x, y) |
| { |
| usleep (10000); |
| if (x != 4 || y != 5 || z != 3) |
| abort (); |
| } |
| #pragma omp task shared (x, y, z) depend(inout: x, y) \ |
| depend (in: z) if (x > 10) |
| { |
| if (x != 4 || y != 5 || z != 3) |
| abort (); |
| x = 6; |
| y = 7; |
| } |
| /* The above task has depend clauses, and may have dependencies |
| on earlier tasks, while it is if (0), it can be deferred. */ |
| } |
| if (x != 6 || y != 7) |
| abort (); |
| } |
| return 0; |
| } |