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

Abhinav Gaba via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 3 09:54:36 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);
----------------
abhinavgaba wrote:

Up to you, but it might be better to do something like:

```c
printf("%d\n", v->s0->b); // CHECK: 10
```

That makes it easier to glance at failing test logs to see the expected/actual value.

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


More information about the llvm-commits mailing list