collapse-3.c 656 B

12345678910111213141516171819202122232425262728293031
  1. /* { dg-do run } */
  2. /* { dg-additional-options "-std=gnu99" } */
  3. #include <string.h>
  4. #include <stdlib.h>
  5. int
  6. main (void)
  7. {
  8. int i2, l = 0;
  9. int a[3][3][3];
  10. memset (a, '\0', sizeof (a));
  11. #pragma omp parallel for collapse(4 - 1) schedule(static, 4)
  12. for (int i = 0; i < 2; i++)
  13. for (int j = 0; j < 2; j++)
  14. for (int k = 0; k < 2; k++)
  15. a[i][j][k] = i + j * 4 + k * 16;
  16. #pragma omp parallel
  17. {
  18. #pragma omp for collapse(2) reduction(|:l)
  19. for (i2 = 0; i2 < 2; i2++)
  20. for (int j = 0; j < 2; j++)
  21. for (int k = 0; k < 2; k++)
  22. if (a[i2][j][k] != i2 + j * 4 + k * 16)
  23. l = 1;
  24. }
  25. if (l)
  26. abort ();
  27. return 0;
  28. }