| // { dg-additional-options "-Wno-deprecated-openmp" } |
| #include <omp.h> |
| #include <stdlib.h> |
| |
| int |
| main (void) |
| { |
| int i = 0, j = 0, k = 0, l = 0; |
| #pragma omp parallel num_threads(4) reduction(-:i) reduction(|:k) \ |
| reduction(^:l) |
| { |
| if (i != 0 || k != 0 || l != 0) |
| #pragma omp atomic |
| j |= 1; |
| |
| if (omp_get_num_threads () != 4) |
| #pragma omp atomic |
| j |= 2; |
| |
| i = omp_get_thread_num (); |
| k = 1 << (2 * i); |
| l = 0xea << (3 * i); |
| } |
| |
| if (j & 1) |
| abort (); |
| if ((j & 2) == 0) |
| { |
| if (i != (0 + 1 + 2 + 3)) |
| abort (); |
| if (k != 0x55) |
| abort (); |
| if (l != 0x1e93a) |
| abort (); |
| } |
| return 0; |
| } |