[OPENMP] Add the test to check that the libomptarget does not cause
authorAlexey Bataev <a.bataev@hotmail.com>
Fri, 28 Sep 2018 17:13:11 +0000 (17:13 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Fri, 28 Sep 2018 17:13:11 +0000 (17:13 +0000)
infinite loop on removing non-mapped pointer-with-object.

Added test to check that libomptarget does not cause infinite loop when
trying to unmap the pointer-with-object data that was not previously
mapped.

llvm-svn: 343344

openmp/libomptarget/test/mapping/pr38704.c

index d1b3cc4..3e7135e 100644 (file)
@@ -16,16 +16,20 @@ typedef struct {
 } StructWithPtrs;
 
 int main(int argc, char *argv[]) {
-  StructWithPtrs s;
+  StructWithPtrs s, s2;
   s.ptr1 = malloc(sizeof(int));
   s.ptr2 = malloc(2 * sizeof(int));
+  s2.ptr1 = malloc(sizeof(int));
+  s2.ptr2 = malloc(2 * sizeof(int));
 
+#pragma omp target enter data map(to: s2.ptr2[0:1])
 #pragma omp target map(s.ptr1[0:1], s.ptr2[0:2])
   {
     s.ptr1[0] = 1;
     s.ptr2[0] = 2;
     s.ptr2[1] = 3;
   }
+#pragma omp target exit data map(from: s2.ptr1[0:1], s2.ptr2[0:1])
 
   // CHECK: s.ptr1[0] = 1
   // CHECK: s.ptr2[0] = 2
@@ -36,6 +40,8 @@ int main(int argc, char *argv[]) {
 
   free(s.ptr1);
   free(s.ptr2);
+  free(s2.ptr1);
+  free(s2.ptr2);
 
   return 0;
 }