pr80809-3.c 697 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /* PR middle-end/80809 */
  2. /* { dg-do run } */
  3. __attribute__((noinline, noclone)) void
  4. foo (int x)
  5. {
  6. int i, v[x], w[16];
  7. for (i = 0; i < x; i++)
  8. v[i] = i;
  9. for (i = 0; i < 16; i++)
  10. w[i] = 0;
  11. #pragma omp parallel
  12. #pragma omp single
  13. {
  14. int z[x];
  15. for (i = 0; i < x; i++)
  16. z[0] = 0;
  17. for (i = 0; i < 16; i++)
  18. #pragma omp task firstprivate (z) firstprivate (v)
  19. {
  20. int j;
  21. for (j = 0; j < x; j++)
  22. z[j] = i;
  23. for (j = 0; j < x; j++)
  24. v[j] += z[j];
  25. for (j = 0; j < x; j++)
  26. w[i] += v[j];
  27. }
  28. }
  29. for (i = 0; i < 16; i++)
  30. if (w[i] != (x - 1) * x / 2 + x * i)
  31. __builtin_abort ();
  32. }
  33. int
  34. main ()
  35. {
  36. foo (4);
  37. foo (27);
  38. foo (196);
  39. return 0;
  40. }