| #include <stdlib.h> |
| |
| int x; |
| long long y; |
| int r, s, t; |
| |
| void |
| foo (const char *a) |
| { |
| #pragma omp parallel sections lastprivate (conditional: x, y) |
| { |
| if (a[0]) |
| x = a[0]; |
| #pragma omp section |
| { |
| if (a[1]) |
| x = a[1]; |
| if (a[2]) |
| y = a[2]; |
| } |
| #pragma omp section |
| if (a[3]) |
| y = a[3]; |
| #pragma omp section |
| if (a[4]) |
| x = a[4]; |
| #pragma omp section |
| { |
| if (a[5]) |
| x = a[5]; |
| if (a[6]) |
| y = a[6]; |
| } |
| } |
| } |
| |
| void |
| bar (const char *a) |
| { |
| #pragma omp parallel sections lastprivate (conditional: x, y) reduction (task, +: t) |
| { |
| if (a[0]) |
| x = a[0]; |
| #pragma omp section |
| { |
| if (a[1]) |
| x = a[1]; |
| if (a[2]) |
| y = a[2]; |
| #pragma omp task in_reduction (+: t) |
| t++; |
| } |
| #pragma omp section |
| if (a[3]) |
| y = a[3]; |
| #pragma omp section |
| if (a[4]) |
| x = a[4]; |
| #pragma omp section |
| { |
| #pragma omp task in_reduction (+: t) |
| ++t; |
| if (a[5]) |
| x = a[5]; |
| if (a[6]) |
| y = a[6]; |
| } |
| } |
| } |
| |
| void |
| baz (const char *a) |
| { |
| #pragma omp parallel sections lastprivate (conditional: x, y) reduction (+: r, s) |
| { |
| if (a[0]) |
| x = a[0]; |
| #pragma omp section |
| { |
| if (a[1]) |
| x = a[1]; |
| ++r; |
| ++s; |
| if (a[2]) |
| y = a[2]; |
| } |
| #pragma omp section |
| if (a[3]) |
| y = a[3]; |
| #pragma omp section |
| { |
| ++s; |
| if (a[4]) |
| x = a[4]; |
| } |
| #pragma omp section |
| { |
| if (a[5]) |
| x = a[5]; |
| if (a[6]) |
| y = a[6]; |
| ++s; |
| } |
| } |
| } |
| |
| int |
| main () |
| { |
| foo ("\0\1\2\3\0\5"); |
| if (x != 5 || y != 3) |
| abort (); |
| |
| foo ("\6\0\0\0\0\0\7"); |
| if (x != 6 || y != 7) |
| abort (); |
| |
| foo ("\7\6\5\4\3\2\1"); |
| if (x != 2 || y != 1) |
| abort (); |
| |
| foo ("\0\0\4\3\0\7"); |
| if (x != 7 || y != 3) |
| abort (); |
| |
| bar ("\0\1\2\4\0\5"); |
| if (x != 5 || y != 4 || t != 2) |
| abort (); |
| |
| bar ("\6\0\0\0\0\0\7"); |
| if (x != 6 || y != 7 || t != 4) |
| abort (); |
| |
| bar ("\7\6\5\4\3\2\1"); |
| if (x != 2 || y != 1 || t != 6) |
| abort (); |
| |
| bar ("\0\0\4\3\0\7"); |
| if (x != 7 || y != 3 || t != 8) |
| abort (); |
| |
| baz ("\0\1\2\4\0\5"); |
| if (x != 5 || y != 4 || r != 1 || s != 3) |
| abort (); |
| |
| baz ("\6\0\0\0\0\0\7"); |
| if (x != 6 || y != 7 || r != 2 || s != 6) |
| abort (); |
| |
| baz ("\7\6\5\4\3\2\1"); |
| if (x != 2 || y != 1 || r != 3 || s != 9) |
| abort (); |
| |
| baz ("\0\0\4\3\0\7"); |
| if (x != 7 || y != 3 || r != 4 || s != 12) |
| abort (); |
| |
| return 0; |
| } |