diff options
author | Hans Wennborg <hans@hanshq.net> | 2019-02-27 18:49:24 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2019-02-27 18:49:24 +0000 |
commit | 78e6ab58a5a641e07f6d8dab15bdb16210f3afba (patch) | |
tree | 93c484acf8bc75deaf25f89921d757a15337cba4 /rc3/libomptarget/test/mapping/pr38704.c | |
parent | d94992145eaea998bb8901485373e60cb079232c (diff) |
Creating release candidate rc3 from release_800 branch
git-svn-id: https://llvm.org/svn/llvm-project/openmp/tags/RELEASE_800@355016 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'rc3/libomptarget/test/mapping/pr38704.c')
-rw-r--r-- | rc3/libomptarget/test/mapping/pr38704.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/rc3/libomptarget/test/mapping/pr38704.c b/rc3/libomptarget/test/mapping/pr38704.c new file mode 100644 index 0000000..3e7135e --- /dev/null +++ b/rc3/libomptarget/test/mapping/pr38704.c @@ -0,0 +1,47 @@ +// RUN: %libomptarget-compile-run-and-check-aarch64-unknown-linux-gnu +// RUN: %libomptarget-compile-run-and-check-powerpc64-ibm-linux-gnu +// RUN: %libomptarget-compile-run-and-check-powerpc64le-ibm-linux-gnu +// RUN: %libomptarget-compile-run-and-check-x86_64-pc-linux-gnu + +// Clang 6.0 doesn't use the new map interface, undefined behavior when +// the compiler emits "old" interface code for structures. +// UNSUPPORTED: clang-6 + +#include <stdio.h> +#include <stdlib.h> + +typedef struct { + int *ptr1; + int *ptr2; +} StructWithPtrs; + +int main(int argc, char *argv[]) { + 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 + // CHECK: s.ptr2[1] = 3 + printf("s.ptr1[0] = %d\n", s.ptr1[0]); + printf("s.ptr2[0] = %d\n", s.ptr2[0]); + printf("s.ptr2[1] = %d\n", s.ptr2[1]); + + free(s.ptr1); + free(s.ptr2); + free(s2.ptr1); + free(s2.ptr2); + + return 0; +} |