target-26.c 864 B

123456789101112131415161718192021222324252627282930313233343536
  1. extern void abort (void);
  2. #pragma omp declare target
  3. int a[4] = { 2, 3, 4, 5 }, *b;
  4. #pragma omp end declare target
  5. int
  6. main ()
  7. {
  8. int err;
  9. int c[3] = { 6, 7, 8 };
  10. b = c;
  11. #pragma omp target map(to: a[0:2], b[0:2]) map(from: err)
  12. err = a[0] != 2 || a[1] != 3 || a[2] != 4 || a[3] != 5 || b[0] != 6 || b[1] != 7;
  13. if (err)
  14. abort ();
  15. a[1] = 9;
  16. a[2] = 10;
  17. #pragma omp target map(always,to:a[1:2]) map(from: err)
  18. err = a[0] != 2 || a[1] != 9 || a[2] != 10 || a[3] != 5;
  19. if (err)
  20. abort ();
  21. #pragma omp parallel firstprivate(a, b, c, err) num_threads (2)
  22. #pragma omp single
  23. {
  24. b = c + 1;
  25. a[0] = 11;
  26. a[2] = 13;
  27. c[1] = 14;
  28. int d = 0;
  29. #pragma omp target map(to: a[0:3], b[d:2]) map (from: err)
  30. err = a[0] != 11 || a[1] != 9 || a[2] != 13 || b[0] != 14 || b[1] != 8;
  31. if (err)
  32. abort ();
  33. }
  34. return 0;
  35. }