target-21.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. extern void abort (void);
  2. union U { int x; long long y; };
  3. struct T { int a; union U b; int c; };
  4. struct S { int s; int u; struct T v; int x[10]; union U w; int y[10]; int z[10]; };
  5. volatile int z;
  6. int
  7. main ()
  8. {
  9. struct S s;
  10. s.s = 0;
  11. s.u = 1;
  12. s.v.a = 2;
  13. s.v.b.y = 3LL;
  14. s.v.c = 19;
  15. s.w.x = 4;
  16. s.x[0] = 7;
  17. s.x[1] = 8;
  18. s.y[3] = 9;
  19. s.y[4] = 10;
  20. s.y[5] = 11;
  21. int err = 0;
  22. #pragma omp target map (to:s.v.b, s.u, s.x[0:z + 2]) \
  23. map (tofrom:s.y[3:3]) \
  24. map (from: s.w, s.z[z + 1:z + 3], err)
  25. {
  26. err = 0;
  27. if (s.u != 1 || s.v.b.y != 3LL || s.x[0] != 7 || s.x[1] != 8
  28. || s.y[3] != 9 || s.y[4] != 10 || s.y[5] != 11)
  29. err = 1;
  30. s.w.x = 6;
  31. s.y[3] = 12;
  32. s.y[4] = 13;
  33. s.y[5] = 14;
  34. s.z[1] = 15;
  35. s.z[2] = 16;
  36. s.z[3] = 17;
  37. }
  38. if (err || s.w.x != 6 || s.y[3] != 12 || s.y[4] != 13 || s.y[5] != 14
  39. || s.z[1] != 15 || s.z[2] != 16 || s.z[3] != 17)
  40. abort ();
  41. s.u++;
  42. s.v.a++;
  43. s.v.b.y++;
  44. s.w.x++;
  45. s.x[1] = 18;
  46. s.z[0] = 19;
  47. #pragma omp target data map (tofrom: s)
  48. #pragma omp target map (always to: s.w, s.x[1], err) map (alloc:s.u, s.v.b, s.z[z:z + 1])
  49. {
  50. err = 0;
  51. if (s.u != 2 || s.v.b.y != 4LL || s.w.x != 7 || s.x[1] != 18 || s.z[0] != 19)
  52. err = 1;
  53. s.w.x = 8;
  54. s.x[1] = 20;
  55. s.z[0] = 21;
  56. }
  57. if (err || s.w.x != 8 || s.x[1] != 20 || s.z[0] != 21)
  58. abort ();
  59. s.u++;
  60. s.v.a++;
  61. s.v.b.y++;
  62. s.w.x++;
  63. s.x[0] = 22;
  64. s.x[1] = 23;
  65. #pragma omp target data map (from: s.w, s.x[0:2]) map (to: s.v.b, s.u)
  66. #pragma omp target map (always to: s.w, s.x[0:2], err) map (alloc:s.u, s.v.b)
  67. {
  68. err = 0;
  69. if (s.u != 3 || s.v.b.y != 5LL || s.w.x != 9 || s.x[0] != 22 || s.x[1] != 23)
  70. err = 1;
  71. s.w.x = 11;
  72. s.x[0] = 24;
  73. s.x[1] = 25;
  74. }
  75. if (err || s.w.x != 11 || s.x[0] != 24 || s.x[1] != 25)
  76. abort ();
  77. return 0;
  78. }