pr64734.c 924 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /* PR middle-end/64734 */
  2. #include <stdlib.h>
  3. void
  4. foo (int *x, int *y)
  5. {
  6. #pragma omp target map (alloc:x[0]) map (alloc:y[0:8])
  7. {
  8. int i;
  9. for (i = 0; i < 8; i++)
  10. if (y[i] != 2 + i)
  11. break;
  12. if (i != 8 || *x != 1)
  13. *x = 6;
  14. else
  15. {
  16. *x = 8;
  17. for (i = 0; i < 8; i++)
  18. y[i] = 9 + i;
  19. }
  20. }
  21. #pragma omp target update from (y[0:8]) from (x[0])
  22. }
  23. void
  24. bar (void)
  25. {
  26. int x = 1, y[32] = { 0 };
  27. #pragma omp target data map (to:y[0:32]) map (to:x)
  28. ;
  29. }
  30. int
  31. main ()
  32. {
  33. int x = 1, y[8] = { 2, 3, 4, 5, 6, 7, 8, 9 }, i;
  34. #pragma omp target data map (to:y[0:8]) map (to:x)
  35. ;
  36. #pragma omp target data map (to:y[0:8]) map (to:x)
  37. {
  38. #pragma omp target update from (y[0:8]) from (x)
  39. }
  40. #pragma omp target data map (to:y[0:8]) map (to:x)
  41. foo (&x, &y[0]);
  42. if (x != 8)
  43. abort ();
  44. for (i = 0; i < 8; i++)
  45. if (y[i] != 9 + i)
  46. abort ();
  47. return 0;
  48. }