target-9.C 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. extern "C" void abort (void);
  2. struct S { int e, f; };
  3. void
  4. foo (int *&p, int (&s)[5], int &t, S &u, int n)
  5. {
  6. int a[4] = { 7, 8, 9, 10 }, b[n], c[3] = { 20, 21, 22 };
  7. int *r = a + 1, *q = p - 1, i, err;
  8. int v = 27;
  9. S w = { 28, 29 };
  10. for (i = 0; i < n; i++)
  11. b[i] = 9 + i;
  12. #pragma omp target data map(to:a)
  13. #pragma omp target data use_device_ptr(r) map(from:err)
  14. #pragma omp target is_device_ptr(r) private(i) map(from:err)
  15. {
  16. err = 0;
  17. for (i = 0; i < 4; i++)
  18. if (r[i - 1] != 7 + i)
  19. err = 1;
  20. }
  21. if (err)
  22. abort ();
  23. #pragma omp target data map(to:q[:4])
  24. #pragma omp target data use_device_ptr(p) map(from:err)
  25. #pragma omp target is_device_ptr(p) private(i) map(from:err)
  26. {
  27. err = 0;
  28. for (i = 0; i < 4; i++)
  29. if (p[i - 1] != i)
  30. err = 1;
  31. }
  32. if (err)
  33. abort ();
  34. #pragma omp target data map(to:b)
  35. #pragma omp target data use_device_addr(b) map(from:err)
  36. #pragma omp target is_device_ptr(b) private(i) map(from:err)
  37. {
  38. err = 0;
  39. for (i = 0; i < n; i++)
  40. if (b[i] != 9 + i)
  41. err = 1;
  42. }
  43. if (err)
  44. abort ();
  45. #pragma omp target data map(to:c)
  46. #pragma omp target data use_device_addr(c) map(from:err)
  47. #pragma omp target is_device_ptr(c) private(i) map(from:err)
  48. {
  49. err = 0;
  50. for (i = 0; i < 3; i++)
  51. if (c[i] != 20 + i)
  52. err = 1;
  53. }
  54. if (err)
  55. abort ();
  56. #pragma omp target data map(to:s[:5])
  57. #pragma omp target data use_device_addr(s) map(from:err)
  58. #pragma omp target is_device_ptr(s) private(i) map(from:err)
  59. {
  60. err = 0;
  61. for (i = 0; i < 5; i++)
  62. if (s[i] != 17 + i)
  63. err = 1;
  64. }
  65. if (err)
  66. abort ();
  67. #pragma omp target data map(to: v) map(to:u)
  68. #pragma omp target data use_device_addr (v) use_device_addr (u) map(from:err)
  69. {
  70. int *z = &v;
  71. S *x = &u;
  72. #pragma omp target is_device_ptr (z, x) map(from:err)
  73. {
  74. err = 0;
  75. if (*z != 27 || x->e != 25 || x->f != 26)
  76. err = 1;
  77. }
  78. }
  79. if (err)
  80. abort ();
  81. #pragma omp target data map(to: t, w)
  82. #pragma omp target data use_device_addr (t, w) map(from:err)
  83. {
  84. int *z = &t;
  85. S *x = &w;
  86. #pragma omp target is_device_ptr (z) is_device_ptr (x) map(from:err)
  87. {
  88. err = 0;
  89. if (*z != 24 || x->e != 28 || x->f != 29)
  90. err = 1;
  91. }
  92. }
  93. if (err)
  94. abort ();
  95. }
  96. int
  97. main ()
  98. {
  99. int a[4] = { 0, 1, 2, 3 }, b[5] = { 17, 18, 19, 20, 21 };
  100. int *p = a + 1;
  101. int t = 24;
  102. S u = { 25, 26 };
  103. foo (p, b, t, u, 9);
  104. }