Add 'libgomp.oacc-c-c++-common/host_data-6.c'
authorThomas Schwinge <thomas@codesourcery.com>
Mon, 9 Dec 2019 11:40:08 +0000 (12:40 +0100)
committerThomas Schwinge <tschwinge@gcc.gnu.org>
Mon, 9 Dec 2019 11:40:08 +0000 (12:40 +0100)
libgomp/
* testsuite/libgomp.oacc-c-c++-common/host_data-6.c: New file.

From-SVN: r279119

libgomp/ChangeLog
libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-6.c [new file with mode: 0644]

index c5541bcec81dd0de9b5a450d298e96e7d1703b91..6ef2f24e4d50fde5e5710cf1f9cebe2cbc8d38a1 100644 (file)
@@ -1,5 +1,7 @@
 2019-12-09  Thomas Schwinge  <thomas@codesourcery.com>
 
+       * testsuite/libgomp.oacc-c-c++-common/host_data-6.c: New file.
+
        * target.c (gomp_exit_data): Use 'gomp_remove_var'.
 
 2019-12-09  Tobias Burnus  <tobias@codesourcery.com>
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-6.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-6.c
new file mode 100644 (file)
index 0000000..1cda442
--- /dev/null
@@ -0,0 +1,47 @@
+/* Call 'acc_memcpy_from_device' inside '#pragma acc host_data'.  */
+
+/* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <openacc.h>
+
+int
+main ()
+{
+  const int SIZE = 318;
+  const int c0 = 22;
+  const int c1 = 112;
+
+  char *h = (char *) malloc (SIZE);
+
+  memset (h, c0, SIZE);
+
+#pragma acc data create (h[0:SIZE - 44])
+  {
+#pragma acc update device (h[0:SIZE - 44])
+
+    memset (h, c1, 67);
+
+    void *d = h;
+#pragma acc host_data use_device (d)
+    {
+      acc_memcpy_from_device (h, d, 12);
+    }
+  }
+
+  for (int i = 0; i < SIZE; ++i)
+    {
+      if (i < 12)
+       assert (h[i] == c0);
+      else if (i < 67)
+       assert (h[i] == c1);
+      else
+       assert (h[i] == c0);
+    }
+
+  free (h);
+
+  return 0;
+}