1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /* { dg-do run } */
- #include <omp.h>
- extern void abort (void);
- int
- main (void)
- {
- int i = 5, l = 0;
- int foo (void) { return i == 6; }
- int bar (void) { return i - 3; }
- omp_set_dynamic (0);
- #pragma omp parallel if (foo ()) num_threads (bar ()) reduction (|:l)
- if (omp_get_num_threads () != 1)
- l = 1;
- i++;
- #pragma omp parallel if (foo ()) num_threads (bar ()) reduction (|:l)
- if (omp_get_num_threads () != 3)
- l = 1;
- i++;
- #pragma omp master
- if (bar () != 4)
- abort ();
- #pragma omp single
- {
- if (foo ())
- abort ();
- i--;
- if (! foo ())
- abort ();
- }
- if (l)
- abort ();
- i = 8;
- #pragma omp atomic
- l += bar ();
- if (l != 5)
- abort ();
- return 0;
- }
|