[llvm] [OpenMP] Add tests for mapping of chained 'containing' structs (PR #156703)

Julian Brown via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 4 09:17:02 PDT 2025


================
@@ -0,0 +1,58 @@
+// RUN: %libomptarget-compilexx-and-run-generic
+// XFAIL: *
+
+#include <cstdlib>
+#include <cstdio>
+#include <cassert>
+
+struct S {
+  int a;
+  int b;
+  int c;
+};
+
+struct T {
+  S *s0;
+  S *s1;
+  S *s2;
+};
+
+int main() {
+  T *v = (T *) malloc (sizeof(T));
+  v->s0 = (S *) malloc (sizeof(S));
+  v->s1 = (S *) malloc (sizeof(S));
+  v->s2 = (S *) malloc (sizeof(S));
+  v->s0->a = 10;
+  v->s0->b = 10;
+  v->s0->c = 10;
+  v->s1->a = 20;
+  v->s1->b = 20;
+  v->s1->c = 20;
+  v->s2->a = 30;
+  v->s2->b = 30;
+  v->s2->c = 30;
+
+#pragma omp target map(to: v[:1]) map(tofrom: v->s1->b, v->s1->c, v->s2->b)
+  {
+    v->s1->b += 3;
+    v->s1->c += 5;
+    v->s2->b += 7;
+  }
+
+  assert (v->s0->a == 10);
----------------
jtb20 wrote:

I've done this, after puzzling for a while how to deal with different output for (effectively runtime-dependent) unified vs. separate address spaces for mapping... I couldn't find anything that does that in the existing offload/mapping tests, though I may have missed something. Anyway, this new version seems to work.

https://github.com/llvm/llvm-project/pull/156703


More information about the llvm-commits mailing list