target-37.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. extern void abort (void);
  2. struct S { int e, f; };
  3. void
  4. foo (int n)
  5. {
  6. int a[4] = { 0, 1, 2, 3 }, b[n], c = 4;
  7. struct S d = { 5, 6 };
  8. int *p = a + 1, i, err;
  9. for (i = 0; i < n; i++)
  10. b[i] = 9 + i;
  11. #pragma omp target data use_device_ptr(p) map(from:err) map(to:a)
  12. #pragma omp target is_device_ptr(p) private(i) map(from:err)
  13. {
  14. err = 0;
  15. for (i = 0; i < 4; i++)
  16. if (p[i - 1] != i)
  17. err = 1;
  18. }
  19. if (err)
  20. abort ();
  21. for (i = 0; i < 4; i++)
  22. a[i] = 23 + i;
  23. #pragma omp target data map(to:a) use_device_addr(a) map(from:err)
  24. #pragma omp target is_device_ptr(a) private(i) map(from:err)
  25. {
  26. err = 0;
  27. for (i = 0; i < 4; i++)
  28. if (a[i] != 23 + i)
  29. err = 1;
  30. }
  31. if (err)
  32. abort ();
  33. #pragma omp target data use_device_addr(b) map(from:err) map(to:b)
  34. #pragma omp target is_device_ptr(b) private(i) map(from:err)
  35. {
  36. err = 0;
  37. for (i = 0; i < 4; i++)
  38. if (b[i] != 9 + i)
  39. err = 1;
  40. }
  41. if (err)
  42. abort ();
  43. #pragma omp target data map(to:c) use_device_addr(c) map(from:err)
  44. {
  45. int *q = &c;
  46. #pragma omp target is_device_ptr(q) map(from:err)
  47. {
  48. err = *q != 4;
  49. }
  50. }
  51. if (err)
  52. abort ();
  53. #pragma omp target data use_device_addr(d) map(to:d) map(from:err)
  54. {
  55. struct S *r = &d;
  56. #pragma omp target is_device_ptr(r) map(from:err)
  57. {
  58. err = r->e != 5 || r->f != 6;
  59. }
  60. }
  61. if (err)
  62. abort ();
  63. }
  64. int
  65. main ()
  66. {
  67. foo (9);
  68. return 0;
  69. }