target-13.c 810 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifdef __cplusplus
  2. extern "C"
  3. #else
  4. extern
  5. #endif
  6. void abort (void);
  7. struct S { int s, t; };
  8. void
  9. foo ()
  10. {
  11. int x = 5, y = 6, err = 0;
  12. struct S u = { 7, 8 }, v = { 9, 10 };
  13. double s = 11.5, t = 12.5;
  14. #pragma omp target private (x, u, s) firstprivate (y, v, t) map(from:err)
  15. {
  16. x = y;
  17. u = v;
  18. s = t;
  19. err = (x != 6 || y != 6
  20. || u.s != 9 || u.t != 10 || v.s != 9 || v.t != 10
  21. || s != 12.5 || t != 12.5);
  22. x += 1;
  23. y += 2;
  24. u.s += 3;
  25. v.t += 4;
  26. s += 2.5;
  27. t += 3.0;
  28. if (x != 7 || y != 8
  29. || u.s != 12 || u.t != 10 || v.s != 9 || v.t != 14
  30. || s != 15.0 || t != 15.5)
  31. err = 1;
  32. }
  33. if (err || x != 5 || y != 6
  34. || u.s != 7 || u.t != 8 || v.s != 9 || v.t != 10
  35. || s != 11.5 || t != 12.5)
  36. abort ();
  37. }
  38. int
  39. main ()
  40. {
  41. foo ();
  42. return 0;
  43. }