/* { dg-do compile } */ void a31_2 (float *x, int *y, int n) { int i, b, b_p; float a, a_p; a = 0.0; b = 0; #pragma omp parallel shared(a, b, x, y, n) \ private(a_p, b_p) { a_p = 0.0; b_p = 0; #pragma omp for private(i) for (i = 0; i < n; i++) { a_p += x[i]; b_p ^= y[i]; } #pragma omp critical { a += a_p; b ^= b_p; } } }