1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /* PR middle-end/36802 */
- extern void abort (void);
- extern int omp_set_dynamic (int);
- extern void omp_set_nested (int);
- extern int omp_get_num_threads (void);
- int q;
- int
- foo (int k)
- {
- int i = 6, n = 0;
- omp_set_dynamic (0);
- omp_set_nested (1);
- #pragma omp parallel shared (i) num_threads (3)
- {
- int l;
- if (omp_get_num_threads () != 3)
- #pragma omp atomic
- n += 1;
- else
- #pragma omp for
- for (l = 0; l < 3; l++)
- if (k)
- #pragma omp atomic
- q += i;
- else
- #pragma omp parallel shared (i) num_threads (4)
- {
- if (omp_get_num_threads () != 4)
- #pragma omp atomic
- n += 1;
- #pragma omp critical
- i += 1;
- }
- }
- if (n == 0 && i != 6 + 3 * 4)
- abort ();
- return 0;
- }
- int
- main (void)
- {
- foo (0);
- return 0;
- }
|