12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #ifdef __cplusplus
- extern "C"
- #endif
- void abort (void);
- int a;
- long int b = 1;
- void
- foo (void)
- {
- int i;
- for (i = 0; i < 2; i++)
- #pragma omp task in_reduction (+: a) in_reduction (*: b)
- {
- a += 7;
- b *= 2;
- }
- }
- int
- main ()
- {
- int c = 0;
- #pragma omp parallel
- #pragma omp single
- {
- long int d = 1;
- #pragma omp taskgroup task_reduction (+: a, c) task_reduction (*: b, d)
- {
- int i;
- for (i = 0; i < 4; i++)
- #pragma omp task in_reduction (+: a, c) in_reduction (*: b, d)
- {
- int j;
- a += 7;
- b *= 2;
- for (j = 0; j < 2; j++)
- #pragma omp task in_reduction (+: a, c) in_reduction (*: b, d)
- {
- a += 7;
- b *= 2;
- c += 9;
- d *= 3;
- foo ();
- }
- c += 9;
- d *= 3;
- }
- }
- #define THREEP4 (3L * 3L * 3L * 3L)
- if (d != (THREEP4 * THREEP4 * THREEP4))
- abort ();
- }
- if (a != 28 * 7 || b != (1L << 28) || c != 12 * 9)
- abort ();
- return 0;
- }
|